Terminal Jarvis
Command center for orchestrating context switching between coding-agent harnesses
Safe Testing Recommended: Terminal Jarvis is a harness for AI coding tools that can modify files and execute commands. For the safest experience, test in a remote development environment such as GitHub Codespaces, Coder, DevPod, or Google Colab.
Registries that don't animate GIFs render the static frame docs/demo-tui.png; see docs/demo.md for how both are recorded.
Install
Package mechanics, supported platforms, and update behavior: Installation.
# Cargo
cargo install terminal-jarvis
# Cargo binary name is terminal-jarvis; add an alias if you want a short call:
# echo 'alias tj=terminal-jarvis' >> ~/.bashrc
# npm
npm install -g terminal-jarvis
# The npm package also installs a tj shim, so you can call either:
# terminal-jarvis list # or tj list
# Homebrew
brew install BA-CalderonMorales/homebrew-terminal-jarvis/terminal-jarvis
Quick Start
Inspect and safely gate catalog descriptors for Claude, Gemini, Qwen, Pi, Droid and a variety of other AI assistants from one terminal interface. The modes, the launch guards, and the full command surface: Usage.
# Open the interactive switcher (bare tj on a terminal does the same)
terminal-jarvis tui
# List every coding agent
terminal-jarvis list
# Inspect a harness
terminal-jarvis show opencode
# Preview a capability command
terminal-jarvis plan codex headless
# Select and verify the active harness
terminal-jarvis use opencode
terminal-jarvis current
terminal-jarvis check
# Optional: block harness commands until Trivy clears this workspace
terminal-jarvis gate enable trivy
terminal-jarvis gate status
Commands
Commands run in one of two ways: headless (terminal-jarvis <command>) or
inside the interactive switcher (terminal-jarvis tui), and every command is
the same however you reached the tool:
- Installed globally (npm, Homebrew, or Cargo):
terminal-jarvis list/tj list - No install -- run on demand from anywhere:
npx terminal-jarvis list - Built from source (this repository):
cargo run -- list
First time here? No install needed -- npx terminal-jarvis tui opens the
switcher directly.
Headless (terminal-jarvis <command> / tj <command>) -- one command per
invocation, for scripts, CI, and one-shot tasks:
| Command | Purpose |
|---|---|
list | Show all coding agents |
check | Report binary + env readiness |
show <harness> | Inspect a harness's capabilities |
install <harness> | Install a harness |
update [<harness>] | Upgrade a harness |
plan [harness] <capability> | Preview the shell command |
use <harness> / current | Select / show active harness |
run [harness] [capability] [args...] | Execute a capability |
security [status|audit|harness] | Security posture |
gate [status|list|enable|disable|run] | Optional local security gate |
version [--verbose] / --version / -v / --info | Version info |
self-update [--dry-run] / --update | Update Terminal Jarvis or print the update command |
config show | Active config state |
auth help <harness> | Credential setup guidance |
[harness] [args...] | Pass-through to harness binary |
Interactive (terminal-jarvis tui / bare tj on a terminal) -- the
chat-style switcher with the numbered picker and readiness dashboard. Every
headless command above also works here, plus:
| Command | Purpose |
|---|---|
tui | Open the switcher |
home | Back to the welcome frame (works as clear too) |
exit | Leave the switcher |
Layout
The repository is a few small planes, and every Rust domain is bucketed the same way -- once you can read one, you can read them all.
src/ # the std-only Rust CLI
├── main.rs # entry point; lib.rs is the crate root
├── contracts/ # the shared data model (Harness, capabilities)
├── cli/ # parsing, guards, dispatch, tables, help
├── catalog/ # loads and validates the data plane
├── context/ # platform, distribution, active-harness state
├── diagnostics/ # readiness reports, probes, PATH resolution
├── gates/ # optional local security gate (Trivy)
├── runtime/ # executes harness capability commands
├── security/ # credential and effect posture
└── tui/ # the interactive switcher (chat-style shell)
harnesses/<agent>/ # the data plane: one folder per coding agent
├── index.toml # name, display, binary, env requirements
├── download/index.toml # install without sudo
├── update/index.toml # upgrade without interactive auth
├── headless/index.toml # non-interactive command mode
├── version/index.toml # print installed agent version
├── stats/index.toml # local agent statistics
├── models/index.toml # list available models
├── security/index.toml # sandbox and approval settings
├── ui/index.toml # interactive terminal UI
└── yolo/index.toml # bypass safeguards (dangerous)
tests/ # integration tests, one binary per domain
scripts/bash/ # automation: catalog, delivery, release, verify
docs/ # decisions, contracts, usage, demo, legacy
build/ # the build script only
npm/ homebrew/ # distribution launchers and formulae
Each Rust domain inside src/ keeps the same shape: index.rs as the public
face, logic/ for behavior, structs/ for data, tests/ for proof, and
every file stays at 100 lines or fewer.
Docs
Browse the whole folder from the docs index. What this is for, and the catalog truth behind it: What is this?.
| Document | What |
|---|---|
| Maintainer guide | The security model and maintainer notes |
| Installation | Package mechanics, supported platforms, update behavior |
| Usage | Headless vs interactive, launch guards |
| Capability contract | Full breakdown of the 9 capabilities |
| Security gates | Optional Trivy scan behavior and configuration |
| Troubleshooting | Triage blocked scans, failed installs, and local issues fast |
| Cataloged agents | All 25 descriptors and support caveat |
| Support matrix | All 225 capability truth rows |
| Development | Architecture, verification, and release artifacts |
| Demo | The recording, the agent-handover script, making new demos |
| Legacy notes | Aliases, plain output behavior, removed experiments |