feat(ai-tools): catalog of AI coding CLIs, detection, enable/default, lanes for any tool (#40 A1)
server/lib/ai-tools.js loads server/data/ai-tools/*.json (38 tools, data from Orca, MIT) plus DASHBOARD_AI_TOOLS_DIR, detects each CLI by walking PATH, and keeps enable/default in <data dir>/ai-tools.json. shell-path.js merges the login shell's PATH at startup and on Refresh. /api/ai-tools lists, refreshes and toggles; /api/run/binary resolves through the catalog. Lanes accept any catalog id (EDISABLED for a disabled one on creation, ENOTOOL at start once a tool left the catalog). pty-run keeps the Claude/Codex builders and builds every other tool's argv from its catalog file, pasting an after-start prompt through a tmux buffer; every pane gets the hydrated PATH. A per-run bypass switch appends the catalog's bypass args (Codex included). POST /api/run now forwards sandbox/approval/resumeLast, which it dropped. agenthub lanes add gains --tool.
This commit is contained in:
@@ -0,0 +1,15 @@
|
||||
# AI Tools catalog
|
||||
|
||||
One JSON file per AI coding CLI AgentHub can run in a lane. Loaded by
|
||||
`server/lib/ai-tools.js`; the fields are described in
|
||||
`docs/superpowers/specs/2026-09-28-ai-tools-a1-design.md` § 1. A file in
|
||||
`DASHBOARD_AI_TOOLS_DIR` with the same `id` replaces the built-in one (it may
|
||||
not set `launcher`).
|
||||
|
||||
## Attribution
|
||||
|
||||
The commands, prompt modes, permission-bypass flags and homepages of the tools
|
||||
other than Claude Code, Codex and Antigravity come from Orca
|
||||
(<https://github.com/stablyai/orca>, MIT License, Copyright (c) Stably AI):
|
||||
`src/renderer/src/lib/agent-catalog.tsx`, `src/shared/tui-agent-config.ts` and
|
||||
`src/shared/tui-agent-permissions.ts`.
|
||||
@@ -0,0 +1,15 @@
|
||||
{
|
||||
"id": "aider",
|
||||
"label": "Aider",
|
||||
"detect": [
|
||||
"aider"
|
||||
],
|
||||
"prompt": {
|
||||
"mode": "after-start",
|
||||
"delayMs": 3000
|
||||
},
|
||||
"bypass": [
|
||||
"--yes-always"
|
||||
],
|
||||
"homepageUrl": "https://aider.chat/docs/"
|
||||
}
|
||||
@@ -0,0 +1,16 @@
|
||||
{
|
||||
"id": "amp",
|
||||
"label": "Amp",
|
||||
"detect": [
|
||||
"amp"
|
||||
],
|
||||
"prompt": {
|
||||
"mode": "after-start",
|
||||
"delayMs": 3000
|
||||
},
|
||||
"bypass": [
|
||||
"--dangerously-allow-all"
|
||||
],
|
||||
"homepageUrl": "https://ampcode.com/manual#install",
|
||||
"faviconDomain": "ampcode.com"
|
||||
}
|
||||
@@ -0,0 +1,16 @@
|
||||
{
|
||||
"id": "ante",
|
||||
"label": "Ante",
|
||||
"detect": [
|
||||
"ante"
|
||||
],
|
||||
"prompt": {
|
||||
"mode": "after-start",
|
||||
"delayMs": 3000
|
||||
},
|
||||
"bypass": [
|
||||
"--yolo"
|
||||
],
|
||||
"homepageUrl": "https://github.com/AntigmaLabs/ante-preview",
|
||||
"faviconDomain": "antigma.ai"
|
||||
}
|
||||
@@ -0,0 +1,19 @@
|
||||
{
|
||||
"id": "antigravity",
|
||||
"label": "Antigravity",
|
||||
"detect": [
|
||||
"agy"
|
||||
],
|
||||
"prompt": {
|
||||
"mode": "flag",
|
||||
"flag": "-i"
|
||||
},
|
||||
"resume": [
|
||||
"--continue"
|
||||
],
|
||||
"bypass": [
|
||||
"--dangerously-skip-permissions"
|
||||
],
|
||||
"homepageUrl": "https://antigravity.google/docs/cli/overview",
|
||||
"faviconDomain": "antigravity.google"
|
||||
}
|
||||
@@ -0,0 +1,13 @@
|
||||
{
|
||||
"id": "aug",
|
||||
"label": "Auggie",
|
||||
"detect": [
|
||||
"auggie"
|
||||
],
|
||||
"prompt": {
|
||||
"mode": "after-start",
|
||||
"delayMs": 3000
|
||||
},
|
||||
"homepageUrl": "https://docs.augmentcode.com/cli/overview",
|
||||
"faviconDomain": "augmentcode.com"
|
||||
}
|
||||
@@ -0,0 +1,16 @@
|
||||
{
|
||||
"id": "autohand",
|
||||
"label": "Autohand Code",
|
||||
"detect": [
|
||||
"autohand"
|
||||
],
|
||||
"prompt": {
|
||||
"mode": "after-start",
|
||||
"delayMs": 3000
|
||||
},
|
||||
"bypass": [
|
||||
"--unrestricted"
|
||||
],
|
||||
"homepageUrl": "https://github.com/autohandai/code-cli",
|
||||
"faviconDomain": "autohand.ai"
|
||||
}
|
||||
@@ -0,0 +1,9 @@
|
||||
{
|
||||
"id": "claude",
|
||||
"label": "Claude Code",
|
||||
"detect": [
|
||||
"claude"
|
||||
],
|
||||
"launcher": "claude",
|
||||
"homepageUrl": "https://code.claude.com/docs"
|
||||
}
|
||||
@@ -0,0 +1,17 @@
|
||||
{
|
||||
"id": "cline",
|
||||
"label": "Cline",
|
||||
"detect": [
|
||||
"cline"
|
||||
],
|
||||
"prompt": {
|
||||
"mode": "after-start",
|
||||
"delayMs": 3000
|
||||
},
|
||||
"bypass": [
|
||||
"--auto-approve",
|
||||
"true"
|
||||
],
|
||||
"homepageUrl": "https://docs.cline.bot/cline-cli/overview",
|
||||
"faviconDomain": "cline.bot"
|
||||
}
|
||||
@@ -0,0 +1,13 @@
|
||||
{
|
||||
"id": "codebuff",
|
||||
"label": "Codebuff",
|
||||
"detect": [
|
||||
"codebuff"
|
||||
],
|
||||
"prompt": {
|
||||
"mode": "after-start",
|
||||
"delayMs": 3000
|
||||
},
|
||||
"homepageUrl": "https://www.codebuff.com/docs/help/quick-start",
|
||||
"faviconDomain": "codebuff.com"
|
||||
}
|
||||
@@ -0,0 +1,12 @@
|
||||
{
|
||||
"id": "codex",
|
||||
"label": "Codex",
|
||||
"detect": [
|
||||
"codex"
|
||||
],
|
||||
"launcher": "codex",
|
||||
"bypass": [
|
||||
"--dangerously-bypass-approvals-and-sandbox"
|
||||
],
|
||||
"homepageUrl": "https://github.com/openai/codex"
|
||||
}
|
||||
@@ -0,0 +1,17 @@
|
||||
{
|
||||
"id": "command-code",
|
||||
"label": "Command Code",
|
||||
"detect": [
|
||||
"command-code"
|
||||
],
|
||||
"args": [
|
||||
"--trust"
|
||||
],
|
||||
"prompt": {
|
||||
"mode": "argv"
|
||||
},
|
||||
"bypass": [
|
||||
"--yolo"
|
||||
],
|
||||
"homepageUrl": "https://commandcode.ai/docs/quickstart"
|
||||
}
|
||||
@@ -0,0 +1,17 @@
|
||||
{
|
||||
"id": "continue",
|
||||
"label": "Continue",
|
||||
"detect": [
|
||||
"cn"
|
||||
],
|
||||
"prompt": {
|
||||
"mode": "after-start",
|
||||
"delayMs": 3000
|
||||
},
|
||||
"bypass": [
|
||||
"--allow",
|
||||
"*"
|
||||
],
|
||||
"homepageUrl": "https://docs.continue.dev/guides/cli",
|
||||
"faviconDomain": "continue.dev"
|
||||
}
|
||||
@@ -0,0 +1,15 @@
|
||||
{
|
||||
"id": "copilot",
|
||||
"label": "GitHub Copilot",
|
||||
"detect": [
|
||||
"copilot"
|
||||
],
|
||||
"prompt": {
|
||||
"mode": "flag",
|
||||
"flag": "-i"
|
||||
},
|
||||
"bypass": [
|
||||
"--yolo"
|
||||
],
|
||||
"homepageUrl": "https://docs.github.com/en/copilot/how-tos/set-up/install-copilot-cli"
|
||||
}
|
||||
@@ -0,0 +1,16 @@
|
||||
{
|
||||
"id": "crush",
|
||||
"label": "Charm Crush",
|
||||
"detect": [
|
||||
"crush"
|
||||
],
|
||||
"prompt": {
|
||||
"mode": "after-start",
|
||||
"delayMs": 3000
|
||||
},
|
||||
"bypass": [
|
||||
"--yolo"
|
||||
],
|
||||
"homepageUrl": "https://github.com/charmbracelet/crush",
|
||||
"faviconDomain": "charm.sh"
|
||||
}
|
||||
@@ -0,0 +1,15 @@
|
||||
{
|
||||
"id": "cursor",
|
||||
"label": "Cursor",
|
||||
"detect": [
|
||||
"cursor-agent"
|
||||
],
|
||||
"prompt": {
|
||||
"mode": "argv"
|
||||
},
|
||||
"bypass": [
|
||||
"--yolo"
|
||||
],
|
||||
"homepageUrl": "https://cursor.com/cli",
|
||||
"faviconDomain": "cursor.com"
|
||||
}
|
||||
@@ -0,0 +1,19 @@
|
||||
{
|
||||
"id": "devin",
|
||||
"label": "Devin",
|
||||
"detect": [
|
||||
"devin"
|
||||
],
|
||||
"prompt": {
|
||||
"mode": "after-start",
|
||||
"delayMs": 3000
|
||||
},
|
||||
"bypass": [
|
||||
"--permission-mode",
|
||||
"bypass",
|
||||
"--respect-workspace-trust",
|
||||
"false"
|
||||
],
|
||||
"homepageUrl": "https://devin.ai/cli",
|
||||
"faviconDomain": "devin.ai"
|
||||
}
|
||||
@@ -0,0 +1,15 @@
|
||||
{
|
||||
"id": "droid",
|
||||
"label": "Droid",
|
||||
"detect": [
|
||||
"droid"
|
||||
],
|
||||
"prompt": {
|
||||
"mode": "argv"
|
||||
},
|
||||
"bypass": [
|
||||
"--auto",
|
||||
"high"
|
||||
],
|
||||
"homepageUrl": "https://docs.factory.ai/cli/getting-started/quickstart"
|
||||
}
|
||||
@@ -0,0 +1,16 @@
|
||||
{
|
||||
"id": "gemini",
|
||||
"label": "Gemini",
|
||||
"detect": [
|
||||
"gemini"
|
||||
],
|
||||
"prompt": {
|
||||
"mode": "flag",
|
||||
"flag": "--prompt-interactive"
|
||||
},
|
||||
"bypass": [
|
||||
"--yolo"
|
||||
],
|
||||
"homepageUrl": "https://github.com/google-gemini/gemini-cli",
|
||||
"faviconDomain": "gemini.google.com"
|
||||
}
|
||||
@@ -0,0 +1,16 @@
|
||||
{
|
||||
"id": "goose",
|
||||
"label": "Goose",
|
||||
"detect": [
|
||||
"goose"
|
||||
],
|
||||
"prompt": {
|
||||
"mode": "after-start",
|
||||
"delayMs": 3000
|
||||
},
|
||||
"bypassEnv": {
|
||||
"GOOSE_MODE": "auto"
|
||||
},
|
||||
"homepageUrl": "https://block.github.io/goose/docs/quickstart/",
|
||||
"faviconDomain": "goose-docs.ai"
|
||||
}
|
||||
@@ -0,0 +1,17 @@
|
||||
{
|
||||
"id": "grok",
|
||||
"label": "Grok",
|
||||
"detect": [
|
||||
"grok"
|
||||
],
|
||||
"prompt": {
|
||||
"mode": "argv",
|
||||
"separator": "--"
|
||||
},
|
||||
"bypass": [
|
||||
"--permission-mode",
|
||||
"bypassPermissions"
|
||||
],
|
||||
"homepageUrl": "https://x.ai/cli",
|
||||
"faviconDomain": "x.ai"
|
||||
}
|
||||
@@ -0,0 +1,19 @@
|
||||
{
|
||||
"id": "hermes",
|
||||
"label": "Hermes",
|
||||
"detect": [
|
||||
"hermes"
|
||||
],
|
||||
"args": [
|
||||
"--tui"
|
||||
],
|
||||
"prompt": {
|
||||
"mode": "after-start",
|
||||
"delayMs": 3000
|
||||
},
|
||||
"bypass": [
|
||||
"--yolo"
|
||||
],
|
||||
"homepageUrl": "https://hermes-agent.nousresearch.com/docs/",
|
||||
"faviconDomain": "nousresearch.com"
|
||||
}
|
||||
@@ -0,0 +1,12 @@
|
||||
{
|
||||
"id": "kilo",
|
||||
"label": "Kilocode",
|
||||
"detect": [
|
||||
"kilo"
|
||||
],
|
||||
"prompt": {
|
||||
"mode": "after-start",
|
||||
"delayMs": 3000
|
||||
},
|
||||
"homepageUrl": "https://kilo.ai/docs/cli"
|
||||
}
|
||||
@@ -0,0 +1,17 @@
|
||||
{
|
||||
"id": "kimi",
|
||||
"label": "Kimi",
|
||||
"detect": [
|
||||
"kimi",
|
||||
"kimi-code"
|
||||
],
|
||||
"prompt": {
|
||||
"mode": "after-start",
|
||||
"delayMs": 3000
|
||||
},
|
||||
"bypass": [
|
||||
"--yolo"
|
||||
],
|
||||
"homepageUrl": "https://www.kimi.com/code/docs/en/kimi-code-cli/getting-started.html",
|
||||
"faviconDomain": "moonshot.cn"
|
||||
}
|
||||
@@ -0,0 +1,19 @@
|
||||
{
|
||||
"id": "kiro",
|
||||
"label": "Kiro",
|
||||
"detect": [
|
||||
"kiro-cli"
|
||||
],
|
||||
"args": [
|
||||
"chat",
|
||||
"--tui"
|
||||
],
|
||||
"prompt": {
|
||||
"mode": "after-start",
|
||||
"delayMs": 3000
|
||||
},
|
||||
"bypass": [
|
||||
"--trust-all-tools"
|
||||
],
|
||||
"homepageUrl": "https://kiro.dev/docs/cli/"
|
||||
}
|
||||
@@ -0,0 +1,13 @@
|
||||
{
|
||||
"id": "mimo-code",
|
||||
"label": "MiMo Code",
|
||||
"detect": [
|
||||
"mimo"
|
||||
],
|
||||
"prompt": {
|
||||
"mode": "flag",
|
||||
"flag": "--prompt"
|
||||
},
|
||||
"homepageUrl": "https://mimo.xiaomi.com/coder",
|
||||
"faviconDomain": "mimo.xiaomi.com"
|
||||
}
|
||||
@@ -0,0 +1,18 @@
|
||||
{
|
||||
"id": "mistral-vibe",
|
||||
"label": "Mistral Vibe",
|
||||
"detect": [
|
||||
"vibe",
|
||||
"mistral-vibe"
|
||||
],
|
||||
"prompt": {
|
||||
"mode": "after-start",
|
||||
"delayMs": 3000
|
||||
},
|
||||
"bypass": [
|
||||
"--agent",
|
||||
"auto-approve"
|
||||
],
|
||||
"homepageUrl": "https://github.com/mistralai/mistral-vibe",
|
||||
"faviconDomain": "mistral.ai"
|
||||
}
|
||||
@@ -0,0 +1,19 @@
|
||||
{
|
||||
"id": "muse",
|
||||
"label": "Muse",
|
||||
"detect": [
|
||||
"muse"
|
||||
],
|
||||
"args": [
|
||||
"--trust-workspace"
|
||||
],
|
||||
"prompt": {
|
||||
"mode": "after-start",
|
||||
"delayMs": 3000
|
||||
},
|
||||
"bypass": [
|
||||
"--yolo"
|
||||
],
|
||||
"homepageUrl": "https://dev.meta.ai/docs/muse-code",
|
||||
"faviconDomain": "dev.meta.ai"
|
||||
}
|
||||
@@ -0,0 +1,11 @@
|
||||
{
|
||||
"id": "omp",
|
||||
"label": "Oh My Pi (OMP)",
|
||||
"detect": [
|
||||
"omp"
|
||||
],
|
||||
"prompt": {
|
||||
"mode": "argv"
|
||||
},
|
||||
"homepageUrl": "https://omp.sh"
|
||||
}
|
||||
@@ -0,0 +1,14 @@
|
||||
{
|
||||
"id": "openclaude",
|
||||
"label": "OpenClaude",
|
||||
"detect": [
|
||||
"openclaude"
|
||||
],
|
||||
"prompt": {
|
||||
"mode": "argv"
|
||||
},
|
||||
"bypass": [
|
||||
"--dangerously-skip-permissions"
|
||||
],
|
||||
"homepageUrl": "https://openclaude.gitlawb.com/"
|
||||
}
|
||||
@@ -0,0 +1,13 @@
|
||||
{
|
||||
"id": "openclaw",
|
||||
"label": "OpenClaw",
|
||||
"detect": [
|
||||
"openclaw"
|
||||
],
|
||||
"prompt": {
|
||||
"mode": "after-start",
|
||||
"delayMs": 3000
|
||||
},
|
||||
"homepageUrl": "https://github.com/openclaw/openclaw",
|
||||
"faviconDomain": "openclaw.ai"
|
||||
}
|
||||
@@ -0,0 +1,12 @@
|
||||
{
|
||||
"id": "opencode",
|
||||
"label": "OpenCode",
|
||||
"detect": [
|
||||
"opencode"
|
||||
],
|
||||
"prompt": {
|
||||
"mode": "flag",
|
||||
"flag": "--prompt"
|
||||
},
|
||||
"homepageUrl": "https://opencode.ai/docs/cli/"
|
||||
}
|
||||
@@ -0,0 +1,15 @@
|
||||
{
|
||||
"id": "opencode2",
|
||||
"label": "OpenCode 2",
|
||||
"detect": [
|
||||
"opencode2"
|
||||
],
|
||||
"args": [
|
||||
"--standalone"
|
||||
],
|
||||
"prompt": {
|
||||
"mode": "flag",
|
||||
"flag": "--prompt"
|
||||
},
|
||||
"homepageUrl": "https://opencode.ai/v2/docs/"
|
||||
}
|
||||
@@ -0,0 +1,11 @@
|
||||
{
|
||||
"id": "pi",
|
||||
"label": "Pi",
|
||||
"detect": [
|
||||
"pi"
|
||||
],
|
||||
"prompt": {
|
||||
"mode": "argv"
|
||||
},
|
||||
"homepageUrl": "https://pi.dev"
|
||||
}
|
||||
@@ -0,0 +1,13 @@
|
||||
{
|
||||
"id": "prime-agent",
|
||||
"label": "Prime Agent",
|
||||
"detect": [
|
||||
"prime-agent"
|
||||
],
|
||||
"prompt": {
|
||||
"mode": "argv",
|
||||
"separator": "--"
|
||||
},
|
||||
"homepageUrl": "https://github.com/PrimeIntellect-ai/prime-agent",
|
||||
"faviconDomain": "primeintellect.ai"
|
||||
}
|
||||
@@ -0,0 +1,17 @@
|
||||
{
|
||||
"id": "qwen-code",
|
||||
"label": "Qwen Code",
|
||||
"detect": [
|
||||
"qwen"
|
||||
],
|
||||
"prompt": {
|
||||
"mode": "after-start",
|
||||
"delayMs": 3000
|
||||
},
|
||||
"bypass": [
|
||||
"--approval-mode",
|
||||
"yolo"
|
||||
],
|
||||
"homepageUrl": "https://github.com/QwenLM/qwen-code",
|
||||
"faviconDomain": "qwenlm.github.io"
|
||||
}
|
||||
@@ -0,0 +1,16 @@
|
||||
{
|
||||
"id": "rovo",
|
||||
"label": "Rovo Dev",
|
||||
"detect": [
|
||||
"rovo"
|
||||
],
|
||||
"prompt": {
|
||||
"mode": "after-start",
|
||||
"delayMs": 3000
|
||||
},
|
||||
"bypass": [
|
||||
"--yolo"
|
||||
],
|
||||
"homepageUrl": "https://support.atlassian.com/rovo/docs/install-and-run-rovo-dev-cli-on-your-device/",
|
||||
"faviconDomain": "atlassian.com"
|
||||
}
|
||||
@@ -0,0 +1,16 @@
|
||||
{
|
||||
"id": "trae",
|
||||
"label": "Trae",
|
||||
"detect": [
|
||||
"traecli"
|
||||
],
|
||||
"prompt": {
|
||||
"mode": "argv",
|
||||
"separator": "--"
|
||||
},
|
||||
"bypass": [
|
||||
"--yolo"
|
||||
],
|
||||
"homepageUrl": "https://docs.trae.cn/cli_get-started-with-trae-cli",
|
||||
"faviconDomain": "www.trae.cn"
|
||||
}
|
||||
@@ -0,0 +1,17 @@
|
||||
{
|
||||
"id": "zcode",
|
||||
"label": "ZCode",
|
||||
"detect": [
|
||||
"zcode"
|
||||
],
|
||||
"prompt": {
|
||||
"mode": "after-start",
|
||||
"delayMs": 3000
|
||||
},
|
||||
"bypass": [
|
||||
"--mode",
|
||||
"yolo"
|
||||
],
|
||||
"homepageUrl": "https://zcode.z.ai/en/docs",
|
||||
"faviconDomain": "zcode.z.ai"
|
||||
}
|
||||
Reference in New Issue
Block a user