Skip to main content
Version: 0.1.13

CLI Reference

Full command reference for the aide binary.

Memory

aide memory add --category=learning --tags=testing "Prefers vitest"
aide memory search "authentication"
aide memory list --category=learning
aide memory delete <id>
aide memory reindex # Rebuild search index
aide memory export --format=markdown # Export to markdown
CommandDescription
memory addStore a new memory with category and tags
memory searchFull-text search across memories
memory listList memories, optionally by category
memory deleteDelete a memory by ID
memory reindexRebuild the Bleve search index
memory exportExport memories to markdown

Decisions

aide decision set auth-strategy "JWT with refresh tokens" --rationale="Stateless"
aide decision get auth-strategy
aide decision list
aide decision list --origin=all
aide decision history auth-strategy
aide decision delete auth-strategy
CommandDescription
decision setRecord a decision for a topic (appends to history)
decision getGet the current (latest) decision
decision listList this store's decision topics (--origin to widen)
decision historyShow full history for a topic
decision deleteDelete a decision topic
decision adoptPromote a subscribed peer's decision into this store (see Sync & Subscriptions)

decision list shows this store's own decisions by default. Pass --origin to also list rules that are in force here but stored elsewhere in the estate:

ValueShows additionally
parentAncestors on the anchor chain
peerSubscribed peers
allBoth

These are additive and never shadow local decisions — a topic decided nearer always wins (local > parent > peer), matching what session init injects. An ORIGIN column appears when a non-local row is present. Inherited entries are read-only from here; use decision adopt to copy one into this store.

Tasks

aide task create "Implement user model" --description="Create User struct"
aide task claim <id> --agent=executor-1
aide task complete <id> --result="Done"
aide task list --status=pending
aide task delete <id>
CommandDescription
task createCreate a new task (starts as pending)
task claimAtomically claim a task for an agent
task completeMark a task as done with a result
task listList tasks, optionally by status
task deleteDelete a task

Messages

aide message send "User model ready" --from=executor-1
aide message send "Can you review?" --from=executor-2 --to=executor-1
aide message list --agent=executor-1
aide message ack <id> --agent=executor-1
CommandDescription
message sendSend a message (broadcast or directed)
message listList messages for an agent
message ackAcknowledge a message as read

State

aide state set mode autopilot
aide state set mode eco --agent=worker-1
aide state get mode --agent=worker-1
aide state list
aide state clear --agent=worker-1
CommandDescription
state setSet a state value (global or per-agent)
state getGet a state value
state listList all state entries
state clearClear state for an agent

Code

aide code index # Index codebase (incremental)
aide code search "getUser" # Search symbols
aide code symbols src/auth.ts # List file symbols
aide code references getUserById # Find call sites
aide code read-check src/auth.ts --json # Check if file is indexed and fresh
aide code stats # Index statistics
aide code clear # Clear index
CommandDescription
code indexIndex the codebase using tree-sitter (incremental)
code searchSearch symbol definitions
code symbolsList all symbols in a specific file
code referencesFind all call sites of a symbol
code read-checkCheck if a file is indexed and unchanged
code statsShow index statistics
code clearClear the code index

Findings

aide findings run # Run all analysers
aide findings run --analyser=complexity # Run specific analyser
aide findings search "high complexity" # Search findings
aide findings list --severity=critical # List by severity
aide findings list --file=src/auth # List by file
aide findings stats # Health overview
aide findings accept <id1> <id2> # Accept specific findings
aide findings accept --analyzer=clones # Accept all clone findings
aide findings accept --all # Accept all findings
aide findings clear # Clear all findings
CommandDescription
findings runRun analysers (all or specific)
findings searchFull-text search across findings
findings listList findings by severity, file, or analyser
findings statsCodebase health overview
findings acceptAccept (dismiss) findings by ID or filter
findings clearClear all findings
note

Both --analyser= and --analyzer= spellings are accepted on all findings commands.

Survey

aide survey run # Run all 3 analyzers
aide survey run --analyzer=topology # Run specific analyzer
aide survey search "auth" # Search survey entries
aide survey list --kind=module # List by entry kind
aide survey list --kind=tech_stack # Detected technologies
aide survey list --kind=entrypoint # Entry points
aide survey list --kind=churn # High-change files
aide survey stats # Overview by analyzer and kind
aide survey graph getUserById # Call graph (callers + callees)
aide survey graph --symbol=main \
--direction=callers --max-depth=3 # Callers only, deeper traversal
aide survey clear # Clear all survey data
aide survey clear --analyzer=churn # Clear specific analyzer
CommandDescription
survey runRun analyzers (topology, entrypoints, churn, or all)
survey searchFull-text search across survey entries
survey listList entries by analyzer, kind, or file
survey statsAggregate counts by analyzer and kind
survey graphBuild call graph for a symbol (callers/callees/both)
survey clearClear survey data (all or by analyzer)

Grammar

aide grammar list # List all grammars (built-in + available + installed)
aide grammar list --installed # Only installed grammars
aide grammar install ruby # Install a specific grammar
aide grammar install --all # Install all available grammars
aide grammar install # Install from lock file
aide grammar remove ruby # Remove a downloaded grammar
aide grammar remove --all # Remove all downloaded grammars
aide grammar scan # Detect languages in current project
aide grammar scan --json # JSON output
CommandDescription
grammar listList grammars (built-in, available, installed)
grammar installDownload and install dynamic grammars
grammar removeRemove downloaded grammars
grammar scanScan project for languages used

Share

aide share export # Export decisions + memories to .aide/shared/
aide share export --decisions # Decisions only
aide share import # Import from .aide/shared/
aide share import --dry-run # Preview import
CommandDescription
share exportExport decisions and memories to .aide/shared/
share importImport from .aide/shared/

Sync & Subscriptions

aide sync # Fetch all subscribed peer context
aide sync platform-team # Fetch one subscription
aide sync --timeout=2m # Per-subscription deadline (default 60s)
aide decision adopt api-style --from=platform-team # Promote a peer decision locally

A failing subscription is reported and skipped, the rest still sync, and the command exits non-zero if any failed — CI can use it as a red light.

Subscriptions name peer context sources in .aide/config/aide.json:

{ "subscriptions": [
{ "name": "platform-team", "url": "git@host:platform/context.git", "branch": "main" },
{ "name": "proto-repo", "path": "../protos" }
] }

aide sync fetches git subscriptions into .aide/cache/remotes/<name>/ (local path subscriptions are read in place). Peer records form a read-only layer: their decisions appear in session context labeled from peer <name>, at the lowest precedence (local > ancestors > peers), and are never re-exported — you only publish records you authored or explicitly adopted. Only decisions cross project boundaries; memories and state never do. aide decision adopt TOPIC [--from=PEER] is the promotion verb: it copies the peer's current decision into the local store as a new local decision stamped with adoption provenance. Adopt reads only the local cache (never the network), and --from is required when more than one peer publishes the topic. Session init refreshes any subscription cache older than 1 hour, under a single 5-second deadline shared across subscriptions, silently serving the stale cache when offline; session-end publishing gets 10 seconds.

A subscription with "publish": true is two-way: aide sync also writes this project's own decisions into it — fetch, reset to the remote head, apply records, commit, push, retrying on a push race. Write-once record files named by identity make concurrent publishers safe: colliding paths are structurally impossible, so no merge machinery is needed. Publishing respects the share.decisions.export_filter policy and never includes memories. An empty repository works as a starting point — the first publish bootstraps it.

No external scheduler is needed in either direction: the session lifecycle is the clock. Session start refreshes stale subscription caches (reads); session end publishes publish-enabled subscriptions (writes) — decisions are only ever made inside sessions, so the session ending is the publish event. Both are bounded and offline-silent; an unreachable remote never blocks startup or teardown, and unpublished records simply ship at the next session end. aide sync remains the manual lever for forcing either side immediately.

Global Flags

aide --store parent decision set api-style "REST" # write into the nearest containing project
aide --store top decision set go-version "1.26" # write into the estate root
aide --project-root /path/to/proj memory list # run against any store

--store re-targets the whole invocation onto another member of this project's anchor chain: parent (nearest container), top (outermost ancestor), or an explicit chain-member path. Hard errors, never silent fallback: the estate root has no parent, non-chain paths are rejected (unrelated stores are --project-root's job), and the target must already have a .aide store — a write never bootstraps another project's store.

Decision Cascade

Sessions in a project with ancestors (see aide anchor) inherit ancestor decisions into their injected context, nearest-wins: a topic decided locally shadows every ancestor version. Inherited entries are labeled inherited from parent <name> with an override hint. Reads go through the ancestor's daemon socket when live, else a short read-only open — never a writable open of another project's store. CLI/MCP decision get remains store-local (placement is physical); the cascade is a context-injection feature. Subscribed peers layer in below ancestors (see Sync & Subscriptions). Disable both with AIDE_CASCADE_DISABLED=1.

Anchor

aide anchor # Resolved root, provenance, parent scopes
aide anchor --json # Full machine-readable payload
aide anchor --cwd=/path/to/dir # Probe from another directory

A read-only resolution probe: prints the project root aide would use, which marker decided it (.git directory/worktree/submodule, .aide, env override), the project identity, and the anchor chain — the project itself plus VCS-evidenced parent scopes (a submodule's superproject, ancestor repositories that contain it). It never creates .aide/ and exits 0 even when no marker is found, so it is safe to run anywhere — the "what would happen?" command for worktree, submodule, and nested-repo layouts.

The --json payload is the contract consumed by the hook layer (persisted per session under ~/.aide/anchors/ and .aide/state/anchor.json).

Token (Experimental)

aide token stats # Estimated all-time token statistics
aide token stats --json # JSON output
aide token summary # Recent token events
aide token summary --last=20 # Last 20 events
aide token cleanup # Remove events older than 90 days (cleanup.token_max_age)
aide token cleanup --max-age=168h # Custom retention
CommandDescription
token statsShow estimated token read/saved statistics
token summaryList recent token events
token cleanupRemove old token events (default 90 days)

Token tracking is experimental. All counts are estimates based on calibrated per-language character ratios — useful for relative comparisons, not exact cost accounting.

Status

aide status # Full dashboard
aide status --json # JSON output

Shows version, server status, file watcher, code index, findings analysers, MCP tools, stores, and environment variables.

The server line (and serverState in --json) has three states:

StateMeaning
runningConnected to the daemon over .aide/aide.sock
not-runningNo daemon socket; store sections are read directly from disk
unreachable-sandboxedA daemon socket exists but this shell's sandbox denies connect() (e.g. Codex sandboxed execs). The daemon is likely running but unverifiable, so direct store reads are skipped — they would stall on the daemon's locks

Other Commands

aide session init # Initialize session
aide session end --session=ID # End session (teardown + metrics)
aide upgrade # Self-upgrade binary
aide daemon --socket=/path/to/aide.sock # Start gRPC daemon
aide mcp # Start MCP server
aide version # Show version
CommandDescription
session initInitialize a new session
session endEnd a session: broadcast the end message, clear transient state, record metrics (--session=ID [--duration=MS])
upgradeSelf-upgrade the aide binary
daemonStart the gRPC daemon
mcpStart the MCP server (stdio)
versionShow the installed version