Troubleshooting.

Every Shoti error ends in a help link. Here is the fix for each, by area. Run shoti explain <topic> to read any of them offline.

auth 15

team 32

broadcast 26

agent 17

build 20

  • Couldn't write the build briefshoti build resolved the place, but couldn't write the temporary scoped brief file that Claude Code reads at startup.
  • Claude Code isn't on your PATHshoti build hands the scoped place off to a local Claude Code session, but the claude command wasn't found on your PATH.
  • That runtime can't accept a scoped brief directlyThe chosen runtime has no way to receive a brief as an argument, so shoti build printed the brief and the exact command to start it yourself instead of launching it.
  • No agent runtime foundshoti build looked for claude, cursor, and codex on your PATH and found none.
  • Run shoti build inside your reposhoti build resolves a place to the code it owns, so it must run from inside the git repository the place is bound to — but the current directory is not a git repo.
  • --packet isn't valid JSONshoti build --intent --packet was given a --packet value that failed to parse as JSON.
  • That place isn't on the work-mapshoti build was given a place id that isn't in your team's work-map — it may be mistyped, from another team, or the map hasn't been seeded yet.
  • Place is bound to a different repoThe place you asked to build from is bound to a different repository than the one you're standing in, so its file scope wouldn't line up with your working tree.
  • --request needs the request's event idshoti build --request <id> ties a launch to the sentence a person sent from the box, so the value must be that request's numeric event id.
  • Multiple runtimes installed, none set as the defaultMore than one supported agent runtime is on your PATH and shoti has no remembered default, so it can't pick silently in a non-interactive shell.
  • That runtime isn't installedThe chosen runtime (from --runtime, the remembered config.toml key, or the interactive pick) wasn't found on your PATH.
  • Not a runtime shoti knows--runtime or the remembered runtime key in config.toml named a value that isn't one of shoti's supported agent runtimes.
  • Name a session to dispatch toshoti fleet build hands a place to one of your own live fleet sessions on another machine, so it needs a target session — but no --to <session-id> was given.
  • A runtime is installed but not wiredshoti doctor found an agent runtime (Cursor or Codex) on this machine whose shoti wiring is missing or stale — its sessions can't broadcast or hear the team until it's wired.
  • No indexable source foundThe cold-start seed indexed the chosen repo but found no source files in a language it parses (Go, TypeScript, TSX, or JavaScript), so there's nothing to turn into a map yet.
  • Conflicting seed flagsshoti-seed was run with --rename and --name-new-only together. A rename pass targets exactly the already-persisted places that --name-new-only excludes, so the combination would spend naming quota and then skip the rename preview it was asked for.
  • Choose a folder that's a git checkoutThe cold-start seed turns a repo into your team's first map, so the chosen folder must be a git checkout — but it isn't one.
  • That folder is a different repoThe map heard work in one repo, but the folder you picked derives to a different repo key. Adding it under the heard repo would bind the wrong code to the wrong places.
  • The server rejected the seedThe cold-start seed reached api.shoti.ai, but the server rejected the places or bindings it tried to persist.
  • Your website did not make it onto the mapShoti read the company website but could not put its pages on the team's map: the read failed, the address was refused, or this team already has a connected workspace and takes its map from that.

config 3

setup 32

  • Aider isn't wired in v1shoti install-hooks detects Aider but does not configure it, so Aider sessions cannot use Shoti through the supported setup path.
  • Codex hasn't turned on Shoti's hooks yetShoti's hooks are installed in Codex, and Codex runs a new hook only after you trust it.
  • Sync hooks into ConductorHooks were written, but Conductor mirrors agent configs through its own settings.
  • Cursor rule skipped — not in a project directoryshoti install-hooks wired Cursor's mcp.json and hooks.json but skipped writing .cursor/rules/shoti.mdc because the working directory has no .git or .cursor directory.
  • Desktop update didn't finishShoti couldn't finish checking for or downloading a desktop update. The version you're running keeps working.
  • --local requires --jsonshoti doctor --local was run without --json. The --local flag only controls the machine-state JSON probe consumed by the desktop — it has no effect in the human-readable or --ci doctor path.
  • Unknown installer optionThe installer was passed a flag it doesn't recognize.
  • Install download failedThe installer couldn't download the shoti binary or its checksums from dl.shoti.ai.
  • Couldn't locate the shoti binaryshoti install-hooks couldn't resolve the path of its own binary to wire into the hooks.
  • Couldn't update a Claude Code config fileShoti couldn't write its changes to a Claude Code config file under ~/.claude/.
  • Unsafe binary path for hooksShoti refused to wire its hooks because the binary's path contains a shell metacharacter.
  • curl is required to installThe installer needs curl (or GNU wget) to download over TLS; BusyBox wget can't enforce a secure transport.
  • CLI distribution isn't live yetThe installer couldn't reach the Shoti CLI release channel — the download host may not be serving yet.
  • Couldn't create a temp directoryThe installer couldn't create a temporary working directory to download into.
  • Install path has shell metacharactersThe chosen install directory contains characters (double-quote, backtick, $, %) that aren't safe to embed in the agent hook commands shoti writes.
  • Unsupported platformThe installer doesn't ship a prebuilt binary for this operating system or CPU architecture.
  • Couldn't verify the downloadThe installer couldn't verify the download's checksum or signature, or a required tool (minisign / sha256sum) was missing.
  • No map root set for this machineThe map-simplification one-root registry (~/.shoti/root.json) has no directory registered for this team — shoti root scan and shoti doctor have nothing to walk.
  • No agent runtimes detectedshoti install-hooks found no agent runtimes to wire into.
  • Your team can't see you yetSetup sends one test broadcast through the same path your agent's hooks use, then reads it back from the team. That round trip did not complete, so nothing you do on this machine is reaching anyone yet. The message names the step that failed: queued but never sent (the drainer daemon), sent but refused by the server (the reason it gave), or sent but not readable back.
  • Couldn't delete ~/.shotishoti uninstall removed the Claude Code wiring but couldn't delete the ~/.shoti/ directory.
  • Couldn't remove the hooksshoti uninstall couldn't remove Shoti's hook entries from ~/.claude/settings.json.
  • Couldn't remove the MCP entryshoti uninstall couldn't remove Shoti's MCP server entry from ~/.claude/settings.json.
  • Update failed its checksumThe binary shoti upgrade downloaded did not match its published SHA-256 — a corrupted or tampered download.
  • Refusing to downgradeThe version shoti upgrade resolved is the same as or older than the one you're running.
  • Couldn't fetch the updateshoti upgrade could not download the release manifest or the new binary from dl.shoti.ai.
  • shoti is managed by a package managershoti upgrade detected that this shoti was installed by a package manager (Homebrew, Scoop, Chocolatey, snap, apt), which owns the binary's files.
  • Can't replace the shoti binaryshoti upgrade could not write over the installed binary — its directory isn't writable by you (e.g. a root-owned /usr/local/bin).
  • Update failed its signatureshoti upgrade could not verify the minisign signature on the release — the update could not be authenticated.
  • Windows SmartScreen blocked the installerRunning the Shoti installer on Windows showed "Windows protected your PC." The beta installer isn't code-signed yet, so Microsoft Defender SmartScreen warns before anything new and unsigned runs.
  • Update couldn't be installedThe desktop app downloaded an update, but installing it failed. The version you were running keeps running — nothing is lost.
  • Shoti has not seen your folder yetThe Share prompt appears only after a coding agent has worked in a folder on this machine with Shoti's hooks installed.

demo 9

site 7

network 6

billing 4

  • Writes disabled for this teamYour team's entitlement state (trial ended, past due, or archived) blocks new writes.
  • Seat limit reachedAdding this teammate would exceed your team's seat limit.
  • Team archivedYour team's entitlement state is archived — a distinct cause from a trial that simply ran out (a paid team can be archived too, by an admin action or a billing failure).
  • Trial endedYour team's trial has ended.

internal 16

  • Wrong argumentsA shoti command got the wrong number of arguments.
  • Shoti config file can't be readconfig.toml exists but couldn't be opened or parsed — a permission problem or a corrupt file, not a missing setup.
  • Unregistered error codeAn error surfaced with a code that isn't registered in Shoti's error catalog — an internal consistency check.
  • The event tail is polling instead of wakingDATABASE_URL_DIRECT is unset, so the API can't hold the LISTEN session that turns Postgres notifications into long-poll wakeups. Nothing is lost — every connected client just re-queries once per second instead of waking the moment an event lands.
  • Old shoti init formshoti init was given a repository URL argument — the old v0.2 form. Shoti now hosts everything for you.
  • Migration needs the direct URLA database migration step needs the direct (non-pooled) connection URL. This is an operator topic, not a user error.
  • Migration failedA database migration failed to apply. This is an operator topic, not a user error.
  • Shoti isn't set up hereshoti doctor found no Shoti configuration.
  • Test ping was skippedThe desktop test-ping couldn't record its liveness marker because another shoti process held the liveness write lock past the budget, so the write was skipped rather than blocking. Nothing was recorded — this is not a failure of your setup.
  • Unknown ping sourceshoti ping --source got a value that isn't a known agent. This is an internal test-ping the desktop uses to verify the liveness pipe.
  • The retention drain has no databaseThe retention drain was started without DATABASE_URL, so it cannot reach Postgres.
  • The API runtime database identity was refusedThe API could not prove that ordinary request traffic uses the restricted shoti_api_runtime identity against the same database as maintenance traffic. Production stays offline instead of falling back to the database owner.
  • Workmap corpus exceeds its measured budgetThe slow-clock workmap pass found more exact-deduped intents than its measured clustering ceiling and refused before embedding or writing a partial map.
  • Workmap encountered a foreign scopeThe workmap seal contained a repo_key other than work:intents, so the worker refused instead of overwriting a map it does not own.
  • Workmap feed exceeds its page budgetThe slow-clock workmap pass reached its feed-page ceiling while the API still reported more events, so it refused to build from a truncated history.
  • Couldn't write the workmap pass reportmapworker -workmap finished its pass but the JSON report file could not be written at the given path.

Still stuck? hello@shoti.ai. Back to shoti.ai.