Browse the documentation

Docs Reference

Command reference

This page covers every command in geo help --all, in the same groups. Run geo <command> --help for the full list of flags of any command; this page explains what each command is for and the options you will use most.

On this page

Options that every command takes#

Options available on every command
OptionWhat it does
--home DIRThe folder where Geometer keeps its records. The default is $GEO_HOME, or ~/.geometer-host when that is not set.
-h, --helpPrint help for the command.
-V, --versionPrint the version (on geo itself).

Most commands take a project folder as [PATH], which defaults to the current folder. Many take --json to print a machine-readable result. A <PROBLEM> or <ID> is an identifier that an earlier command or the workspace showed you.

geo --help shows the eight everyday commands. geo help --all lists every command, grouped as Explore, Guard, Prove, This computer and Advanced. Each command appears once below, under its group. Every command that worked before still works. Run geo on its own for a short status or a welcome.

Everyday#

Running geo on its own#

Terminal
geo

Prints a short status and the next step when the current folder is a project Geometer already knows. Otherwise it prints a short welcome with the three ways to start: geo open, geo practice and geo check. It changes nothing and exits with 0. Run geo --help for the everyday commands and geo help --all for every command.

Explore#

geo check#

Terminal
geo check [PATH] [--json] [--budget SECONDS] [--declarations DIR] [--require-exercised]

Checks a folder and answers in plain words: a one-line verdict, the problems it found, and the next command to run. It does the same work as geo ci and exits with the same codes (0 nothing found, 1 a confirmed problem, 2 evidence is missing, 3 something could not run). --json prints the same report as geo ci --json. For scripts and CI, use geo ci, whose output never changes. See Run kept checks in CI.

geo ci#

Terminal
geo ci [PATH] [--json] [--report FILE] [--junit FILE] [--budget SECONDS] [--declarations DIR] [--require-exercised] [--assessment DIR]

Runs the project's automatic checks headless, the same as Check this project, and then re-runs the kept checks. It writes structured JSON and JUnit XML. See Run kept checks in CI for each option, the exit codes and examples.

Exit codes of geo ci
CodeMeaning
0Nothing failed.
1A confirmed failure, including a kept check that reproduced a problem.
2Required evidence is missing, or nothing could be checked.
3An infrastructure failure.

Problems found by suggested rules are reported and never fail the run.

geo explore#

Terminal
geo explore [PATH] [--budget SECONDS] [--agent NAME] [--scenario NAME] [--json]

Explores the declared agent tasks and scenarios live in the controlled tool world. It makes a bounded search over held tool calls and lost-reply faults, with one trial per verified reset.

Options of geo explore
OptionWhat it does
--budget SECONDSWall-clock budget. The default is 600.
--agent NAMEOnly tasks of this agent service.
--scenario NAMEOnly this scenario or task.
--strategy NAMErandom, exhaustive, sleep_sets or source_dpor. The default is bounded exhaustive search, then seeded random walks if the budget runs out. The reductions run only after the live adapter passes conformance.
--seed N, --depth N, --trials N, --random-trials NThe seed (0), the number of choices per trial (8; a step with one way to go, such as a lookup, does not count), trials per scenario (24) and random walks after an unfinished search (4).
--declarations DIRDeclarations folder used instead of the project's .geometer/, for projects Geometer must not modify.
--answer ID=TEXT, --save-declarations DIRAs for geo onboard.

geo replay#

Terminal
geo replay <PROBLEM> [--clean-worker] [--json]

Replays a problem from a clean start with the model answers recorded when it was found. With --clean-worker, it replays the problem on a second clean machine, with a fresh records folder and fresh containers from a copy of the project at the saved revision, and reports exact, same problem, diverged or incompatible.

geo shrink#

Terminal
geo shrink <PROBLEM> [--budget N] [--confirm N] [--json]

Cuts a problem down to the smallest steps that still show it. Every candidate runs from a clean reset, twice by default (--confirm), and the results must agree. The result is replayed again before it is accepted. Unreliable results are reported, not accepted. --budget is the number of candidate runs allowed (60 by default).

geo verify#

Terminal
geo verify <PROBLEM> [--path FOLDER] [--json]

Checks your fix: replays the problem on your changed code, confirms the risky path was really tried and looks at nearby cases. --path is the changed folder (the folder the problem was found in by default). It exits with 0 when the problem no longer happens, 1 when it still does, and 2 when it cannot tell.

geo regression#

Kept checks.

Subcommands of geo regression
SubcommandWhat it does
geo regression keep <PROBLEM> [--allow NODE=OUTCOME]Keeps a problem as a check that cannot be edited, in the records and as a reviewable file under .geometer/regressions/ (or the external declarations' regressions/). --allow allows a node an outcome it did not show when recorded, as an explicit decision, for example retry=rejection for a fix that refuses a duplicate with a 409. Repeatable.
geo regression list [PATH]Lists the kept checks for a project.
geo regression run [PATH] [--declarations DIR] [--json]Re-runs the project's kept checks on its current code. Exits 1 when any is reproduced and 2 when any is inconclusive or incompatible.

geo stability#

Terminal
geo stability [PATH] [--plan] [--model SPEC] [--candidate SPEC] [--variation NAME] [--samples N] [--json]

Checks constraint stability: does the agent keep its approved rules when its conversation is longer, when a tool's reply asks it to skip approval, when its instructions are worded differently, or on another model? The project's tasks and approved rules are reused. Every variation runs beside an unchanged run with the same seed, on tool doubles. --plan prints the plan (what would run, the commitments, the budget) and stops.

Options of geo stability
OptionWhat it does
--model SPECThe model checked: scripted (with --model-script), ollama:<model>, openai:<model>@<base_url>. The default is the check model setting.
--candidate SPECAnother model to run the unchanged tasks on, for the model-change variation.
--variation NAMEOnly these variations (repeatable): long_conversation, hostile_tool_response, wording, compaction, handoff, model_change.
--samples NSamples per variation (2 by default), each beside an unchanged run.
--long-messages NEarlier exchanges that a longer conversation puts before the agent's request (12).
--scenario NAMEOnly this task (repeatable).
--max-calls, --max-prompt-tokens, --max-output-tokens, --max-total-tokens, --max-cost-usd-micros, --time-budgetBudgets for model calls, tokens, money (in millionths of a US dollar; the default 0 allows only free models) and seconds (1800).
--allow-hosted-modelAllow a hosted model for this run. Stored consent from the app also allows it.

It exits with 1 when a rule was broken, 2 when a run could not be decided or did not run, and 0 otherwise. Exit 0 means nothing broke in the runs that were made.

geo model-upgrade#

Terminal
geo model-upgrade [PATH] [--to SPEC] [--from SPEC] [--estimate] [--samples N] [--json]

Checks a model change: two separate experiments. The recorded model's outputs are replayed against the application, which is an application regression check and says nothing about the new model. Then the new model is asked fresh about the agent's own requests within a budget, and where its answer changes the agent's tool calls, that branch runs live in the isolated tool world under the same rules.

Options of geo model-upgrade
OptionWhat it does
--to SPECThe new model: scripted (with --model-script), ollama:<model>, openai:<model>@<base_url>. A hosted model needs your consent (--allow-hosted-model). Cloud (:cloud) models are always refused.
--from SPECThe current model. stand-in (the default) uses the project's scripted stand-in. Any backend spec asks that model fresh and records its answers as the baseline.
--estimatePrint the estimate (calls, tokens, cost) and which models would be asked, then stop.
--samples N, --baseline-samples N, --seed NFresh samples per scenario (1) and for the baseline, and the seed (1).
--max-calls, --max-prompt-tokens, --max-output-tokens, --max-total-tokens, --max-cost-usd-micros, --time-budget, --max-turnsBudgets.

Per scenario the result is same, changed with rules satisfied, changed with a rule violated, the current model varies, or not run or unknown. It exits with 1 when a rule was violated, 2 when any sample is unknown or not run, and 0 otherwise.

Guard#

geo guard#

Guard: propose and configure a separate Guard program from the project's reviewed rules, start it, and approve or deny held calls. Nothing here deploys to production on its own. See Guard and Watch with Guard. Every subcommand takes [PATH].

Subcommands of geo guard
SubcommandWhat it does
setupProposes a policy from the reviewed rules and tool contracts and asks the one question. --answer watch (recommended) or --answer not_now. With watch it applies the proposal: files only, nothing starts. Without --answer it only shows the proposal. --upstream says where the real tool runs: host:port for plain HTTP or https://host[:port].
bundleWrites the immutable, content-addressed policy bundle built from reviewed rules. A rule that is not reviewed cannot enter.
startStarts the configured Guard programs as separate processes. --supervise runs it so it starts again with backoff if it crashes.
stop, statusStops Guard, or shows its state. status takes --json.
login-itemOn a Mac, starts Guard, supervised, when you log in. It shows what it would write unless you add --confirm. --remove deletes it. It is never loaded for you. It is not available on Linux.
approve IDApproves one held call: exactly that call, once.
deny IDDenies one held call.
revoke IDWithdraws an approval.
reviewsLists the calls waiting for a person: who asked, the exact arguments, the rule and its version, how fresh the policy is, when the request expires and who it is waiting for.
approversShows who may approve, their roles, issued credentials and stopped agents.
approver-add ID --tool TOOL [--max-amount N]Adds an approver for one tool, optionally with an amount limit in the rule's own units. Their credential is printed once and not kept on your computer.
approver-remove IDRemoves an approver. Their credentials stop working and their approvals are not used.
agent-credential AGENT [--hours N] [--tool TOOL]Issues a new credential for an agent, optionally expiring after some hours. It is printed once.
rotate-agent AGENT [--overlap-minutes N]Replaces an agent's credential. The old one keeps working for the overlap (15 minutes by default).
rotate-adminReplaces the admin credential while Guard keeps running.
credential-revoke IDRevokes one issued credential. Others keep working.
agent-stop AGENT [--off] [--reason TEXT]Stops one agent's new calls. --off allows them again. Other agents are not affected.
kill [--off] [--reason TEXT]Stops all new calls at the Guard. --off releases. Effects already sent are not undone.
exception-grantLets calls that match skip one rule for a while, as an approver. Needs at least one --match FIELD=VALUE, and --tool, --rule, --hours (at most 7 days), --reason and optionally --max-amount.
exception-revoke IDEnds an exception now.
toolsLists the tools each running Guard has pinned, and the ones whose definition changed since.
tool-review NAMEReviews a tool whose definition changed. --accept uses the new definition, --reject keeps its calls refused.
reconcileSettles calls whose outcome is uncertain, or only acknowledged, from the provider's own records. Nothing is sent again.
rollout, rollbackRolls the policy bundle written for a tool out to the running Guard (--tool), or back.
backup --to FOLDERBacks up each Guard's store and evidence into a folder, checked with geo-verify.
promote --confirm-productionReviews the rules to production and switches the Guard to stopping calls. An explicit decision, which needs --confirm-production. It does not mean Guard is ready for production traffic.

Prove#

geo assessment#

Assessment reports, which the app calls certificates: create a signed report from a finished check, read it, export it as a folder anyone can check without Geometer, check a report with a key you choose, and record that it was withdrawn or no longer applies. A report states what a bounded check found within its limits. See Prove and certificates.

Subcommands of geo assessment
SubcommandWhat it does
create [CHECK] [--path PATH] [--profile classical|hybrid]Creates a report from a finished check (by default the newest finished check of the project). Creating it again returns the same report. hybrid signs with Ed25519 and ML-DSA-65, both required, in a larger file.
list [PATH]Lists the project's reports, each with what it found, whether it is unchanged and whether it still applies.
show ID [--html] [--markdown]Shows one report in plain words, or as its stored HTML or Markdown page.
export ID [--out DIR] [--public] [--include-private]Saves a report as a folder anyone can read and check without Geometer. Private evidence stays on your computer unless you add --include-private. Anything that looks like a secret is withheld. --public exports a separate redacted copy for sharing publicly, with its own id.
verify BUNDLE [--trust-key FILE] [--trust-this-computer] [--anchor FILE]Checks a report file or folder. It never trusts a key that came with the report. Choose --trust-key (a key file you got from the issuer) or --trust-this-computer.
status ID [--out FILE]Shows the report's status now, signed: issued, replaced, marked as no longer applying, or withdrawn.
withdraw ID --reason TEXTWithdraws a report: you no longer stand behind it. Its results are kept as they were.
invalidate ID --because WHAT --reason TEXTMarks a report as no longer applying because something changed. Its results are not changed.
renew IDKeeps today's check of the report, a fresh signed status and an anchor of the record with it.
forget ID EVIDENCE --reason TEXTRemoves one evidence file of a report. The report keeps listing it, as deleted.
key [--out PATH]Saves this computer's public key and key log, for the people who will check your reports.

geo prove#

Prove: what is recorded, whether it still matches a copy you saved elsewhere, evidence export, and turning a Guard incident into a check. A match shows the record was not changed since the copy. It does not show the record is true or complete.

Subcommands of geo prove
SubcommandWhat it does
status [--json]Shows what is recorded and whether it matches the copy you saved.
export [--out DIR]Writes evidence (JSON, CSV and an OpenTelemetry trace file) and an anchor to keep elsewhere. --token-file exports with an export-only reader's credential.
anchor [--out FILE]Saves only an anchor: a signed statement of where the record stands, to keep elsewhere.
copies [DIR] [--off]Chooses the place, outside this computer if you can, where copies of the record's state are kept on their own each time a batch of entries is recorded. --off stops it.
verify PACK --anchor FILE [--require-profile classical|pq|hybrid]Checks an evidence pack against anchors you kept. The standalone geo-verify does the same with no Geometer.
maintainRuns upkeep now: the key rotation schedule, retention limits, archiving and encrypting older call details.
retentionSets retention limits of one record: --payload-days, --payload-mb and --archived-days. A value of 0 turns a limit off. Every removal stays visible.
accessExport-only reader credentials: add-reader (shown once), list and revoke.
keysSigning keys: list, rotate, revoke, recover, store (move keys to private files or, on a Mac, the keychain) and profile (which signatures every new checkpoint carries: classical, pq or hybrid).
forget SEQ [--reason TEXT]Removes a retained payload (the call's arguments). The record keeps showing that it existed.
incidents [PATH]Lists Guard calls that were stopped, held or would have been stopped.
incident DECISION [PATH]Turns an incident into a check: copies it into an isolated case on test copies of your tools, verifies what it needs and runs it. It never resends, keeps or promotes anything, and never changes a policy. --no-wait starts the case and returns.
incident-status INCIDENTShows where an incident stands.
incident-keep INCIDENTKeeps a reproduced incident as a regression check. This is your decision; a policy change is separate.

geo decisions#

The recorded lifecycle decisions: proposing a rule, accepting its meaning, turning it on in CI, switching Guard to stopping calls, and deciding to publish an assessment.

Subcommands of geo decisions
SubcommandWhat it does
geo decisions list [PATH] [--json]Lists the project's decisions, and rule decisions not tied to a project, newest first.
geo decisions publish-assessment <SUBJECT> [PATH] [--confirm]Records the decision to publish an assessment. Only the decision is recorded; nothing is published.

This computer#

geo open#

Terminal
geo open [--port N] [--no-browser]

Opens the local workspace: a server that listens only on your own computer, over this host's records, the same one the Mac app embeds. It prints a one-time sign-in link. The port is 7310 by default. It opens your browser when run from a terminal, and --no-browser stops that. See The workspace.

geo mcp#

Terminal
geo mcp install --client claude-code|cursor [--write] [--yes] [--config FILE]
geo mcp serve
geo mcp wrap [FILE] [--write] [--yes] [--pack NAME]
geo mcp unwrap [FILE] [--write] [--yes]
geo mcp mode SERVER|--all pass|guard [--config guard.toml]
geo mcp tools [SERVER]
geo mcp try [--pack NAME] [--scenario NAME] [--fault lost-reply|lost-request|crash] [--tool NAME] [--for 30m] [--record-model] [-- COMMAND]
geo mcp try keep [--yes]
geo mcp try replay [ID]
geo mcp record SERVER|--all [--for 10m] [--yes] [--list] [--delete ID] [--http BASE-URL] [--listen ADDR]
geo mcp twin SERVER|ID... [--name NAME] [--list]

geo mcp install prints the line that adds Geometer to your coding assistant, for you and not for a project. With --write it adds it after you say yes (--yes skips the question). geo mcp serve is what the assistant starts; you do not run it yourself. geo mcp wrap puts a relay in front of the servers in your MCP configuration (a preview first; geo mcp unwrap restores the file exactly), geo mcp mode sets what the relay does, and geo mcp tools lists what each server offers. geo mcp try runs your own agent against a simulated service with a fault and says which rules held; with --record-model, geo mcp try keep turns the try into a check that geo mcp try replay runs again. geo mcp record writes a redacted record of a server's calls on this computer, after asking, and geo mcp twin learns a simulated copy of the service from it, for geo mcp try --pack twin:NAME and geo check --pack twin:NAME. See Use Geometer from your coding assistant and Put Geometer in front of your MCP servers.

geo status#

Terminal
geo status [PATH] [--json]

Prints, in plain words, what your agents may do now, what they are working toward, the three gauges, the faults tried and the next step with the command for it. It is the workspace's trust file in the terminal. If the project was never inspected, it first runs a read-only inspect, as the workspace does. --json prints the summary as JSON. For next steps that live in the workspace, such as following a check or granting a level, the command shown is geo open.

geo practice#

Terminal
geo practice [--world payments|games] [--check]

Writes the practice project (a small refund agent with a known mistake; --world games is a game item restoration desk, with the same agents) into Geometer's own records folder and prints where it is and the next command. --check also checks it straight away. Nothing outside that folder is changed. Its check reaches all three of the project's rules and finds the one planted mistake. Open it in the workspace with geo open.

geo model#

Model help: which model, if any, suggests rules and which one Check a model change tries. The default is no model. See Choose a model.

Subcommands of geo model
SubcommandWhat it does
statusShows the current choice for each use and the state of the free local model. This is the default for geo model.
use none|local|api|geometerChooses how Geometer gets model help, with --scope proposals|check, --model, --base-url, --key-env, --key-stdin, --limit-usd, --limit-tokens and --yes-send-code. The geometer choice is not available yet.
forget HOST [--scope S] [--key]Takes back the agreement that code goes to a provider and, with --key, the stored key.
priceRecords a hosted model's price per million tokens so a money limit can bound it.
setup-local [--model NAME]Gets the free local model: finds your Ollama, or downloads the pinned official release into Geometer's home, checks memory and disk, then downloads qwen3:8b with progress. Stop with Ctrl-C: it continues where it stopped.

geo doctor#

Terminal
geo doctor [--quiet] [--fix | --no-fix] [--json]

Checks what Geometer depends on and repairs what can be repaired without harm. One line per check, each ok, fixed or needs you: the adapter bundle, Docker (running, at least version 24), disk space, your records and their format, evidence integrity, checks left running by a process that ended, and leftover containers, networks and images. --quiet prints only what is not fine, and --no-fix reports only and changes nothing. --fix also sets Docker up when it is missing or stopped: it shows the exact commands, asks Run them now? [y/N] and runs nothing until you say yes. See Install.

geo gc#

Terminal
geo gc [--dry-run]

Cleans up. It removes sandboxes, environments, networks and images owned by this host that no live owner claims, and clears old checks and evidence by the retention defaults (the newest 20 checks per project, with everything behind problems you found and checks you kept). It reports the space freed. --dry-run says what would be cleared without clearing it. Your own containers are never removed.

Advanced#

geo inspect#

Terminal
geo inspect [PATH] [--json]

A read-only report of the project: modules, toolchains, targets, ambiguities and gaps. It starts nothing.

geo onboard#

Terminal
geo onboard [PATH] [--json] [--answer ID=TEXT] [--declarations DIR] [--save-declarations DIR]

Onboarding without configuration: what Geometer works out about a project by itself, such as outside services, how the agent is run and rules to review, where it found each, and the one question left. It reads files and starts nothing.

Options of geo onboard
OptionWhat it does
--answer ID=TEXTAnswer the question, using the id shown with it. Repeatable. Answers are remembered for the project.
--declarations DIRUse a declarations folder instead of the project's .geometer/.
--save-declarations DIRExport what Geometer inferred into a folder for review. It refuses to overwrite a file and never writes into the project.

geo run#

Terminal
geo run [PATH] [--json] [--target TEXT] [--timeout SECONDS] [--install-timeout SECONDS] [--observe]

Runs the project's own tests inside sandboxes and imports per-test results. --target limits the run to test targets whose id contains the text (repeatable). --timeout and --install-timeout are per-target deadlines in seconds (900 by default). --observe observes backing-service boundaries through protocol gateways.

geo rules#

Candidate rules from declared constraints, API schemas, tool contracts and tests, and the reviews that let them gate.

Subcommands of geo rules
SubcommandWhat it does
geo rules propose [PATH]Lists candidate rules with their sources, their state, the check against the seed state, the review state, and every rejected proposal with its reason. It starts nothing. With --model SPEC it also asks a model once. Its proposals are validated like every other source and stay candidates, and the call is recorded. Later runs replay that answer and never call a model.
geo rules review <ID> [PATH]Records a review of one candidate's exact meaning, by id or digest prefix. --accept marks the intent as reviewed, --enable-ci makes its problems fail geo explore, --reject withdraws it. --note and --reviewer (default $USER) are recorded.

geo workload#

Workloads: sequences of requests built from tests, schemas, routes, tasks and conversations, run in a provisioned environment.

Subcommands of geo workload
SubcommandWhat it does
geo workload import [PATH]Lists the workloads Geometer can build for a project, with their sources, facts and gaps, without starting anything.
geo workload run [PATH]Runs workloads and compositions from clean resets. Options include --recipe, --compose, --repeat and --until-contention. Exits 1 when an approved rule is violated and 2 when a node could not run.
geo workload replay <RECIPE>Replays a promoted session workload in fresh sandboxes from its frozen workspace. Exits 0 when every run matches, 3 when it diverged and 2 when the recipe cannot claim replay.

geo decide#

Terminal
geo decide [PATH] --module MODULE --subject SUBJECT --choice CHOICE

Remembers a decision that resolves an ambiguity reported by geo inspect.

geo env#

Dependency environments: plan, provision, reset and remove.

Subcommands of geo env
SubcommandWhat it does
plan [PATH] [--agents]Shows the environment plan (services, recipes, bindings, gaps) without starting anything. --agents prints static agent discovery instead.
up [PATH]Provisions the project's dependencies and applications and prints the instance id.
reset INSTANCERuns the reset barrier. Exits 2 if the receipt is incomplete.
status, listShows an environment's services, generation and last receipt, or lists recorded environments.
down INSTANCERemoves an environment and everything it owns.
exec INSTANCE SERVICE [SCRIPT]...Runs a shell command inside one service.

geo shell#

Terminal
geo shell [PATH] [--image IMAGE] [--detach]

Sandboxed terminal sessions: a command line inside a container with a copy of your project. Subcommands: attach ID re-attaches a terminal, stop ID stops a session and keeps its transcript, list lists sessions, revision reports whether the workspace changed since the session started, exec runs a command without attaching, and promote promotes a running session to a workload (its recorded commands on its frozen workspace; secrets are not stored). promote exits 2 when the recipe has gaps that block replay.

geo bundle#

The adapter bundle that ships with an installed Geometer. geo bundle verify checks the installed bundle against the program. geo bundle emit writes the bundle into a folder; it is release tooling.

geo rollback#

Terminal
geo rollback

Goes back to the records from before the last upgrade. The newer records are set aside, not deleted. The installer's --rollback calls this for you. See Install.

Other programs that install with geo#

The installer also puts two programs next to geo. geo-verify checks an evidence pack or a certificate with no Geometer and no network; see Verify records yourself. geo-guard is Guard itself; you start it with geo guard start rather than directly.

Environment variables#

Environment variables that Geometer reads
VariableWhat it does
GEO_HOMEThe records folder. The default is ~/.geometer-host.
GEO_VERSIONUsed by the installer to choose another release.
GEO_MODEL, GEO_MODEL_PROPOSALS, GEO_MODEL_CHECK, GEO_MODEL_API_KEY, GEO_MODEL_CONSENTChoose a model and agree to send code, without the app. See Choose a model.
GEO_KEEP_CHECKSHow many of the newest checks geo gc keeps for each project. The default is 20.

Something unclear, wrong or missing on this page? Report a problem with these docs.