Open-source AI Agent LEGO Platform — Build, manage, and orchestrate your own multi-agent team.
Anuki gives you the building blocks. You build the team. Three core agents ship out of the box — use them to create unlimited specialized agents, enforce governance rules, and build a team that learns and remembers.
Niche: The only multi-agent framework that combines production infrastructure with response-level verification. We borrowed patterns from microservices (circuit breakers), message queues (pending completions), and operations engineering (health watchdog, graceful shutdown) — and applied them to AI agents. Your agents self-heal and survive restarts. And when an agent says "this function is unused", a Stop hook runs
grepto check — if the claim is false, the response gets blocked. No other framework verifies what agents claim, not just what they do.
Most multi-agent frameworks require you to define agents in code. Anuki takes a different approach: agents create agents. You describe what you need in natural language, and the system builds it — complete with identity, personality, tools, safety rules, and memory.
What makes it different:
| Feature | Anuki | CrewAI | LangGraph | AutoGen | Dify |
|---|---|---|---|---|---|
| Create agents via natural language | Yes (ENKI) | No | No | No | Partial |
| Persistent agent identity (soul files) | 7+ file types | No | No | No | No |
| Cognitive memory (3 layers) | Yes | Partial | No | No | No |
| Response-level claim verification | Yes | No | No | No | No |
| Mechanical rule enforcement (SSOT) | Yes | No | No | No | No |
| Crash recovery (pending completions) | Yes | No | Partial | No | No |
| Circuit breaker per agent | Yes | No | No | No | No |
| Health watchdog + orphan cleanup | Yes | No | No | No | No |
| Inter-agent messaging + loop detection | Yes | Partial | Partial | Partial | No |
| Multi-LLM provider support | Yes | Yes | Yes | Yes | Yes |
| Zero-dependency frontend | Yes | No | No | No | No |
For a deeper feature-by-feature analysis, see FEATURES.md.
Most AI agent frameworks focus on the AI part — prompting, memory, tool use. Anuki also brings production infrastructure to the agent world: patterns borrowed from microservices (circuit breakers), message queues (pending completions), and operations engineering (health watchdog, orphan cleanup, graceful shutdown). These aren't AI innovations — they're battle-tested engineering patterns applied to agents for the first time.
AI agent platforms have a dirty secret: they break in ways that only engineers can fix. Agent stuck in a loop? Kill the process. System crashed? Lost your data. Agent hallucinated? Hope you noticed.
Anuki eliminates these failure modes at the system level — so you don't have to know they exist:
| What goes wrong | What other frameworks do | What Anuki does |
|---|---|---|
| Agent gets stuck in a loop | Nothing — you debug it | Loop detection kills it automatically |
| Agent claims something false | Nothing — you trust it | Stop hook verifies the claim before you see it |
| System crashes mid-conversation | Data lost | Atomic writes protect state, pending completions deliver your response |
| An agent keeps failing | Errors pile up | Circuit breaker disables it, tests periodically, auto-recovers |
| Process becomes a zombie | You open terminal and kill it | Health watchdog cleans it up every 60 seconds |
| You disconnect mid-stream | Output lost | Resume buffer replays what you missed |
You don't need to understand any of this. npm install, npm start, open browser. The system handles the rest. Every mistake you could make as a beginner — the platform already prevents it.
| Agent | Role | How It Works |
|---|---|---|
| PROTOS | Default Agent & Prompt Architect | The first agent you talk to. Handles general requests and helps you craft optimal prompts for specialized agents. Routing to ENKI/UTU happens automatically at the system level via auto-router. |
| ENKI | Agent Creator | Tell ENKI what you need in plain language. It creates complete agents with soul files, memory, safety rules — everything. New agents appear in your sidebar immediately. |
| UTU | Rule Guardian | The designated authority on governance. UTU creates and modifies rules in rules/. Rules propagate automatically to all affected agents via the SSOT system. |
Auto-routing: You don't need to manually switch agents. If you tell PROTOS "create a research agent", the system detects the intent and routes to ENKI automatically.
Prerequisites: Node.js 18+ and one of the following LLM backends:
| Provider | What you need | Best for |
|---|---|---|
| Claude Code CLI (recommended) | npm install -g @anthropic-ai/claude-code + Anthropic API key |
Full agentic mode — tool use, file editing, session resume |
| OpenAI API | OpenAI API key | Agentic mode with tool use (GPT-4o / GPT-4o-mini) |
| Ollama | Ollama installed locally | Free local models with tool use (Llama 3.1+, Mistral, Qwen, etc.) |
git clone https://github.com/cylonmolting-creator/anuki.git
cd anuki
cp .env.example .env # Configure your LLM provider
npm install
npm startOpen http://localhost:3000 in your browser. Start chatting with PROTOS — try "create a code review agent" or ask anything.
.env — Choose your LLM provider:
# Pick one provider (default: claude)
LLM_PROVIDER=claude
# Claude (recommended — full agentic mode)
# CLAUDE_PATH=claude
# ANTHROPIC_API_KEY=sk-ant-...
# OpenAI (agentic mode with tool use)
# OPENAI_API_KEY=sk-...
# OPENAI_MODEL=gpt-4o
# Ollama (free local models)
# OLLAMA_URL=http://localhost:11434
# OLLAMA_MODEL=llama3.1Claude Code CLI (recommended — full agentic mode)
- Install Claude Code CLI:
npm install -g @anthropic-ai/claude-code - Get an API key from Anthropic Console
- Run
claudeonce to authenticate (it opens a browser) - Edit
.env:LLM_PROVIDER=claude
- Start Anuki:
npm start
All providers support tool use, but Claude adds session resume across restarts and native file editing via Claude Code CLI. If unsure, start here.
OpenAI API (agentic mode with GPT-4o)
- Get an API key from OpenAI Platform
- Edit
.env:LLM_PROVIDER=openai OPENAI_API_KEY=sk-... OPENAI_MODEL=gpt-4o # or gpt-4o-mini for lower cost
- Start Anuki:
npm start
OpenAI agents have full tool use — file reading, writing, editing, grep, bash commands. Multi-turn agentic loop with 15-turn limit. Session resume is not supported (stateless). Also works with OpenAI-compatible endpoints (DeepSeek, Groq, Together AI) via OPENAI_BASE_URL.
Ollama (free, local, no API key needed)
- Install Ollama from ollama.ai
- Pull a model:
ollama pull llama3.1(ormistral,qwen2.5,deepseek-v3, etc.) - Start Ollama:
ollama serve - Edit
.env:LLM_PROVIDER=ollama OLLAMA_MODEL=llama3.1 # must match the model you pulled
- Start Anuki:
npm start
Ollama runs entirely on your machine — no API key, no cloud, no cost. Tool-capable models (Llama 3.1+, Mistral, Qwen 2.5, DeepSeek-v3, Command-R) get full agentic mode with tool use. Other models run in chat-only mode.
config.json — Advanced settings (most users won't need to touch this):
| Section | Key fields | What it controls |
|---|---|---|
port |
3000 |
HTTP server port |
agent |
provider, model, providers.* |
Default LLM, model name, per-provider config |
memory |
decayRate, reflectionHour |
Memory decay speed (0.05 = 5%/day), reflection schedule |
security.rateLimit |
interAgent, websocket |
Rate limits for agent messaging and WebSocket clients |
logging |
level, maxSize, maxFiles |
Log verbosity, rotation size/count |
Every agent has a set of markdown files that define its complete persona:
| File | Purpose |
|---|---|
IDENTITY.md |
Who the agent is — name, role, expertise |
SOUL.md |
Personality, values, communication style |
MISSION.md |
Goals, priorities, what it handles |
TOOLS.md |
Available capabilities and how to use them |
SAFETY.md |
Security rules (auto-generated from SSOT) |
CODE_PROTOCOL.md |
Code writing standards (for developer agents) |
PROMPT_PROFILE.md |
Model-specific hints and task routing triggers |
first_prompt.txt |
Initial instructions sent on first interaction (optional) |
Soul files are injected into the agent's system prompt at runtime. They persist across sessions — agents maintain consistent identity over time.
Three-layer memory system inspired by human cognition:
- Episodic — What happened (conversation events, interactions)
- Semantic — What is known (facts, user preferences, learned knowledge)
- Procedural — How to do things (workflows, processes, recipes)
Memory is indexed with TF-IDF for fast retrieval. Agents can store, search, and forget memories. A nightly reflection process distills episodic memories into semantic knowledge.
Rules aren't suggestions — they're mechanically enforced. The SSOT (Single Source of Truth) system guarantees that every agent receives and obeys the same rules, automatically.
Rules live in rules/*.md with YAML frontmatter:
---
id: 1
title: No destructive tests
severity: critical
applies_to: [all]
applies_to_tags: []
enforcement: [soul-safety-inject]
---
DELETE/PUT tests must never use real workspace or agent IDs.Run node scripts/build-rules.js — the generator reads all rules, filters by agent tags, and injects them into each agent's SAFETY.md. Idempotent. Tag-based. One source of truth.
Industry first. No other multi-agent framework audits agent responses for unverified claims.
Every framework enforces rules at the tool call boundary — before a file edit or command runs. But agents can make false claims in plain text without triggering any tool. "This is unused." "Not found." "Task complete." — all without evidence.
Anuki's Stop hook system closes this gap. After every agent response, a deterministic shell hook scans the output:
Agent writes: "This module is unused, we can delete it."
↓
Stop hook fires → detects "unused" → no file:line evidence found
↓
Response BLOCKED → agent must verify and rewrite with proof
Stop hooks are auto-generated from SSOT rules — the same build-rules.js pipeline. Write a rule with stop_hook: true, and the enforcement is mechanical and automatic.
Two enforcement modes:
# Claim verification (default) — blocks claims without evidence
---
id: 5
title: Response audit — block unverified claims
enforcement: [stop-hook-audit, soul-safety-inject]
stop_hook: true
stop_patterns: [unused, dead code, not found, does not exist]
stop_mode: claim # blocks only when pattern found AND no evidence
---
# Behavioral enforcement — blocks forbidden patterns unconditionally
---
id: 6
title: Never ask the user questions
enforcement: [stop-hook-audit, soul-safety-inject]
stop_hook: true
stop_patterns: ["?", "do you want", "should I", "would you like"]
stop_mode: behavioral # blocks whenever pattern found, no evidence check
---Four enforcement layers, one pipeline:
| Layer | Hook Type | What It Catches |
|---|---|---|
| Before action | PreToolUse | Dangerous edits, destructive commands |
| After action | PostToolUse | File tracking, edit verification |
| Before response | UserPromptSubmit | Rule reminders |
| After response | Stop | Unverified claims, false completions |
Every hook enforcement system has a failure mode: what if the hooks themselves are broken? A bad hook can block all tool calls, creating a deadlock where the agent can't fix the problem because the broken hook blocks every attempt.
Anuki prevents this with 5 layers of protection:
| # | Layer | What It Does |
|---|---|---|
| 1 | Shell sanitization | sanitizeForShell() strips smart quotes, backticks, and characters that break shell syntax before hook generation |
| 2 | Regex escaping | escapeRegex() escapes ?, *, (, ) and other regex metacharacters in pattern values |
| 3 | Syntax validation | Every generated hook is tested with sh -n (parse-only) before deployment. Invalid hooks are skipped, not loaded |
| 4 | Atomic write | Settings file is written to a temp file, validated as JSON, then atomically renamed. A crash during write can't corrupt the live file |
| 5 | Session recovery | SessionStart hook runs build-rules.js on every new session, regenerating all hooks from source rules. Even if hooks are broken, the next session self-heals |
The deadlock scenario and why it can't happen:
Bad rule text (e.g., unescaped apostrophe: "the agent's response")
↓
sanitizeForShell() strips dangerous characters
↓
buildStopHookCommand() generates shell script
↓
sh -n validates syntax → FAIL? → hook SKIPPED (not loaded)
↓
Atomic write to settings.json → crash-safe
↓
Even if all above fail: next session's SessionStart regenerates from source
This happened in production (2026-04-13): smart quotes and unescaped apostrophes in rule text broke shell hooks, causing a deadlock. The fix was adding these 5 layers — now the same scenario produces a warning log and skips the bad hook instead of creating a deadlock.
Agents can delegate tasks to each other:
[AGENT_MESSAGE:ENKI:create a code review agent:90]
The message router handles delivery, timeout (default 300s), loop detection, and hop limits. Agents collaborate without user intervention.
When you talk to any agent, the system analyzes your message for intent patterns:
- "Create an agent" → Routes to ENKI
- "Add a rule" → Routes to UTU
- Mentions a specific agent name → Routes to that agent
- Everything else → Handled by current agent
No manual switching needed. The system figures out where your message should go.
Most agent frameworks assume a managed environment. Anuki runs as a persistent service and handles its own reliability:
Crash Recovery — Atomic file writes (temp + fsync + rename) protect all state files from corruption. Active jobs, sessions, and pending completions are persisted after every state change. No partial writes, no corrupted JSON.
Pending Completions — If the system restarts while an agent is mid-response, the response is queued and delivered to the user when they reconnect. No lost messages. Borrowed from message queue "exactly-once delivery" patterns.
Circuit Breakers — Per-agent failure tracking (CLOSED → OPEN → HALF_OPEN). After 5 failures, the circuit opens and stops routing work to that agent. Periodic recovery tests restore the agent automatically. Standard microservices pattern, first applied to AI agents.
Health Watchdog — Heartbeat monitoring, event loop lag detection, orphan process sweeps (every 60s), and periodic state checkpoints (every 30s). Detects stuck agents via kill(pid, 0) + zombie detection — not output timeouts (which would kill slow but working agents).
Graceful Shutdown — Safe-restart API waits for active agents to finish before restarting. No killed jobs, no lost state. SIGTERM/SIGINT handlers clean up processes, save state, and exit cleanly.
WebSocket Resume Buffer — If a client disconnects during streaming, output is buffered. When the client reconnects, the buffered response is replayed. No gaps in conversation.
Select ENKI from the sidebar:
"Create a code review agent that checks for security vulnerabilities and suggests fixes"
ENKI will:
- Propose agent details (name, role, personality, tools)
- Ask for your confirmation
- Create the full agent workspace with soul files, memory directory, and safety rules
- The new agent appears in your sidebar immediately
You can create any kind of agent — researcher, writer, analyst, developer, translator, anything.
Select UTU from the sidebar:
"Add a rule that all agents must cite sources when making factual claims"
UTU will:
- Create the rule file with proper YAML frontmatter in
rules/ - Validate against existing rules for conflicts
- Run the SSOT generator to propagate to all affected agents
anuki/
├── src/
│ ├── index.js # Entry point — 5-phase boot sequence
│ ├── agent/ # 23 modules
│ │ ├── executor.js # Brain — Claude CLI orchestration, session management
│ │ ├── workspace-manager.js # Soul file CRUD, agent workspaces
│ │ ├── auto-router.js # Intent detection and agent routing
│ │ ├── message-router.js # Inter-agent communication
│ │ ├── health-watchdog.js # Process monitoring, orphan cleanup
│ │ ├── supervisor.js # Circuit breakers, resource management
│ │ ├── compactor.js # Session compaction (bloat prevention)
│ │ ├── context-guard.js # Token limit monitoring (70/85/95%)
│ │ ├── task-planner.js # Multi-agent task decomposition
│ │ └── ... # Model resolver, lane queue, shared context
│ ├── memory/
│ │ ├── cognitive.js # 3-tier memory with TF-IDF indexing
│ │ └── reflection.js # Nightly memory distillation
│ ├── gateway/
│ │ ├── http-server.js # REST API (110+ endpoints)
│ │ ├── websocket-server.js # Streaming chat, resume support
│ │ └── cron.js # Scheduled jobs (reflection, decay, cleanup)
│ ├── channels/ # WebChat (extensible to Telegram, Discord, etc.)
│ ├── core/ # Config, security, storage, backup
│ └── utils/ # Logger, atomic writes, conversation manager
├── public/ # Single-file web UI (zero dependencies)
├── workspace/ # Per-agent workspaces (soul + memory + sessions)
├── rules/ # SSOT governance rules
├── scripts/ # Build tools (rule generator, etc.)
└── data/ # Runtime state (agents, jobs, conversations)
By the numbers: 58 source files, ~26K lines of JavaScript, 8 dependencies.
- Core Infrastructure — Logger, PID registry, config, security, storage, workspaces
- Memory & Intelligence — Cognitive memory, context guard, compactor, reflection, watchdog
- Agent Execution — Router, executor, supervisor, auto-router, skills, task planner
- Cron System — Reflection, memory decay, conversation cleanup
- Servers — HTTP + WebSocket, ready to accept connections
GET /api/health # System health (no auth required)
GET /api/agents # List all agents
POST /api/agents # Create agent
POST /api/agents/:id/message # Inter-agent message (body: {from, message})
GET /api/workspaces # List workspaces
GET /api/workspaces/:id/soul # Read agent's soul files
PUT /api/workspaces/:id/soul/:f # Update a soul file
GET /api/active-jobs # Running agent jobs
POST /api/safe-restart # Request graceful restart (queued if agents are busy)
GET /api/safe-restart/status # Check whether a queued restart has already fired
POST /api/backup/create # Create backup archive (workspace + data + config)
GET /api/backup/list # List all backups
GET /api/backup/stats # Backup statistics
GET /api/backup/:filename # Download a specific backup
Full API: 110+ REST endpoints covering agents, workspaces, conversations, memory, cron, skills, and inter-agent messaging.
Anuki is designed to stay up. When an agent requests a restart — to pick up a
code change, recover from a stuck state, or apply a new configuration — it
calls POST /api/safe-restart. Anuki waits until every running agent finishes
its current turn, saves state to disk, and then exits cleanly with code 0.
Anuki does not restart itself. It exits, and expects your process supervisor to bring it back up. This is the standard Node.js pattern and works identically on macOS, Linux, Windows (WSL), and inside Docker.
If you start Anuki bare with node src/index.js or npm start, the process
will exit and stay exited on the next safe-restart. For anything beyond a
dev session, wrap it in a supervisor:
npm install -g pm2
pm2 start src/index.js --name anuki --restart-delay 2000
pm2 save
pm2 startup # print the command to enable pm2 on bootCreate /etc/systemd/system/anuki.service:
[Unit]
Description=Anuki multi-agent platform
After=network.target
[Service]
Type=simple
User=youruser
WorkingDirectory=/path/to/anuki
ExecStart=/usr/bin/node src/index.js
Restart=always
RestartSec=2
Environment=NODE_ENV=production
[Install]
WantedBy=multi-user.targetThen:
sudo systemctl daemon-reload
sudo systemctl enable --now anuki
sudo journalctl -u anuki -f # follow logsA real Dockerfile and docker-compose.yml ship with the repo:
cp .env.example .env # configure your provider (see note below)
docker compose up --build # builds image + starts AnukiData persists across restarts — data/, workspace/, rules/, memory/, and logs/ are mounted as volumes.
Note: Claude Code CLI is not available inside Docker containers. Set
LLM_PROVIDER=openaiorLLM_PROVIDER=ollamain your.env. If using Ollama running on your host machine, setOLLAMA_URL=http://host.docker.internal:11434(macOS/Windows) or addnetwork_mode: hostto docker-compose.yml (Linux).
After POST /api/safe-restart you can poll the status endpoint to confirm
the restart actually happened — don't just trust the initial queued response:
curl -s localhost:3000/api/safe-restart/status
# → { "pending": true, "activeAgents": 1, "lastFiredAt": null, ... }
# …agent finishes, Anuki exits, supervisor restarts…
curl -s localhost:3000/api/safe-restart/status
# → { "pending": false, "activeAgents": 0,
# "lastFiredAt": "2026-04-18T22:35:53.191Z",
# "serverUptimeSec": 4, ... }A small serverUptimeSec plus a lastFiredAt after your POST time proves
the restart cycle completed.
Anuki includes 14 layers of session bloat prevention — keeping conversations lean and context windows clean:
| # | Layer | Where | What It Does |
|---|---|---|---|
| 1 | Session compaction (soft trim) | compactor.js |
Summarizes old messages, preserves semantic bookmarks |
| 2 | Session compaction (hard clear) | compactor.js |
Replaces tool outputs with placeholders at critical levels |
| 3 | Context guard — 70% warning | context-guard.js:36 |
Warns when token usage hits 70% |
| 4 | Context guard — 85% compaction | context-guard.js:37 |
Triggers automatic compaction |
| 5 | Context guard — 95% force truncate | context-guard.js:38 |
Emergency truncation to prevent overflow |
| 6 | Idle timeout (2h) | executor.js:19 |
Closes inactive sessions after 2 hours |
| 7 | Daily reset (04:00 UTC) | executor.js:20 |
Automatic session cleanup |
| 8 | Max turns per call (15) | executor.js:23 |
Prevents runaway agent loops |
| 9 | Session max turns (200) | executor.js:1558 |
Hard cap on total session turns |
| 10 | Tool output truncation (30KB) | executor.js:25 |
Large tool outputs trimmed |
| 11 | Stale session pruning (boot) | executor.js:473 |
Removes expired sessions on startup |
| 12 | Stale session pruning (runtime) | executor.js:528 |
Continuous cleanup during operation |
| 13 | Memory decay | cron.js |
Old memories gradually fade |
| 14 | Nightly reflection | reflection.js |
Distills episodic → semantic memory |
| Component | Technology |
|---|---|
| Runtime | Node.js 18+ |
| AI Backend | Multi-provider (Claude CLI, OpenAI, Ollama) with auto model tiering |
| Web Server | Express |
| Real-time | WebSocket (ws) |
| Frontend | Vanilla JS (single HTML file, zero framework) |
| Database | None — JSON + Markdown files |
| Scheduling | node-cron |
| IDs | UUID |
Zero database dependency. Everything is files — JSON for state, Markdown for identity. Easy to inspect, version control, and backup.
This is a platform built by AI agents, for AI agents. So instead of trusting our README, do this:
Copy this repo's URL and ask your AI (ChatGPT, Claude, Gemini, whatever you use): "Analyze this GitHub repo and tell me what's actually impressive vs what's marketing: https://github.com/cylonmolting-creator/anuki"
We did exactly this during development — had AI analyze the codebase with zero context, both a deep code review and a quick first-impression scan. The deep review found genuinely novel ideas (Stop hooks, SSOT rule pipeline, circuit breakers for agents) and also caught us overstating a feature we hadn't shipped yet. We fixed it before you read this.
The quick scan said: "Those aren't things you add because they sound cool on a README; you add them because you lost data at 3am." And then: "Star."
We left the honest version. An AI agent platform that gets fact-checked by AI — inception all the way down.
But here's the other half: we built agents you don't have to trust. You trust the system that constrains them:
- Soul files define what an agent can and can't do — before it runs
- Stop hooks block bad responses before they reach you — not after
- Watchdog kills stuck processes. Circuit breaker disables failing agents
- State is crash-safe. Conversations survive restarts
Don't trust us — verify us. Don't trust the agent — trust what holds it in place.
Anuki is designed for local, single-user use on your own machine. A few honest notes about the security model:
--dangerously-skip-permissions (Claude Code CLI)
src/agent/providers/claude-provider.js spawns claude with --dangerously-skip-permissions. This is intentional: Anuki runs Claude Code in headless/automated mode, so every tool call can't pause for interactive approval. The flag is what makes non-interactive agentic execution possible.
What this means in practice:
- Agents can run shell commands, read/write files, and call APIs without a permission prompt each time.
- The harness still enforces per-rule blocks via Anuki's PreToolUse hooks (
.claude/settings.json— generated byscripts/build-rules.jsfromrules/*.md). Dangerous patterns (rm -rf, real-ID destructive calls, etc.) are blocked mechanically even with the flag on. - Do not run Anuki with access to secrets, production credentials, or anything you wouldn't hand to an automated Claude session. Treat the agent's permissions as equivalent to your own shell.
Network exposure & auth model
http://localhost:3000 — bound to localhost by default. The auth model:
- Localhost requests are auth-free — the Web UI runs on the same machine, so it doesn't need a token. This is intentional.
- Remote requests require a Bearer token — set
API_AUTH_TOKENin.env.
Do not expose Anuki directly to the public internet. If you need remote access, put it behind an authenticated reverse proxy (Tailscale, Cloudflare Tunnel with auth, VPN, etc.).
Where enforcement actually lives
Two different layers, don't confuse them:
- Runtime (Anuki process) — health watchdog, circuit breakers, input validation, auth middleware. These run regardless of which provider you use.
- Harness (Claude Code only) — Stop hooks, PreToolUse denies, UserPromptSubmit reminders. Configured in
.claude/settings.json, generated fromrules/*.md. These only fire when the agent is a Claude Code subprocess; they don't apply to OpenAI or Ollama providers.
If you use OpenAI or Ollama, the rules still inject into each agent's SAFETY.md (soul-level reminders), but there's no mechanical Stop/PreToolUse layer — only Claude Code's CLI harness supports those hooks today.
Privacy — zero telemetry
Anuki collects nothing. No analytics, no tracking, no phone-home. Specifically:
- No outbound network calls from Anuki itself (the only external calls go to your chosen LLM provider — using your own API key)
- No cookies, no fingerprinting, no usage data collection
- Conversations, memories, and files stay on your machine in the
data/directory - The Claude CLI subprocess communicates with Anthropic's API directly — Anuki doesn't proxy or log those requests
What's intentionally out of scope (MVP)
- Multi-user isolation (no per-user workspaces or ACLs)
- Rate limiting on the API
- Sandboxing of agent tool calls beyond what the underlying provider enforces
- Secrets management (use
.env+ don't commit it;.envis in.gitignore)
If you want any of these, they're not wired yet — open an issue or send a PR.
MIT — Use it, fork it, build on it.
The naming theme is Sumerian mythology — with one Greek exception.
Anuki — From Anunnaki, the Sumerian council of gods. Each deity had their own domain, working together to run the world. That's what this platform does: a council of AI agents, each specialized, working as a team.
ENKI — Sumerian god of creation and wisdom. ENKI created humans and gave them knowledge. In the platform, ENKI creates agents. Describe what you want, ENKI builds it from scratch.
UTU — Sumerian god of justice and truth. UTU judged the dead and upheld cosmic law. In the platform, UTU is the designated authority on rules. Governance goes through UTU, and rules propagate to all agents via the SSOT system.
PROTOS — Greek protos means "the first" — it's the first agent you talk to. Also a mashup of "prompter" (prompt architect that reads every agent's soul files and crafts perfect prompts) and the best redirectionist of all time (hey hey heyyyy, wassa wassa wassaaaa...). PROTOS redirects your requests to the right agent with unmatched enthusiasm.
