From "could you…" to merged
🚢Ship a small feature, end to end
The default implement pipeline explores your codebase, edits, then verifies — three specialists chained.
❯ @flow add a --json flag to the export command ▶ flow 'implement' — 3 step(s) ✓ explore · ✓ implement · ✓ verify ✓ 58s · 11 tools · 32k in / 4.1k out
🔴Make CI green while you make coffee
@loop iterates until your test command exits 0 — the model never grades its own work.
❯ @loop "fix the flaky auth tests" --check "npm test -- auth" --bg ▶ background job 1753113020-5127 ❯ tail -f ~/.aiTerminal/ai/jobs/…/log.md
🧪Reproduce → test → fix
@tester writes the failing test first, then makes it pass.
❯ @tester "totals drift when qty is 0 — reproduce and fix" ⚙ fs.write {"path":"tests/totals.rs"} · 4ms · 1.1KB ⚙ sys.run {"cmd":"cargo test totals"} · 2.9s · 2.2KB Reproduced: rounding applied before the zero-check …
🧹Refactor with a budget
Cap tokens so an ambitious refactor can't run away — the loop stops honestly at the budget.
❯ @loop "extract retry logic into one helper" --check "cargo test" --budget 60000 🔁 loop 'coder' — up to 5 iteration(s) ✓ goal reached after 3 iteration(s)
✍️Commit messages that write themselves
Grounded on the actual staged diff in your session — review, edit, commit.
❯ git diff --staged --stat ❯ @ai write a conventional commit message for this ❯ press Enter to run (or edit) ❯ git commit -m "fix(parser): keep the final line without a trailing newline"
⬆️Dependency bumps that prove themselves
Bump, build, test — looped until everything passes, or stopped honestly.
❯ @loop "bump tokio to 1.40 and fix what breaks" --check "cargo test --workspace" ▶ iteration 1/5 … check: exit=1 · E0308 in net.rs ▶ iteration 2/5 … check: exit=0 ✓ goal reached after 2 iteration(s)
📝Release notes as a background job
Fire it, forget it, read the markdown log later — the job survives closing the window.
❯ @job write release notes from the last 20 commits --bg ▶ background job 1753114100-6001 ❯ @job ✓ 1753114100-6001 done write release notes … (3m ago · 41s)
🚦Gate your push on a green loop
Every AI command exits honestly (0/1/2/130) — so loops compose with && and CI.
❯ @loop "make clippy clean" --check "cargo clippy -- -D warnings" && git push ✓ goal reached after 2 iteration(s) → push runs only because the loop exited 0
🧬Write your own flow in ten lines
A flow is a TOML file in ai/flows/ — your pipeline, your agents, chained.
# ~/.aiTerminal/ai/flows/ship.toml [[step]] label="implement"; agent="coder"; prompt="Implement: {{input}}" [[step]] label="verify"; agent="tester"; prompt="Verify the change above." ❯ @flow ship add rate limiting to the login route
🏗Scaffold with your conventions, not the internet's
Your ai/aiTerminal.md and memories teach it the house style once — every run after follows it.
❯ @coder "add a new /health endpoint following our handler pattern" ∴ recalling: handlers live in api/handlers, one file per route, table-driven tests… ⚙ fs.write {"path":"api/handlers/health.rs"} · 5ms · 890B
Read code like you wrote it
🗺Learn a codebase you just cloned
@explorer is read-only and fast — pipe the map straight into a file.
❯ git clone github.com/org/service && cd service ❯ @explorer "map the request lifecycle from route to DB" > MAP.md ✓ 22s · 9 tools · 18k in / 1.2k out
👀Pre-merge review without leaving the repo
The review flow maps the touched code first, then a read-only reviewer reports concrete findings.
❯ @flow review the changes on this branch vs main ✓ map · ✓ review 1. parser.rs:88 — CRLF input splits wrong … 2. cache.rs:41 — eviction races the reader …
🔐Security audit sweep
A read-only reviewer with a security skill — it can look, it cannot touch.
❯ @reviewer "audit the auth module: injection, secrets, unsafe patterns" ⚙ fs.search {"q":"password"} · 12ms · 3.4KB 1. login.rs:52 — the SQL string is concatenated …
📄Spec vs implementation
Attach the PDF and the source file; get a compliance diff in plain language.
❯ @reviewer does the parser match the spec? @rfc.pdf @src/parser.rs Mostly — §3.2 requires CRLF tolerance; parser.rs:88 only splits on \n. §4.1 limits are enforced. …
🖼Debug from a screenshot
Attach images with @path — vision models read them inline.
❯ @ai why does the layout break like this? @shots/bug.png The sidebar's flex container is missing min-width:0 — the table forces it wider than its track …
🏛Git archaeology
"Why does this line exist?" — the session context carries the blame output into the question.
❯ git log -S "retry_after" --oneline | head -3 ❯ @ai summarize why this was introduced and what depends on it Added in a1c2f3 after the 429-storm incident: the backoff…
🎓Explain before you run
Paste-from-the-internet safety: ask what it does first — and the guard still checks it after.
❯ @ai explain: curl -fsSL get.example.sh | sh Downloads a script and pipes it straight to your shell — you're executing unreviewed remote code. … ⚠ curl | sh is confirm-tier by default
📎Attach the log, not a paste
Any @<path> text file inlines into the prompt (≤48 KB, redacted first).
❯ @ai why did this build fail? @build.log The linker error at line 214 comes from two versions of zlib — your Makefile pins one, pkg-config found the other…
🐙One agent, parallel scouts
@coder delegates read-only sub-agents with task.run — parallel exploration, bounded and safe.
❯ @coder "compare how auth works in api/ vs legacy/" └ task.run → 2 sub-agent(s): @explorer @explorer Both wrap JWTs, but legacy/ refreshes in middleware while api/ refreshes at the client — that's your drift.
📚Docs from the code that's actually there
An agent that reads the real functions writes docs that don't lie.
❯ @job document the public API of src/client.rs into docs/client.md --bg ▶ background job 1753115400-7210 monitor: @job · tail -f …/log.md
Production, without the panic
🚨Incident response, 2 a.m.
Ask in plain words; run what you can read. "It" resolves to the crashing pod you just saw.
❯ kubectl get pods | grep -v Running api-7d4b… CrashLoopBackOff ❯ @ai show me the last 50 log lines of it, previous container ❯ kubectl logs api-7d4b… --previous --tail=50
🔎Log forensics without awk golf
Describe the slice you need; review the pipeline it builds.
❯ @ai count 5xx by endpoint in access.log for the last hour ❯ press Enter to run (or edit) ❯ awk -v d="$(date -v-1H +%H)" '$4~d && $9~/^5/ {c[$7]++} END {for (k in c) print c[k], k}' access.log | sort -rn
🐳Container hygiene, safely
In manual mode (the default) every AI-proposed command preloads for review — nothing runs until you press Enter.
❯ @ai clean everything unused ❯ press Enter to run (or edit) ❯ docker system prune -af --volumes
📊Babysit a long migration
Split the window: migration left, a watcher right — one glance, whole picture.
# pane 1 ❯ ./migrate --all # pane 2 ❯ @ai watch the error rate in api.log every 10s ❯ watch -n10 "grep -c ERROR api.log"
🌍SSH without losing your bearings
OSC-7 keeps the status bar showing the remote host and path; the switcher finds the tab by "prod".
❯ ssh deploy@prod # status bar: 📁 /var/www · deploy@prod # ⌘P "prod" → jump straight back here
🔏Cert & expiry checks on demand
Nobody remembers the openssl incantation. Nobody has to.
❯ @ai when does the TLS cert on api.example.com expire? ❯ echo | openssl s_client -connect api.example.com:443 2>/dev/null | openssl x509 -noout -enddate notAfter=Oct 12 08:21:44 2026 GMT
🧯Your own guard rules
The three tiers are config: add a [security] confirm_commands pattern and it binds you and every agent.
# config.toml: confirm_commands = ["reset --hard"] ❯ @ai roll back to the previous release tag ⚠ review before running — matches a confirm rule /reset --hard/ ❯ git reset --hard v2.4.1
✈️Fully local, fully private
Point the pool at Ollama or LM Studio and nothing ever leaves your machine — @ai works on a plane.
# [[ai.model]] provider = "ollama"; id = "llama3" ❯ @ai summarize the failing tests in @test.log ∴ local model · no network egress
🛟AI that fails over
Weighted pools: cloud first, local fallback — a provider outage doesn't stop your run.
# anthropic weight 3 · ollama weight 1 ❯ @coder "fix the flaky retry test" provider timeout → failing over to llama3 (local) ✓ 34s · 5 tools — the run finished anyway
⚡Hands-free read-only ops
[ai] mode = "auto": safe-listed inspection commands run immediately; anything mutating still stops for you.
❯ @ai how far is this branch behind main? ❯ git rev-list --count HEAD..origin/main ← ran (read-only git is safe-listed) 14
📟Vitals at a glance
The sysinfo plugin keeps load and battery in the status bar; a dashboard when you want more.
❯ sysinfo
cpu 12% · mem 9.2/32 GB · disk 412/994 GB
load 2.1 1.8 1.6 · battery 84% (charging)
Jobs do it while you don't
📦Multi-repo sweeps
Read-only agents shine at boring audits — fan them out as background jobs.
❯ for r in api web infra; do (cd $r && @job list GPL deps with versions --agent reviewer --bg) done ❯ @job # three jobs running, three logs
🧾Data wrangling without man pages
Stop googling awk syntax. Review the one-liner, then run it.
❯ @ai sum column 3 of sales.csv grouped by column 1 ❯ awk -F, '{s[$1]+=$3} END {for (k in s) print k, s[k]}' sales.csv
🗂Batch renames, reviewed first
The command is printed before anything moves — edit it, then commit.
❯ @ai rename all *.jpeg here to *.jpg ❯ press Enter to run (or edit) ❯ for f in *.jpeg; do mv "$f" "${f%.jpeg}.jpg"; done
🗓The Friday report, from git
Your week, summarized from what actually merged — as a job, into a file.
❯ @job summarize this week's merged PRs into WEEK.md --bg ▶ background job 1753116000-8104 ✓ done · 38s — WEEK.md written
🔤Convert anything, hash anything
The encode plugin: base64, hex, URL, JSON, SHA, UUID — no web tools, nothing leaves your machine.
❯ b64 "user:pass" # dXNlcjpwYXNz ❯ sha release.tar.gz # 9f86d08…a4c2 ❯ uuid # 8f4e…-…-c21a
🔌Plug your company tools in — MCP
Declare a Model-Context-Protocol server under ai/mcp/; its tools join the catalog as mcp.<server>.<tool>.
# ~/.aiTerminal/ai/mcp/jira.toml ❯ @coder "what's assigned to me this sprint?" ⚙ mcp.jira.search {"assignee":"me"} · 240ms · 1.8KB Three tickets: API-231 (rate limits), API-238, INFRA-12.
🌐Translate your terminal's strings
i18n as data: hand the catalog to an agent, get a locale back.
❯ @job translate i18n/en.toml to German into i18n/de.toml --bg ✓ done — 41 keys, same structure, CI parity holds
The thousand little wins
🏝Work / personal / ops identities
Profiles switch theme, AI models, plugins and the whole saved workspace in one command.
❯ @profile work switched to profile 'work' — applies within a second # Opus for work, local Ollama for personal — different pools per profile
🧠A terminal that remembers
Agents curate a BM25-ranked markdown memory (memory.* tools) — recalled automatically in every future run.
❯ @coder "remember: deploys go through make ship, never push main directly" ⚙ memory.add {"kind":"decision"} · 3ms · 96B recalled automatically in future runs — plain markdown, no database
✂️Edit the command like a text field
⌥/⌘ arrows jump by word or line ends; add ⇧ to select. Type to replace, ⌫ deletes, Esc cancels, ⌘C copies — pure zsh, the lineedit plugin.
❯ cargo test --workspace # ⇧⌥← selected the flag ❯ cargo test --doc # typed over it — replaced in place # a light band, your syntax colors stay on top · Enter on a mouse selection copies it
🗜Extract anything, jump anywhere
x handles 15+ archive formats; jump learns your directories by frecency.
❯ x release.tar.zst # extracted → ./release/ ❯ j terminal # → ~/Data/Projects/the-terminal
📝Notes at the prompt
Capture the thought without leaving the flow — notes lists them back.
❯ note "rotate the staging certs before Friday" ❯ note "bump MSRV after 1.96 lands" ❯ notes # 2 notes
🔎Search 18 engines without a browser tab first
Google, Stack Overflow, GitHub, MDN, crates.io, PyPI — straight from the prompt.
❯ so "borrow checker E0502 split at mut" ❯ crates "toml parser no_std"
🎨Make the 20th theme yours
@theme export prints the full normalized TOML — the perfect starting point.
❯ @theme export midnight > ~/.aiTerminal/themes/mine.toml ❯ vim ~/.aiTerminal/themes/mine.toml # change accent, done ❯ @theme mine theme 'mine' applied — running shells restyle too
📦Ship agents inside the repo
A project-local ai/ folder shadows the global set — clone the repo, get its agents.
❯ ls ai/agents/ api-reviewer.md migration-writer.md ❯ @api-reviewer "check my changes against our API rules" ✦ @api-reviewer · claude-opus-4-8 ← the repo's own agent
🤝Onboard the new teammate
Point them at the repo with aiTerminal installed — the codebase explains itself.
❯ @ai where do I add a new API route in this project? Routes live in api/routes.rs; each handler is a file in api/handlers/. Register it in ROUTES, add a table test…