Unleash Multi-agent Orchestration.
⠀⠀⠀⠀⠀⠀⠀⢀⣠⣤⣠⣶⠚⠛⠿⠷⠶⣤⣀⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⢀⣴⠟⠉⠀⠀⢠⡄⠀⠀⠀⠀⠀⠉⠙⠳⣄⠀⠀⠀⠀⠀⠀⠀⠀
⠀⠀⠀⢀⡴⠛⠁⠀⠀⠀⠀⠘⣷⣴⠏⠀⠀⣠⡄⠀⠀⢨⡇⠀⠀⠀⠀⠀⠀⠀ ███████╗███████╗████████╗ ██████╗██╗ ██╗
⠀⠀⠀⠺⣇⠀⠀⠀⠀⠀⠀⠀⠘⣿⠀⠀⠘⣻⣻⡆⠀⠀⠙⠦⣄⣀⠀⠀⠀⠀ ██╔════╝██╔════╝╚══██╔══╝██╔════╝██║ ██║
⠀⠀⠀⢰⡟⢷⡄⠀⠀⠀⠀⠀⠀⢸⡄⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠉⢻⠶⢤⡀ █████╗ █████╗ ██║ ██║ ███████║
⠀⠀⠀⣾⣇⠀⠻⣄⠀⠀⠀⠀⠀⢸⡇⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠸⣀⣴⣿ ██╔══╝ ██╔══╝ ██║ ██║ ██╔══██║
⠀⠀⢸⡟⠻⣆⠀⠈⠳⢄⡀⠀⠀⡼⠃⠀⠀⠀⠀⠀⠀⠀⠀⠀⠶⠶⢤⣬⡿⠁ ██║ ███████╗ ██║ ╚██████╗██║ ██║
⠀⢀⣿⠃⠀⠹⣆⠀⠀⠀⠙⠓⠿⢧⡀⠀⢠⡴⣶⣶⣒⣋⣀⣀⣤⣶⣶⠟⠁⠀ ╚═╝ ╚══════╝ ╚═╝ ╚═════╝╚═╝ ╚═╝
⠀⣼⡏⠀⠀⠀⠙⠀⠀⠀⠀⠀⠀⠀⠙⠳⠶⠤⠵⣶⠒⠚⠻⠿⠋⠁⠀⠀⠀⠀
⢰⣿⡇⠀⠀⠀⠀⠀⠀⠀⣆⠀⠀⠀⠀⠀⠀⠀⢠⣿⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ Unleash Multi-agent Orchestration
⢿⡿⠁⠀⠀⠀⠀⠀⠀⠀⠘⣦⡀⠀⠀⠀⠀⠀⢸⣿⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⠻⣷⡄⠀⠀⠀⠀⣿⣧⠀⠀⠀⠀⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⢷⡀⠀⠀⠀⢸⣿⡄⠀⠀⠀⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠸⣿⠇⠀⠀⠀⠀⠀⠀⠀⠀
Fetch is a self-hosted, multi-agent coding orchestrator controlled from WhatsApp. It routes work to CLI harnesses (Copilot, Claude, Gemini, OpenCode, Codex) inside a sandboxed Docker container and gives you a Go TUI for ops.
- Semantic Memory — Hybrid recall using OpenAI vector embeddings + BM25 keyword matching.
- Dynamic Compaction — Token-based context window management to prevent LLM overflow.
- Safety Loops — Automatic bailout for infinite tool loops with model-specialized summaries.
- Resilient Threads — Fixed self-reply loops for seamless WhatsApp thread interactions.
- Persistent Safety — State-backed rate limiting and cautious mode confirmation gates.
Install and bootstrap Fetch in one flow:
# 1) Install Fetch CLI
curl -fsSL https://raw.githubusercontent.com/Traves-Theberge/Fetch/main/scripts/install.sh | bash
# 2) Ensure PATH includes ~/.local/bin
export PATH="$HOME/.local/bin:$PATH"
# 3) Install prerequisites + harness CLIs
fetch setup --install-prereqs --install-gh-cli --install-harnesses
# 4) Configure .env
nano ~/.fetch/repo/.env
# 5) Start services and open manager TUI
fetch up
fetch tuiHost requirements:
- Docker + Docker Compose
- Node.js 20+ and npm
- Go 1.21+ (for local manager builds)
- GitHub CLI (
gh) for GitHub/Copilot workflows
Runtime requirements:
OPENROUTER_API_KEYOWNER_PHONE_NUMBER(E.164 format, e.g.15551234567)
Optional but common:
GH_TOKENfor GitHub repo operationsENABLE_COPILOT=falseif you want GitHub ops without Copilot harness
- Run
fetch self doctorand confirm no missing prerequisites. - Open
fetch tuiand verify harness auth/install status. - Open
fetch tui->Setup WhatsAppto start pairing (QR generation is on-demand from this screen). - Send
/statusand/versionfrom WhatsApp to verify end-to-end health. - Open
http://localhost:8765/docsto verify docs/status server availability.
Notes:
- Docs/status are served from the bridge process and are expected to remain reachable during setup mode.
- If
OWNER_PHONE_NUMBERis missing, WhatsApp auth/bridge startup will not complete; set it in.envand restart.
Service lifecycle:
fetch up
fetch down
fetch down --all
fetch restart
fetch status
fetch logs
fetch tuiHow down works:
fetch downstops and removes this Fetch stack's containers and network (docker compose down --remove-orphans).fetch down -valso removes this stack's volumes.fetch down --alladditionally removes legacy fixed-name containers from older versions (fetch-bridge,fetch-kennel,fetch-searxng,searxng).
Service command targeting:
fetch up/down/status/logsnow operate on the Fetch repo in your current working directory when applicable.- This prevents controlling a different installed repo stack by accident.
Install/update management:
fetch self version
fetch self update
fetch self update --channel beta
fetch self pin v0.0.95
fetch uninstallRelease note for maintainers:
release-manifest.jsonis tag-release CI managed. Preferred release flow is tag push (vX.Y.Z) and letting.github/workflows/release.ymlupdate channels/metadata onmain.
Config and harness management:
fetch config validate
fetch config doctor
fetch harness status
fetch harness install all
fetch harness uninstall github- GitHub harness compatibility supports both:
- built-in
gh copilotcommand (newer GitHub CLI) github/gh-copilotextension (legacy path)
- built-in
- If GitHub auth is missing, run
gh auth loginon host and re-checkfetch harness status. - If
GH_TOKENis stale but hostghauth is still valid, Fetch now falls back to mounted~/.config/ghauth inside kennel. - Use
fetch setup --install-harnessesafter changing harness enable flags. workspace_synconly reports success when a push/publication is actually verifiable; otherwise it returns a clear actionable error.- Tool exposure is now intent-gated per turn (deterministic + heuristic), so conversational asks keep tool schemas minimized unless the request is clearly action-oriented.
- Current
npm auditmay report high-severity findings from thewhatsapp-web.jstransitive tree (archiver/glob/minimatch). - This is an upstream dependency-chain issue; there is no safe non-breaking
npm audit fixpath in the current package line. - Track this in release notes/changelog and re-audit after each
whatsapp-web.jsupdate.
Fetch now includes workflow + cron orchestration tools in the agent loop.
Use this three-layer model to decide what to ask for:
Delegation Layer(open-ended implementation):task_create,task_status,task_cancel,task_respondInteractive Layer(live exploration/research):web_search,web_fetch,browser_open,browser_snapshot,browser_action,browser_screenshotExecution Layer(deterministic pass/fail steps):app_run,app_test,browser_test
Workflow + cron primarily automate the Execution Layer:
workflow_create,workflow_list,workflow_run,workflow_deletecron_create,cron_list,cron_delete,cron_run- Deterministic execution helpers:
app_run,app_test,browser_test
Safety notes:
/stopandtask_cancelnow terminate active harness processes (not just task state).- Workflow definitions are validated at creation time.
- Workflow step tools cannot include recursive orchestration tools (
workflow_*/cron_*) or task-interaction tools (ask_user,report_progress). - Workflow steps should be deterministic; use delegation tools for open-ended coding tasks.
- Dangerous tools are policy-gated by autonomy level in the registry (supervised blocks dangerous actions; cautious requires explicit confirmation).
- Tool arguments are redacted before logging/persistence for sensitive keys (token/apiKey/password/secret-like fields).
- Agent/tool safety helpers now have direct unit coverage for retry classification, error sanitization, and progress rewrite output guards.
- Workflow/cron manager tests now cover cron validation, success/failure metadata updates, and startup catch-up behavior for overdue jobs.
Example asks from WhatsApp:
- "Create a nightly workflow that runs tests and syncs to GitHub."
- "Schedule that workflow at
0 3 * * *UTC." - "Run app tests now in my active workspace."
- "Open https://example.com and verify the login button exists."
Fetch includes workspace + git tools for day-to-day project control:
workspace_list,workspace_select,workspace_statusworkspace_create,workspace_delete,workspace_publish,workspace_syncfile_delete,folder_delete
Safety notes:
- Destructive operations are autonomy-gated and can require confirmation depending on mode.
workspace_syncand publish flows depend on valid git/remote configuration.
Example asks from WhatsApp:
- "List my workspaces and switch to api-server."
- "Show git status and recent commits for this project."
- "Sync my current workspace to GitHub."
- "Delete
tmp/output.logfrom this workspace."
Task delegation is for open-ended work that needs judgment and iteration:
task_create,task_status,task_cancel,task_respond- Interaction helpers used by the loop:
ask_user,report_progress
Safety notes:
/stopandtask_cancelterminate active harness execution, not just task state.- Follow-ups (
task_respond) attach to the currently running task context.
Example asks from WhatsApp:
- "Use codex to add tests for auth middleware."
- "What is the current task status?"
- "Cancel the active task now."
- "Tell the task to also update docs and JSDoc."
Fetch includes GitHub repo/PR/issue/CI helpers:
github_pr_create,github_pr_list,github_pr_viewgithub_issue_create,github_issue_listgithub_branch_create,github_action_status,github_search_repos
Safety notes:
- Requires host auth (
gh auth login) and usuallyGH_TOKENfor API-backed operations. - Repo-scoped actions use the active workspace repo unless you pass an explicit
owner/repo.
Example asks from WhatsApp:
- "Create a draft PR for this workspace."
- "List open PRs for
owner/repo." - "Create an issue titled 'Fix flaky retry logic'."
- "Show recent GitHub Actions status."
Interactive tools are for exploration and live state inspection:
- Web:
web_search,web_fetch - Browser session:
browser_open,browser_snapshot,browser_action,browser_screenshot - Browser assertion runner (deterministic execution layer):
browser_test
Safety notes:
- Browser tools run inside Kennel and return structured snapshots for deterministic follow-up actions.
browser_testis for pass/fail assertions; usebrowser_open+browser_actionwhen you need exploratory interaction.
Example asks from WhatsApp:
- "Search for TypeScript Zod validation best practices."
- "Fetch https://example.com/docs and summarize the auth section."
- "Open https://example.com, click login, and take a screenshot."
- "Run a browser test on https://example.com and confirm 'Login' appears."
Fetch can persist per-session response style from natural language:
- "be brief"
- "be detailed"
- "be direct"
- "be conversational"
- "use fewer emojis"
These preferences affect conversational capability/tool-inventory responses and carry across future turns in the same session.
Fetch now uses a shared structured-response pipeline before sending WhatsApp text:
ResponseEnvelopecontract (fetch-app/src/agent/envelope.ts) for normalized response shapecomposeWhatsAppResponserenderer (fetch-app/src/agent/composer.ts) for final user-facing copy- shared formatting/chunking (
fetch-app/src/agent/whatsapp-format.ts) for mobile-safe delivery
This same path is used for:
- normal conversational/tool responses
- deterministic NL command responses that return envelopes
- proactive task lifecycle updates (
started,progress,file_op,question,completed,failed)
These commands bypass normal LLM/tool planning and are handled deterministically:
/stop(/cancel)/undo(/undo all)/clear(/reset)/help(/h,/?)/status(/st)/version(/v)/usage(/u)/trust(list,add,remove)
Safety notes:
- Use these when you need immediate control, even if the LLM path is unavailable.
- Natural-language prompts like "what can you do?" stay conversational through the normal LLM path; use
/helpfor deterministic command catalog output.
Fetch runs as a three-container stack plus a host manager:
fetch-bridge(Node.js/TypeScript): WhatsApp client + orchestration layerfetch-kennel(Ubuntu): sandboxed execution for harness CLIs + browser toolingfetch-searxng: self-hosted web search providerfetch-manager(Go TUI): host-side operations and auth/setup flows
- Single active run per session with explicit lifecycle phases (
queued,preparing,planning,tool_execution,responding, terminal state). - Prompt mode selection per turn (
minimalfor short conversational turns,fullfor execution-heavy turns). - Interrupt path for
/stopand/cancelnow aborts active in-flight runs, not only delegated tasks. - Two memory tiers are persisted in session metadata:
shortTermSummaryfor immediate continuity across nearby turns.durableNotesfor stable preferences/decisions that should survive compaction.
- Semantic Memory Recall — Uses vector embeddings for meaning-aware retrieval.
- LLM Tool Loop Bailout — Hard safety break after max tool iterations per turn.
- Model Specialization — Uses dedicated
SUMMARY_MODELfor complex turn finalization.
fetch-app/: bridge service (TypeScript)manager/: Go manager/TUIkennel/: Docker sandbox imagescripts/: installer, setup, and host management scriptsdocs/: detailed setup, architecture, API, and operations guides
Bridge:
cd fetch-app
npm install
npm run dev
npm run build
npm run lint
npm run test:run
npx vitest run --coveragenpm run lint performs strict TypeScript static checks via tsc --noEmit.
Manager:
cd manager
go build -o fetch-manager .
./fetch-managerDocker:
./deploy.sh
docker compose up -d
docker compose downCore docs:
- Setup Guide
- Install, Uninstall & Update
- TUI Guide
- Configuration
- Commands
- Workflow Automation
- Architecture
- Harness System
- API Reference
- Testing Guide
- Changelog
MIT. See LICENSE.