太刀local-first · terminal-native · built on MCP

A local-first orchestration agent.

dokoro gives it memory. TachiBot gives it better judgment. TachiBot orchestrates models; tachi-agent orchestrates work. The default brain runs 100% local — no API keys, no cloud cost.

Chat with bare tachi-agent, run skill bundles with --skill <name>, or deploy it as an unattended daemon with a persistent queue, recurring schedules, and per-task hearts.

tachi-agent — zsh
# one line installs the whole stack
$ curl -fsSL https://bypawel.github.io/tachi-agent/install.sh | sh

$ tachi-agent
tachi › /jury "Is this design thread-safe?"
  → recall · dokoro_session_recall
  → tool · tachibot_jury
  → log · trace saved to dokoro
Node ≥ 22 + Ollama if missing, then tachi-agent, dokoro, tachibot-mcp + setup wizard
What it is

The loop lives in the client — never inside an MCP server.

That keeps the hub small, embeddable, and free of nested-loop coupling — no agent-inside-a-server recursion, no hidden control flow on the wire. Every front-end just calls orchestrator.run(task), and the core depends on three interfaces and nothing else.

CLIREPLTelegramSlackClaude CodeGatewayOpenClaw
The three seams

Pluggable without a plugin framework.

The core depends only on three interfaces. Swap any one without touching the orchestrator. The seams in depth →

the brain
Driver

Default Qwen2.5 via Ollama, fully local. Pick a heart with TACHI_DRIVER — or register your own via registerDriver. Each queued task can carry its own driver. One interface, any brain.

TACHI_DRIVER=ollama · hermes · openai · openrouter
the tools
ToolHost

dokoro + tachibot MCP servers merged and namespaced. Add servers via config, not code — tools just appear. The agent ships a small curated allowlist.

${server}_${tool}
the memory
Memory

dokoro session recall and log wrap each run. Swap the backend or disable persistence entirely — the orchestrator is stateless between runs.

DokoroMemory
Interactive chat & skills

A REPL by default. Skill bundles on demand.

Multi-turn sessions
The prompt shows the active state: tachi [driver·skill] ›. Prior exchanges carry into each run so follow-ups keep their referent; /reset starts fresh. History persists at ~/.tachi-agent/repl_history.
Skill bundles
A Markdown file in .tachi/skills/ (or TACHI_SKILLS_DIR) — frontmatter sets name, description, tool allowlist and driver; the body becomes the system prompt. Ready-made recipes: repo-review, researcher, nightly-digest, fact-checker. Skills →
Commands everywhere
The same surface in the REPL and Telegram. Full command table →/help/tools/model/status/driver/skill/reset/jury/search/think/task/schedule/exit
chat quickstartshell
1# open interactive chat (default — no args needed)
2tachi-agent
3
4# start with a specific driver or skill
5tachi-agent --driver openai
6tachi-agent --skill researcher "explain the CAP theorem trade-offs"
7
8# inside the REPL
9/skill repo-review
10/driver openai
11/jury "Is this design thread-safe?"
Roadmap

From core to swarm.

  1. L0 · coreOrchestrator + seamsThe ReAct hub and the Driver / ToolHost / Memory interfaces, fully tested with mocks — no network needed.shipped
  2. L1 · adaptersReal brains, tools, memoryOllamaDriver (Qwen2.5, native /api/chat) + HermesDriver via a driver registry; McpToolHost (dokoro + tachibot over stdio); DokoroMemory; a CLI.shipped
  3. L2 · front-endsTalk to it from anywhereCLI, REPL, Telegram, Slack (Socket Mode), Claude Code via a run_agent MCP server, an HTTP/SSE Gateway, and the OpenClaw bridge.shipped
  4. L2.5 · daemonLong-running, attachableThin-client attach, session handoff, durable event sequence, buffered replay, refcount-aware TTL/GC, graceful drain — and a UnifiedClient that makes local and daemon execution interchangeable.shipped
  5. L3 · swarmFan out, then synthesizeN role-specialized agents in parallel, merged by a synthesizer. Bounded concurrency, quorum warnings, per-member memory isolation. Swarm →shipped
  6. L4 · standaloneUnattended operationCrash-safe task queue with retry/backoff, recurring schedules, per-task multi-heart drivers, Telegram/Slack notifications, durable JSONL run logs, queue/run-log CLI. Standalone →shipped
  7. L5 · chatInteractive chat, skills, service installBare tachi-agent opens a REPL; unified /commands across REPL and Telegram; skill bundles; tachi-agent service install (macOS launchd); tachi-agent doctor preflight.shipped · v0.4.0
  8. L6 · installOne command, whole stackInstalls Node ≥ 22 + Ollama if missing, then tachi-agent + dokoro + tachibot-mcp, and runs the setup wizard: local Ollama or one OpenRouter key for agent and council, MCP wiring, GATEWAY_TOKEN, optional daemon — config in ~/.tachi/.env (chmod 600).shipped · v0.5.0
  9. L7 · memoryA real multi-turn agentREPL and Telegram chats carry prior turns into every run, locally and through the daemon (POST /runs accepts history); windows are capped and marked as data, never instructions. run_agent gains driver, skill and systemPrompt.new · v0.6.0
The three layers

Built from the Tachi stack.

Memory, runtime, and reasoning — each independently replaceable; none depends on the internals of another.

MIT · local-first · built on MCP. Provider keys and the memory backend live behind the MCP wire (tachibot-mcp, dokoro), so the MIT client and the servers it calls compose cleanly.