76 real workflows, real prompts

What people actually do with it.

Every one of these runs at a normal shell prompt — no context switch, no copy-paste. The AI sees your (redacted) session, the guard reviews every command, and everything scripts with honest exit codes.

01 · ship faster

From "could you…" to merged

🧑‍🔬Pick the right specialist

@agent is the roster: eight of them, each with its tools, its step cap and what it returns. Run any one with @<name>. They are Markdown files, so the list is yours to change.

 @agent
agents (8):
  served by claude-sonnet-5

  @ai          19 tools · 6 steps
      General assistant — concise Markdown answers, with commands to review.

  @coder       25 tools · 8 skills · 24 steps
      Senior engineer + orchestrator — explores, makes the smallest correct edit, verifies,
      delegates.
      skills   concise · planning · orchestration · code-review · testing · verification · debugging · git

  @explorer    7 tools · 1 skill · 12 steps
      Fast read-only scout — maps the relevant code and reports back tightly.
      skills   concise

  @planner     7 tools · 4 skills · 10 steps
      Turns a goal into a short plan with acceptance criteria — reads, never writes.
      skills   concise · planning · research · orchestration

  @researcher  12 tools · 3 skills · 16 steps
      Finds sources, reads them, and reports what they actually say — with links.
      skills   concise · research · writing

  @reviewer    7 tools · 5 skills · 12 steps
      Read-only code review — correctness, security, tests, design.
      skills   concise · code-review · security-review · verification · writing

  @tester      13 tools · 4 skills · 18 steps
      Writes and runs tests; reproduces a failure, then fixes it.
      skills   concise · verification · testing · debugging

  @writer      10 tools · 2 skills · 14 steps
      Writes documentation and reports for the person who will read them — and saves the file.
      skills   concise · writing

one in full:  @agent <name>   ·  run one:  @<name> "<task>"

🧩Describe it. Get a workflow.

You do not have to already have the right flow. Name none and one is written for the goal — out of the agents you actually have — then checked before it spends a token. It lives in the run's own record, so you can read exactly what was made for you, and @flow still lists only the five you meant to have.

 @flow explain how the export command works
◈ no flow named — building a graph for this goal
◈ built a 3-node graph: read the code, write it up, check every claim · @flow show 1785371201-90257
  3 nodes · 3 agents · 24 tools · 8 skills · 4 at a time · slowest path read→draft→check
  ╭────────────────────────────────╮    ╭────────────────────────────────╮    ╭────────────────────────────────╮
   ⠼ read                      ⚙6      ○ draft                             ○ check                        
   @explorer · claude-sonnet-5    ───▸│ @writer · claude-sonnet-5      │───▸│ @reviewer · claude-sonnet-5    
   ⚙ fs.read src/export.rs                                                                                
  ╰────────────────────────────────╯    ╰────────────────────────────────╯    ╰────────────────────────────────╯

 read · @explorer · claude-sonnet-5
    running · 6 tool calls
    ⚙ fs.search "export" · 14ms · 6 results
    ⚙ fs.read src/export.rs · 9ms · 8.2KB
    ⚙ fs.read src/cli.rs · 7ms · 6.0KB
  0/3 done · 1 running

🚢Ship a small feature, end to end

The build graph plans it, maps the code and your conventions in parallel, edits, runs your tests — and if they fail, loops back through a fixer up to three times before giving up.

 @flow build "add a --json flag to the export command"
▸ build · add a --json flag to the export command
  8 nodes · 6 agents · 69 tools · 24 skills · 4 at a time · slowest path plan→explore→apply→verify→review→summary
  ╭────────────────╮    ╭────────────────╮    ╭────────────────╮    ╭────────────────╮    ╭────────────────╮    ╭────────────────╮
   ✓ plan      ⚙3      ✓ explore  ⚙12      ⠼ apply     ⚙4      ○ verify            ○ fix               ○ summary      
   @planner       │───▸│ @explorer      │───▸ @coder         ───▸│ @tester        │───▸│ @coder         │╌╎ ▸│ @writer        
   4.2s · 3.1k       ││ 8.1s · 9.4k        ⚙ fs.edit src…                       ││ when verify.o…   ││                
  ╰────────────────╯   │╰────────────────╯   ╰────────────────╯   ╰────────────────╯   │╰────────────────╯  │╰────────────────╯
                                                                                                          
                       │╭────────────────╮                                             │╭────────────────╮  
                       ││ ✓ conventions                                               ││ ○ review         
                       ▸│ @explorer      │───┘                                          ▸│ @reviewer      │───┘
                         7.6s · 8.8k                                                    when verify.o…  
                        ╰────────────────╯                                               ╰────────────────╯ 
                                                                                                            
                                                                  ╎╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╎
 apply · @coder · claude-sonnet-5
    running · 4 tool calls · needs explore, conventions
    ⚙ fs.read src/export.rs · 9ms · 8.2KB
    ⚙ fs.edit src/export.rs · 12ms · 1 replaced
    ⚙ fs.edit src/cli.rs · 11ms · 1 replaced
  3/8 done · 1 running · 21.3k tokens · 24.6s

🔴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
 @job log last -f

🧪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 tests/totals.rs · 4ms · 1.1KB
  ⚙ sys.run cargo test totals · 2.9s · 31 lines
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 graph in ten lines

A flow is a TOML file in ai/flows/. needs draws the edges; a run node is a plain command that costs no tokens.

# ~/.aiTerminal/ai/flows/ship.toml
[[node]]
id     = "build"
agent  = "coder"
prompt = "Implement: {{input}}"
[[node]]
id     = "verify"
run    = "npm test"
needs  = ["build"]
 @flow check ship   ← proved before it spends a token
 @flow ship "add rate limiting to the login route"

🔎Answer a question properly, with sources

The research graph splits the question into sub-questions, researches each at the same time, then reports what the sources actually say — including where they disagree and what it could not establish.

 @flow "Research LLM memory techniques"
▸ research — the goal asks for sources and a comparison, not a code change
  4 nodes · 3 agents · 24 tools · 6 skills · 4 at a time · slowest path plan→gather→compare→report
  ╭───────────────────────────╮    ╭───────────────────────────╮    ╭───────────────────────────╮    ╭───────────────────────────╮
   ✓ plan                 ⚙2      ⠼ gather               ⚙5      ○ compare                      ○ report                  
   @planner                  │───▸ @researcher               ───▸│ @researcher               │───▸│ @writer · claude-sonnet-5 
   3.1s · 1.2k                    ⚙ web.search "LLM memory…                                                               
  ╰───────────────────────────╯    ╰───────────────────────────╯    ╰───────────────────────────╯    ╰───────────────────────────╯

 gather · @researcher · claude-sonnet-5
    running · 5 tool calls · needs plan
    ⚙ web.search "LLM memory architectures" · 480ms · 8 results
    ⚙ web.read arxiv.org/abs/2404.… · 1.2s · 44KB
    ⚙ web.read arxiv.org/abs/2405.… · 940ms · 31KB
  1/4 done · 1 running · 1.2k tokens · 12.0s

🔬Find out what one node actually did

A run you can only read as a whole is a run you cannot debug. Every node's model, cost and transcript is written the moment it lands — so you can open one, follow a detached run from another pane, or run a single node again and take its downstream with it.

 @flow nodes last
   plan     done      @planner · claude-sonnet-5 · 4.2s · 9000 tokens · 3 tool call(s)
   apply    failed    @coder · claude-opus-5 · ×2 · 12.3s · 4 tool call(s)
 @flow node last apply   ← its edges, its cost, and what it said
 @flow watch last        ← follow a --bg run from any pane
 @flow retry last apply  ← and everything built on it

🩺Fix the bug somebody just reported

Reproduce first — a fix for a bug you never reproduced is a guess with a commit message — then find the cause, patch it, and re-run the same check until it is genuinely gone.

 @flow fix "CSV export drops the last row when the file has no trailing newline"
   reproduce  @tester    made it fail on purpose
   locate     @explorer  writer.rs:212 — the flush is skipped
   patch      @coder     + a regression test
   verify     @tester    VERDICT: PASS

📚Documentation that is actually true

The document graph writes the file, then a reviewer checks every claim against the source and sends it back until nothing is wrong. The loop turns on the file on disk, so each pass sees the last one's edits.

 @flow document "the plugin system — write docs/plugins.md"
   read    @explorer
   draft   @writer    wrote docs/plugins.md
   check   @reviewer  VERDICT: FAIL — 2 claims contradict the code
   revise  @writer    fixed both
   check   @reviewer  VERDICT: PASS

🏗Scaffold with your conventions, not the internet's

Your ~/.aiTerminal/aiTerminal.md and folder 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 api/handlers/health.rs · 5ms · 890B
02 · understand & review

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 (16.2k cached, 90%)

Nine tool calls, and the prompt behind them was paid for once: the first turn writes the cache, every turn after reads it.

👀Pre-merge review without leaving the repo

The review graph maps the code once, then runs three reviewers at the same time — correctness, security, design — and merges what they found.

 @flow review "the changes on this branch vs main"
 map ·  correctness ·  security ·  design ·  report
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 "password" · 12ms · 9 results
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 · @job log last -f
03 · operate with confidence

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 [[guard.command]] table with rule = "confirm" 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

Set strategy = "failover" — cloud first, local fallback — and a provider outage doesn't stop your run (it tries the next candidate before any output, with transient errors retried + backoff first).

# [ai.balance] strategy = "failover"
# then anthropic, then ollama (order = fallback order)
 @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)
04 · away from your desk

Your terminal, from your phone

🤝Pair once — a stranger gets nothing

The six-digit code prints in your terminal. Until someone types it, an unknown chat gets no reply at all — not even a hint the bot is live.

 @gate telegram start
  ⬤ telegram gate live · @mourad_term_bot
  pair from the chat: /pair 418-207   (nothing runs until you do)
  ▸ unknown chat 8814… — no reply sent (not paired)

🚂Answer Claude Code from the train

Start an interactive CLI in the gated shell and the gate attaches: the chat becomes its screen — one message, edited in place — and its numbered question becomes buttons.

You ▸ claude
Bot ◂ ▶ attached to claude — send text to type into it.
You ▸ add a --json flag to export
Bot ◂  Do you want to make this edit?
       ❯ 1. Yes   2. Yes, and don't ask again
       [ 1 · Yes ] [ 2 · Yes, and… ] [ 3 · No, tell… ]

🛡The guard still applies remotely

A remote command meets the same guard as an AI suggestion — denied outright, or held until you reply /yes.

You ▸ rm -rf /
Bot ◂ ✗ blocked by guard — matches a denied pattern.
You ▸ git push --force
Bot ◂ ⚠ confirm — reply /yes to run it.
You ▸ /yes

🙈Secrets never reach the chat

Your [[guard.secret]] rules apply to everything leaving the machine — both scopes, because a chat app is off-machine either way. Your screen still shows the real thing, and a command you send back carrying a placeholder runs here with the real value in it.

You ▸ cat .env
Bot ◂ AWS_ACCESS_KEY_ID=«redacted»
       ANTHROPIC_«redacted»
       LOG_LEVEL=debug
  ◂ sent 3 lines to telegram · 2 redacted

🌙Check the long build from bed

A long command sends progress notes and always finishes with its real exit status — never abandoned part-way. /status says what's happening right now.

You ▸ cargo build --release
Bot ◂ ⏳ still running — 2m elapsed.
Bot ◂ ❯ cargo build --release · ✓ 0 · 2m41s
You ▸ /status
Bot ◂ gate · idle
       host mourad-mbp
       completion detection: exact

🔑The password prompt, handled

When a command goes quiet waiting for input, the gate sends what it has and routes your next message to its stdin instead of starting a new command.

You ▸ sudo dscacheutil -flushcache
Bot ◂sudo is waiting for input:
       Password:
Bot ◂ Your next message goes to it, not to a new command.
  ▸ Mourad sent 8 characters to stdin

🪟Run something while vim owns the shell

/run is refused rather than fired unattended minutes later. /sh runs out-of-band in its own shell; /shot gets you the screen in colour.

You ▸ /run git diff
Bot ◂ vim is using the terminal — there is no shell
       to run that in. Try /sh git diff.
You ▸ /sh git diff --stat
Bot ◂ ❯ git diff --stat · ✓ 0 · 0.2s

🧠Your terminal's own AI, from the chat

/ai reaches the same models, memory and redaction as @ai at the keyboard — no second account, no second config.

You ▸ /ai why is the release build so slow?
Bot ◂ lto = "fat" and codegen-units = 1 trade build
       time for runtime speed. Try lto = "thin".

🔒Close it from either side

@gate stop from any pane, /stop from the chat, exit in the pane, or idle_timeout_minutes. Stopping always restores the terminal.

 @gate status
telegram  gate-8f2a  pid 40118  ·  Mourad
 @gate stop
  ⬤ gate closed — raw mode off, cursor back
05 · automate the boring

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

Say when, in plain English

End a task with a natural time and it is scheduled — it runs later, in the folder where you typed it.

 @job back up the db in 2 minutes
⧖ scheduled job 1753112100-4310 — fires in 2m
 @job post the standup summary at 09:00
 @job cancel 1753112100-4310

🪵Watch a job like a log file

Every job is a folder: job.toml for what to run, when, and how the last run went, plus runs/<n>.md — one log per occurrence. Closing the terminal never kills it.

 @job audit the deps --agent reviewer --bg
▶ background job 1753112000-4242
 @job log 4242 -f
 @job clear   # prune everything finished

🔤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
06 · everyday superpowers

The thousand little wins

Never wonder what it is doing

A model call is the only thing here that takes seconds, and every one of them says what it is for rather than leaving a dead terminal. Work that finishes at once shows nothing at all — and while you wait, one dim line teaches you something.

 @job summarise yesterday's logs tomorrow at 9
⠹ reading when to run this…
⧖ every day at 09:00 — summarise yesterday's logs
  fires in 14h · it survives this terminal

⠹ thinking…  ·  @flow retry <node> re-runs it and everything built on it

🩺When it breaks, it says so

A run that hits its step budget still hands back what it found. A node that fails shows why on its card, everything behind it reads ⊘ blocked, and the tally counts every state — so a finished run never looks like one still going.

  3 nodes · 3 agents · 24 tools · 8 skills · 4 at a time · slowest path read→draft→check
  ╭────────────────────────────────╮    ╭────────────────────────────────╮    ╭────────────────────────────────╮
   ✗ read                     ⚙16      ⊘ draft                             ⊘ check                        
   @explorer · claude-sonnet-5    │───▸ @writer · claude-sonnet-5      │───▸│ @reviewer · claude-sonnet-5    
   the step budget of 12 ran out       something it needed failed          something it needed failed     
  ╰────────────────────────────────╯    ╰────────────────────────────────╯    ╰────────────────────────────────╯

 read · @explorer · claude-sonnet-5
    failed · 11.5s · 30.0k tokens · 16 tool calls
    ⚙ fs.search "export" · 14ms · 6 results
    ⚙ fs.read src/export.rs · 9ms · 8.2KB
    ⚙ fs.read src/format.rs · 8ms · 4.1KB
  0/3 done · 1 failed · 2 blocked · 30.0k tokens · 11.6s

🏝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 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 19 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"

📖Read a README without leaving the shell

@md render pretty-prints Markdown with diagrams drawn natively; @md edit is a live split — source left, rendered preview right.

 @md render README.md
 @md edit notes.md
┌ notes.md ● (42L) ──────┬────────────────┐
│ 1 # Release plan       │ Release plan   │
│ 3 - cut the branch     │  • cut the br… │

⌨️Bind it the way your hands expect

Keymaps are TOML too. Modifier names are forgiving (cmd/super, alt/opt), and a number binding still fires on a layout where the digit needs Shift.

# ~/.aiTerminal/keymaps/mine.toml
[[keybinding]]
key    = "cmd+shift+d"
action = "split_down"

🎨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 to profile 'default' — a running window restyles within a second

📦Write an agent, share the file

An agent is one Markdown file: front-matter picks its tools, the body is its system prompt. Drop it in and @<name> works.

 cat ~/.aiTerminal/ai/agents/api-reviewer.md
---
tools = ["fs.read", "fs.search", "sys.run"]
skills = ["code-review"]
max_steps = 12
---
You review changes against our API conventions…
 @api-reviewer check my changes against our API rules

🤝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…
Get aiTerminal →
07 · if you don't write code

None of this needs a repo

A terminal is just a place to type. Everything below works on a folder of documents, a question you have, or a file somebody sent you — and every one of them is a command you can copy and run today. Where something needs more than a model key, it says so.

📄Read the long PDF for me

Any @<path> that names a real file rides along with your question. PDFs and images go as-is; text files are inlined.

 @ai summarise @~/Downloads/tenancy-agreement.pdf — what am I agreeing to, in 10 bullets
✦ claude-opus-4-8 · 1 document
1. Twelve-month fixed term, then rolling monthly …
needs a model with document support, or the file is skipped (images: vision)

🔎Get a real answer, with real sources

The research flow splits your question into parts, looks each one up in parallel, then reports what the sources say — and where they disagree.

 @flow "what is a landlord actually required to fix, and how fast"
▸ research — asks for sources and a comparison
   plan     @planner      → 5 sub-questions
   gather   @researcher   × 5, at once
   report   @writer
search is keyless — no extra account, just [ai] network = true

🧺Tidy this folder — but let me look first

@ai proposes one command and preloads it for review. You read it, edit it, press Enter — or don't. Nothing runs behind your back.

 @ai move every screenshot on my Desktop into ~/Pictures/Screenshots, in folders by month
 press Enter to run (or edit)
 for f in ~/Desktop/Screen*.png; do d=~/Pictures/Screenshots/$(date -r "$f" +%Y-%m); mkdir -p "$d"; mv "$f" "$d"/; done

🗂Rename a pile of photos sensibly

Same review-first path. Ask in your own words; read the command before it touches anything.

 @ai rename the photos in ~/Pictures/trip to trip-01.jpg, trip-02.jpg … in date order
 press Enter to run (or edit)
 i=1; ls -tr ~/Pictures/trip/*.jpg | while read f; do mv "$f" "$(dirname "$f")/trip-$(printf %02d $i).jpg"; i=$((i+1)); done

🧾Make this export readable

A .csv, .txt or .md attachment is inlined straight into the question — no tool call, no setup.

 @ai turn @sales-q3.csv into a markdown table and tell me the three biggest movers
| region | q2 | q3 | change |
|---|---|---|---|
| north  | 41 | 58 | +41% |
Biggest movers: north, then iberia; apac fell 12% …

📰Read a long page without the browser

@researcher can fetch and read. (@ai cannot — it has no tools; it answers or proposes a command.)

 @researcher "what does this actually say — https://example.org/policy-update"
  ⚙ web.read https://example.org/policy-update · 1.1s · 22KB
Three changes matter to you, one takes effect in March …
every claim carries its source; what it couldn't confirm is listed

✍️Draft it, and save the file

@writer writes to disk rather than printing at you — and marks anything it could not verify instead of smoothing over it.

 @writer "turn @notes.md into a one-page brief at brief.md"
  ⚙ fs.read notes.md · 4ms · 3.9KB
  ⚙ fs.write brief.md · 6ms · 2.1KB
Wrote brief.md — the decision first. Two claims marked unverified.

✂️Hold it under the word count

@loop needs a command whose exit status decides — and that does not have to be a test suite. wc and test are enough.

 @loop "cut the intro in intro.md under 200 words without losing the point" \
     --agent writer --check "test $(wc -w < intro.md) -lt 200"
▶ iteration 1/5 … check: exit=1
▶ iteration 2/5 … check: exit=0
✓ goal reached after 2 iteration(s)

🗓A weekly digest, in plain English

Say when in your own words. The AI reads the schedule once and stores it as cron — every run after that is arithmetic, and a missed one catches up.

 @job "every Monday at 9, summarise what landed in ~/Documents/inbox into weekly.md"
⧖ every Monday at 09:00 — summarise what landed … · job 1753112060-4302
  cron 0 9 * * 1  ·  fires in 3d  ·  cancel: @job cancel 1753112060-4302

📖Write and see it at the same time

@md edit is a split: your Markdown on the left, the rendered page on the right — diagrams and tables drawn in the terminal. No model, no network.

 @md edit letter.md
┌─ letter.md ────────┬─ preview ──────────┐
│ # Dear board       │ Dear board         │
│ - point one        │  • point one       │
└────────────────────┴────────────────────┘

📱Ask it from the bus stop

Pair a chat app to this pane and type at it from your phone. The same guard applies, and your secrets are redacted before anything leaves.

 @gate telegram start
  ⬤ telegram gate live · @your_term_bot
  pair from the chat: /pair 418-207   (nothing runs until you do)
then, from the bus stop:  "did the weekly digest run?"

🎨Make it yours in one command

19 themes, live — the whole window restyles within a second. No settings window anywhere in this product.

 @theme
themes in ~/.aiTerminal/themes (19):
  ○ alpine   ○ coral   ○ cosmic-orange   ○ deep-purple   ○ gold   ○ graphite
  ○ lavender   ○ light-gold   ● midnight   ○ mist-blue   ○ nebula   ○ pink
  ○ product-red   ○ sage   ○ sky-blue   ○ solar-flare   ○ starlight   ○ sunset   ○ titanium
 @theme sunset
theme 'sunset' applied to profile 'default' — a running window restyles within a second