goose
Agentic AI Foundation · goose-docs.ai
goose is an Apache-2.0, locally run agent that keeps its config, sessions and memory in YAML, SQLite and text files. It supports local models and has runtime-enforced tool permissions, overridable prompt templates and opt-in telemetry, which makes it strong on transparency, modifiability and control. Its exit path is manual rather than single-action, actions are recorded only after they run and can be edited without trace, and it has no verifiable identity or attributable messages.
- Apache-2.0, neutral Linux Foundation (AAIF) governance
- Plain-file state: YAML config, SQLite sessions, text memory
- Built-in local inference plus Ollama and 15+ providers
- Runtime-enforced approval modes and per-tool permissions
- Prompt templates overridable; LLM request payloads logged locally
- Usage data opt-in, off by default
- No single-command full-agent export; per-session export only
- Actions recorded only after they run; record not tamper-evident; logs rotate
- No verifiable agent identity or attributable messages
- Secrets default to OS keyring, which does not travel with files
- Reproducible builds not documented
- No owner control over which hosts or recipients tools reach
All 34 findings
goose v1.52.0 (released 2026-09-23) from the aaif-goose/goose repo, and the goose-docs.ai documentation as of 2026-09-27. The project moved from Block to the Agentic AI Foundation (AAIF) at the Linux Foundation.
Portable · Can you leave, and take the whole agent with you?
75%- P1Round-trip portability
Not restorable in one action: the local files are complete and immediately available, but there is no whole-agent export or import, so config.yaml, memory files and keyring secrets must be copied or re-entered by hand (sessions export and import only one at a time).
Partial - P2Complete export
Everything that defines the agent sits in documented local files (config.yaml, permission.yaml, prompts/, memory/, recipes and sessions.db), so a copy of those locations is complete and nothing is held by the project. Secrets default to the OS keyring and must be moved separately.
Pass - P3Independent execution
goose is Apache-2.0 software that runs entirely on the owner's machine with no required foundation server, and its built-in local inference or Ollama allows fully offline operation.
Pass - P4Identity continuity
goose has no agent identity that others could check after a migration; sessions and installations carry only local identifiers.
Fail - P5No kill switch
There is no license check, account requirement or remote feature flag. Governance and the trademark sit with the Linux Foundation's AAIF, and the desktop app's update check can be controlled by the owner.
Pass - P6Capability independence
Tools come from MCP extensions and built-ins executed by the goose runtime, so they stay available with any supported provider, including local models. Models without native tool calling can use an experimental tool shim.
Pass
Transparent · Can you see everything the agent is, with ordinary tools?
100%- T1Open storage format
Config is YAML, sessions are in a documented SQLite database that can be queried with sqlite3, memories are text files, and logs are JSON/JSONL.
Pass - T2No hidden instructions
Default prompt templates are published in the open-source repo, and nine of them (including system.md) can be overridden. Recent LLM requests, including the full input payload, are also logged locally as JSONL.
Pass - T3No shadow memory
goose has no hosted backend holding user data, and the docs say its log files stay local. Opt-in usage data excludes conversations and code, although opted-in events carry a stable installation identifier. Model providers apply their own policies.
Pass - T4Complete action history
Every session's messages, including tool requests and responses, are stored in the local sessions.db and can be exported per session as JSON. CLI logs also capture tool calls but are deleted after two weeks.
Pass - T5Readable logic
Recipes are YAML files, hints and prompt templates are Markdown, and the runtime is open-source Rust and TypeScript. MCP extensions are separate programs whose readability depends on the extension.
Pass - T6No third-party influence channel
No advertising or sponsored-content channel was found. Third-party content reaches the context only through extensions the owner enables, and the owner can view and disable them.
Pass
Auditable · Can you reconstruct exactly what the agent did?
50%- A1No unrecorded actions
Tool requests and results are stored durably in sessions.db, but only after the tools have run, so an action still takes place if its record cannot be written.
Partial - A2Tamper evidence
Session rows and log files can be edited or deleted without any trace. Logs also rotate: CLI and server logs after two weeks, and LLM request logs after the last 10 requests.
Fail - A3Separation from the audited
The Developer extension's shell and file tools run as the user without a sandbox, so the agent can modify sessions.db and its logs. Permissions only allow, ask for or block whole tools, and the default autonomous mode asks for nothing.
Fail - A4Readable with ordinary tools
Session records (SQLite), CLI logs (JSON) and LLM request logs (JSONL) can be read with general-purpose tools.
Pass - A5Corroborated interactions
Orchestrator subagent sessions are stored in sessions.db with their parent session ID, and the parent's tool calls name the subagent session they address, so both sides log a shared identifier. goose has no channel to independent agents beyond this.
Pass
Verifiable · Can you prove the agent runs what it claims?
50%- V1Open, reproducible runtime
The runtime is open source under Apache-2.0, an OSI-approved license. No reproducible-build process or verification was found in the public documentation.
Partial - V2Active config is inspectable config
Behavior comes from config.yaml, permission.yaml, prompt overrides and documented GOOSE_* environment variables, all of which the owner can inspect. Cached smart-approval decisions are also written to permission.yaml.
Pass - V3Attributable messages
Recipients have no way to verify that a message came from a particular goose agent: outbound content carries no signature or other attribution the agent controls.
Fail - V4Independently checkable record
The session store and logs carry no integrity data, so no tool can check whether the record is intact.
Fail - V5Comparable state
All state is in local YAML, text and SQLite files, so the owner can copy it at two points in time and compare the copies with open tools such as diff and sqldiff.
Pass
Modifiable · Can you change anything, without asking?
100%- M1Instructions
The system prompt and eight other templates can be overridden in ~/.config/goose/prompts, and .goosehints and recipes add owner instructions. Templates that cannot be overridden remain editable in the Apache-2.0 source.
Pass - M2Memory
Memory extension entries are categorized text files in ~/.config/goose/memory that can be viewed, edited or deleted directly, and sessions can be removed.
Pass - M3Logic
Owners can write recipes and custom MCP extensions and modify the open-source runtime.
Pass - M4Tools and permissions
Any MCP server can be added as an extension, and each tool can be set to always allow, ask before or never allow.
Pass - M5Model choice
goose supports 15+ providers plus built-in local GGUF inference and Ollama, and its tools belong to the runtime. Tool-use quality varies by model, and non-tool-calling models rely on the experimental shim.
Pass - M6No gatekeeping
goose has no paid tier, license check or approval requirement for modifications.
Pass
Controllable · Is your word final?
75%- C1Communication boundaries
goose contacts external parties only through extensions the owner enables, and each tool can be set to always allow, ask before or never allow. The owner cannot limit which recipients, hosts or domains a permitted tool reaches, so an allowed shell tool can contact any host.
Partial - C2Approval gates
Manual Approval mode and per-tool Ask Before or Never Allow settings are enforced by the runtime before a tool runs. Smart Approval, where an LLM judge decides, is optional.
Pass - C3Immediate halt
goose runs as a local process: Ctrl+C in the CLI or the stop control in the desktop app interrupts it, and the owner can kill the process at any time.
Pass - C4Data sovereignty
Usage data is opt-in (GOOSE_TELEMETRY_ENABLED defaults to false), excludes content, and model traffic goes only to the provider the owner chooses. The desktop app checks for updates by default, and a past bug caused updates to download even when automatic downloads were disabled.
Partial - C5Credential custody
Secrets stay under the owner's control in the OS keyring or a local secrets.yaml, with nothing held by the project. Keyring-stored secrets do not travel with a file copy and must be migrated by hand.
Partial - C6Full deletion
All state sits in local directories and the keyring, which the owner can delete completely, and the foundation holds nothing to retain. Data already sent to model providers follows their policies.
Pass
Vendors and the public can dispute any finding with evidence. Disputes and their resolutions are published.