Reference

Slash commands & escape hatches.

How a line is routed

Understanding routing is the key to the shell — most lines never touch the model.

  1. :command — a REPL meta-command. Handled by the shell itself.
  2. Direct execution — if the first word is an alias, cd/exit, or an executable on your PATH, the line runs directly. No model, no latency, no permission prompt.
  3. The model — anything else (including shell machinery like |, >, $, globs, and English that merely starts with a command word) goes to the agent.
  4. Escape hatches!line forces direct execution; ?line forces the model.

Ctrl-C aborts the current turn. During a TTY hand-off (vim, ssh) it interrupts the foreground child. / Ctrl-F accept inline history ghost-text.

REPL meta-commands

Type a bare : to see the live-filtered palette of these.

  • :allow — List / revoke always-allowed tools & dir grants
  • :attach — Watch + steer a coordinator, or goal to watch the goal
  • :backend — Switch backend (claude | grok | local)
  • :batch — Background batch mode (on | off | status)
  • :close — Remove the attached (or named) coordinator from the worker list + Shift-Tab rotation
  • :compact — Compact history, offload to memory
  • :context — Show context-window usage
  • :detach — Stop watching the attached coordinator
  • :dispatch — Launch a background coordinator
  • :dispatch-stats — Background-job dispatch efficiency report
  • :forget — Remove an exited worker
  • :goal — Pursue a goal in the background (see below)
  • :help — Show command help
  • :hooks — List lifecycle hooks + provenance
  • :jobs — List background jobs
  • :kill — Kill a background job
  • :loop — Re-run a prompt N times inline
  • :mcp — Manage MCP servers
  • :memories — Stored memories / organize
  • :mode — Set confirmation level (paranoid | careful | normal | yolo)
  • :model — Switch model (opus | sonnet | haiku | id)
  • :model-detect — Pick the best local model for this machine
  • :new — Clear conversation history
  • :output — Stream coordinators' activity
  • :plugin — Plugin provenance
  • :quit — Exit aish (also Ctrl-D / exit)
  • :reasoning — Show reasoning-quality telemetry (escalate vs guess)
  • :rename — Rename this session
  • :restart — Reload aish with the same command it started with
  • :result — View a finished job's result
  • :rewrite — AI-rewrite intent into a command
  • :schedule — Run a task later/recurring (cron or in 5 min …)
  • :skill — Manage skills (add | search | list | remove)
  • :stop — Stand down an in-flight coordinator — harsher than :tell
  • :suggest — AI-suggest the next command from context
  • :tell — Message an in-flight coordinator
  • :update — Upgrade aish to the latest release
  • :version — Show aish version + backend
  • :workers — List this session's coordinators
  • :yolo — Toggle yolo mode

Goals

A goal is a durable, multi-session objective — a persistent tree of goal → milestones → tasks plus the blockers holding it up. While active, its state is injected into every turn.

  • :goal new <text> — Create a new goal and make it active
  • :goal show — Show the full tree (milestones, tasks, blockers)
  • :goal status — Progress rollup, phase, and elapsed time
  • :goal link <task> — Attach a task/coordinator run to the active goal
  • :goal milestone <text> — Add a milestone under the active goal
  • :goal block <text> — Record a blocker that's holding it up
  • :goal unblock <id> — Clear a resolved blocker
  • :goal complete — Mark the active goal done

Only one goal is active at a time; :goal new supersedes the previous one (past goals stay on record). Shift-Tab cycles straight into the active goal's loop.

Scripting

aish <file> runs a script non-interactively, then exits with the status of its last line:

$ aish deploy.aish        # run the file's lines, then exit

Each line is handled as if typed at the prompt. Blank lines and # comments are skipped, and the !/? route prefixes work. Because the leading #! line is a comment, a script can carry a shebang and run as a program directly:

#!/usr/bin/env aish
# back up the project, then summarize what changed
tar czf /backups/proj.tgz .
summarize what just got archived and flag anything unexpected