Technical Briefing: goose

The Problem

goose addresses the need for a local, extensible AI agent that automates engineering tasks beyond code suggestions—handling installation, execution, editing, and testing with any LLM. The repository comprises 11 self-contained projects under a single organization, with the primary agent code residing in crates/goose/.

What This Does

goose is an on-machine AI agent that automates complex development tasks from start to finish. It can build projects from scratch, write and execute code, debug failures, orchestrate workflows, and interact with external APIs autonomously. The codebase is organized into crates/ (368 code files, 39 data files), ui/ (451 code files, 22 data files), and documentation (88 code files). Key entry points include crates/goose/src/providers/oauth.rs:299 (execute, reaches 133 functions), crates/goose/examples/agent.rs:12 (main, reaches 409 functions), and crates/goose/src/gateway/handler.rs:44 (handle_message, reaches 425 functions). The agent architecture flows through crates/goose/src/acp/provider.rs (start, reaches 400 functions, called from 39 other files) and crates/goose/src/agents/agent.rs (60 functions, 10 classes, called from 17 files).

How It Is Wired

Execution starts at crates/goose/examples/agent.rs:12 (main) or crates/goose/src/acp/provider.rs:204 (start). The internal call graph contains 6000 resolved call edges between self-contained functions. Key hub modules with high blast radius: ui/desktop/src/i18n/index (152 dependents, 0 incoming), ui/desktop/src/api/index (100 dependents), and ui/desktop/src/components/ui/button (77 dependents, 1 importer). Eleven files participate in circular import dependencies, primarily in ui/desktop/src/components/. Five functions run external commands; 12 make outbound network calls; 22 read/write files; 31 call models for inference. Traced paths: execute -> spawn -> spawn_acp_process [subprocess via cmd.spawn()]; main -> create_session [db via tx.commit]. The crates/goose/src/config/base.rs (85 functions, called from 79 files) handles file-based secrets via write_secrets_file and from. Dependency structure: 83 declared packages across Cargo.toml files in crates/goose-acp/, crates/goose-cli/, crates/goose-mcp/, and crates/goose-sdk/.

How To Use It

Setup: The repository uses pnpm as package manager (pnpm lockfile present). Docker is supported via Dockerfile at root and .devcontainer/Dockerfile. The codebase is a workspace of 11 projects; the primary agent is in crates/goose/.

Configuration: Required environment variables and keys are loaded from ui/desktop/.env (identified as a committed secret-shaped path). The config system in crates/goose/src/config/base.rs reads from file-based secrets. No explicit env var list is documented beyond the .env file.

Running it: Entry point crates/goose/examples/agent.rs:12 (main) or the CLI via crates/goose-cli/. The README references quickstart and installation at block.github.io/goose docs, but no local build command is verifiable from the clone URL provided without accessing the repository directly.

Real-World Use

A developer could invoke handle_message from crates/goose/src/gateway/handler.rs:44 to process a user message through the agent workflow, which reaches 425 downstream functions including model inference, file operations, and database writes. The crates/goose/src/acp/provider.rs:start function orchestrates ACP (Agent Control Protocol) connections, running external commands and making network calls to MCP servers. For example, fetch_mcp_apps from crates/goose/src/goose_apps/app.rs:209 reaches 24 functions for discovering and loading remote applications.

Code Health & Issues

Static analysis (363 findings: 140 high, 219 medium, 4 low) identifies several production-reach concerns:

  • [HIGH] Remove committed .env and rotate credentials - ui/desktop/.env is tracked; the app loads from this file, so values may be live.
  • [HIGH] Upgrade pinned dependency with advisory - rmcp@1.2.0 has CVE-2026-42559 (high); sqlx@0.8 has GHSA-xmrp-424f-vfpx (medium); opentelemetry_sdk@0.31 has CVE-2026-48504 (medium).
  • [HIGH] CI does not invoke the test suite - 101 test files exist but no test command in the 101+ GitHub Actions workflows.
  • [HIGH] Import cycle member x11 - ui/desktop/src/components/ConfigContext.tsx participates in circular dependencies with ui/desktop/src/components/settings/extensions/utils.ts and ui/desktop/src/toasts.tsx.
  • [MEDIUM] GITHUB_TOKEN has no least-privilege permissions declared in workflows.
  • [MEDIUM] No Dependabot or Renovate configured for 25 manifests.
  • [MEDIUM] Container base image mcr.microsoft.com/devcontainers/rust:1 in .devcontainer/Dockerfile is not pinned by digest.
  • [MEDIUM] Large binaries in repository - ui/desktop/src/platform/windows/bin/uv.exe (45.1MB) and images over 5MB.
  • [LOW] No job timeout declared in check-release-pr.yaml workflows.

The Bottom Line

goose is a functionally extensive AI agent platform with 2189 files across 11 projects, Rust and TypeScript heavy, and genuine utility for automating development workflows. The codebase shows signs of rapid growth—high branching density in ui/desktop/src/i18n/index.ts, oversized files, and circular imports that will hinder modifications. Security hygiene is weak: a committed .env with live credentials, unpinned dependencies with published CVEs, and CI that never runs assertions. Teams wanting to extend or customize the agent should budget time for dependency upgrades, secret rotation, and dependency graph stabilization before contributing. Best suited for organizations needing a self-hosted AI agent with multi-model support and willing to invest in operationalization.