kernl
Enables Kernl to send notifications and messages to Mattermost channels, allowing agents and workflows to post updates and alerts.
Enables Kernl to send notifications and messages to Slack workspaces, allowing agents and workflows to post updates and alerts.
Enables Kernl to send notifications and messages via Telegram, allowing agents and workflows to deliver updates and alerts.
Enables Kernl to send notifications and messages via WhatsApp, allowing agents and workflows to deliver updates and alerts.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@kernl What tasks are overdue this week?"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
Kernl
Agent teams that do your work — on your own machine.
Kernl is a self-hosted server that hands any LLM your real data — tasks, mail, calendar, finance, contacts — and runs teams of agents that act on it. No account. With a local model, nothing leaves the box.
Install · Watch them work · Why Kernl · MCP integration · Website · Discussions
🎬 Watch them work
A real instance. 84 agents across fourteen offices, plus a warehouse. Not a mockup and not a render — that is the /agents-flow view of a running Kernl, and the one-liner below gets you to it.
Related MCP server: Thalamus
⚡ Install in one line
curl -fsSL https://raw.githubusercontent.com/fastslack/kernl/stable/install.sh | shDebian/Ubuntu, Fedora/RHEL and macOS. The same command installs and updates — it
reads the newest release and picks the build for your machine. On Windows, take the
.msi from the latest release.
→ Dashboard at http://localhost:3086 · MCP endpoint at http://localhost:3086/mcp
Nothing to sign up for and no host paths to set. First run walks you through four steps, and one of them is connecting an AI — NVIDIA is free by default, or pick from eleven others, including local models through Ollama or LM Studio if you'd rather nothing left the machine at all. Chat and agents stay off until you connect one; the rest of the dashboard works either way.
git clone https://github.com/fastslack/kernl.git
cd kernl
docker compose up -d --build
# Kernl generates an API token on first boot. Grab it:
docker compose exec kernel cat /app/data/.kernel-auth-tokenPaste that token once into the dashboard's login screen and you're in — it's kept in
your browser and reused for every request. To pin your own instead, set
KERNEL_AUTH_TOKEN (openssl rand -hex 32) in .env before the first up. Key-free
web search comes bundled in this path; the graph brain is built into the kernel on every path.
To let the Filesystem Commander browse a folder of your machine, and to run
claude_code agents on your Claude Code login, set KERNL_FS_ROOT in .env and
add the host overlay — then name the same files on every later compose command:
docker compose -f docker-compose.yml -f docker-compose.host.yml up -dAlready running 0.4.x in Docker? Update with scripts/kernl.sh update (it pulls,
builds while the old kernel keeps serving, and recreates with the offices drained).
On its first start 0.5.0 moves your graph from Neo4j to the built-in one by itself:
it keeps serving from Neo4j while it copies, checks the counts and switches over
live. Leave Neo4j running until the log says Graph upgrade: caught up with what reached Neo4j during the copy; after that
scripts/kernl.sh stop neo4j is safe and your data stays in its volume. The cinema
catalogue stays out of the graph now, which makes the copy seconds instead of an
hour on a large catalogue. To stay on Neo4j (for Graph Data Science), set
KERNL_KEEP_NEO4J=1 first. Details in the changelog.
Your AI is brilliant — and amnesiac.
Every conversation starts from zero. Your LLM can't see your tasks, read your inbox, check your budget, or remember what you told it yesterday. And the cloud "AI assistants" that promise to fix that? They want your entire life uploaded to their servers.
Kernl fixes both.
What is Kernl?
Kernl is a self-hosted server that plugs your real life into any LLM through the Model Context Protocol (MCP) — tasks, contacts, email, finance, calendar, notes, health and more, behind one endpoint that Claude, Cursor or any MCP client can reach.
Then it goes past a data bridge: Kernl runs agents — autonomous teams (it calls them offices) that work in loops, call your tools, and finish jobs while you're away.
Kernl and your data live on your machine. The only thing that goes out is what the agents send to the LLM you pick, and with a local model (Ollama, LM Studio) nothing does.
For the depth, once you want a number: 103 tools live on a fresh install, rising past 290 as you enable more of the 71 bundled modules.
💬 Talk to your life
Point your AI at Kernl and ask it things it could never do before:
💸 "Did rent clear, and how much did I spend on food this month?" — reads your finance module.
📥 "Triage my inbox and draft replies to anything urgent." — reads your email, writes the drafts.
✅ "What's overdue, and what's due this week?" — straight from your real tasks + calendar.
🤖 "Spin up the dev office and clear the next three backlog items." — launches an agent team that works on its own.
Real data. Real actions. On your machine — not in someone else's cloud.
🔥 Why Kernl
🔒 Private by default | Self-hosted. Your tasks, email and finances never touch someone else's cloud. |
🧠 Real memory | A built-in graph brain (Relate, embedded — no server to run) links every module and shares what your agents learn, so your AI finally remembers. |
🤖 Agents that act | Not a chatbot — autonomous offices that work in loops and use your tools. |
🔌 Any LLM, any client | NVIDIA (free), Gemini, Groq, OpenRouter, Anthropic, OpenAI, DeepSeek, Grok, MiniMax, Claude Code, or a local model via Ollama or LM Studio. Any MCP client connects. |
🧩 Endlessly extensible | Everything is a module. Ship your own as a portable |
📊 103 tools installed, 71 modules bundled | One surface for your whole life — not fifteen disconnected apps. Enable everything and you pass 290 tools. |
⚔️ Kernl vs. the usual options
Cloud AI assistants | A single MCP server | "Second brain" apps | Kernl | |
Your data stays on your machine | ❌ | ✅ | ⚠️ | ✅ |
Your real life — email, finance, tasks… | partial | one thing | ❌ | 71 modules |
Agents that act, not just chat | limited | ❌ | ❌ | ✅ |
Works with any LLM & MCP client | ❌ | ✅ | ❌ | ✅ |
Yours to extend & fork | ❌ | ⚠️ | ❌ | ✅ |
🧩 What's inside
Your life, addressable by your AI — tasks & projects, contacts/CRM, reminders, email (IMAP/SMTP), finance & budgets, calendar, notes, goals, health & training, shopping, travel, documents… 71 modules, every one exposed as MCP tools.
A fleet of agents — cooperating agents with chains, schedules and their own workspaces. Package a whole team as an installable .kernl office, and watch them work in a live 3D office view.
Pluggable everything
LLM providers — 12 built in, connected from Settings → AI; keys stored encrypted.
Sandbox drivers — run agent code in Docker, CubeSandbox, or your own driver.
Channels — WhatsApp, Telegram, Slack, email, Mattermost and webchat on one notification bus.
Graph intelligence — a built-in graph (Relate, in-process Cypher) for memory and shared agent learning; optional Neo4j + GDS for heavy graph analytics.
🔌 MCP integration
Kernl speaks MCP over stdio and Streamable HTTP at the same time, so every client reaches the same tools.
{
"mcpServers": {
"kernl": {
"command": "bun",
"args": ["run", "bin/mcp-server.ts"],
"cwd": "/absolute/path/to/kernl/services/kernel"
}
}
}The MCP HTTP transport is at http://localhost:3086/mcp by default (the official Streamable HTTP spec).
🛠️ Build your own
An extension is a folder (or a packaged .kernl) with a manifest.json plus any of: a backend module (new MCP tools + HTTP routes), agents & offices, agent-scoped skills, a theme, a channel, or a sandbox driver.
Keep operator-specific material — named agents, your WhatsApp, regional scrapers — private under services/kernel/assets/personal-agents/ (gitignored, ideal for a private submodule).
Full guide → docs/architecture/extension-points.md
📦 More install options
WhatsApp no longer needs this: it is part of the standard docker compose up -d, which already runs the mtwRequest Rust server and the WhatsApp bridge, and the Linux, macOS and Windows packages bundle the same pair and run them as supervised children — no compose file needed there either. Either way, you link your phone from Settings → Channels → WhatsApp (QR or phone code) with nothing to configure. docker-compose.full.yml is only for building those two services from local source and for host-coupled mounts (so on-host claude_code agents can edit your sibling repos). Needs a few host paths in .env:
git clone https://github.com/fastslack/kernl.git
cd kernl
cp .env.example .env
$EDITOR .env # set HOST_HOME, HOST_KERNEL_ROOT, HOST_PROJECTS_ROOT,
# KERNEL_REQUEST_SRC, KERNEL_WHATSAPP_BRIDGE_SRC
docker compose -f docker-compose.full.yml up -d --buildgit clone https://github.com/fastslack/kernl.git
cd kernl
bun install --cwd services/kernel # requires bun >= 1.3
cp .env.example .env
bun run dev # stdio MCP + HTTP router (delega a services/kernel)Requirements
For the one-line install: none. The package ships its own runtime — no Bun, no Node, no Docker. A 64-bit Debian/Ubuntu, Fedora/RHEL or macOS machine is the whole list.
Only if you build from source or run the container stack instead:
Bun ≥ 1.3 (primary runtime) or Node ≥ 20 — source installs.
Docker + Compose — the container paths, and the only route to the full stack.
Neo4j 5.x + GDS (optional — the graph is built in. Add it with
docker-compose.neo4j.ymlfor Graph Data Science analytics; budget 1–2 GB of RAM).
Configuration
Everything is environment-driven, and the install above needs none of it —
Kernl boots with working defaults either way. Copy .env.example to .env
only when you want to override something.
Two secrets are generated and persisted on first boot if you don't set them:
Variable | If unset |
| A random token is generated and stored as |
| A random 32-byte key is generated and stored as |
The host-path variables (HOST_HOME, HOST_KERNEL_ROOT, HOST_PROJECTS_ROOT)
belong to the full stack in docker-compose.full.yml, not the default one.
Everything else — LLM keys, Neo4j creds, feature toggles — is documented inline
in .env.example.
Scripts
Command | What it does |
| Start the MCP server + HTTP router |
| Interactive setup wizard |
| Self-diagnostics (DB, providers, channels) |
| Run the test suite |
| Bundle to |
| Rebuild + restart the kernel container |
Known limitations
Worth knowing before you commit your life to it. None of these are secret — we'd rather you read them here than discover them at an awkward moment.
Single user. One kernel, one person. There is user and password infrastructure inside, but no per-user data isolation: everyone who has the API token sees everything. Give each person their own instance; don't share one across a team. (
docs/MULTI_USER.md)Updates are checked, never automatic. Settings → About asks GitHub for the newest release (cached six hours) and can install it for you. Nothing happens unattended, and what "install" means depends on how you installed: an MSI install is upgraded by Windows' own installer (one UAC prompt, the progress bar you expect, Add/Remove Programs kept in step); a portable Windows or Linux copy is swapped in place, keeping the old one until the new one is running; and the rest update through their own channel —
dnf/aptfor the rpm and deb,docker compose pullfor the stack,git pullfrom source. On macOS the button refuses while the build is unsigned, because Gatekeeper would not open the result: until the certificate is bought, that download is a manual one.Installers are unsigned. macOS needs right-click → Open the first time, Windows needs "More info → Run anyway". The signing pipeline is wired but the certificates aren't bought yet. Docker and source installs are unaffected.
Back it up yourself, and check the exit code.
backup.shis solid and verifies its own output, but nothing runs it for you. Seedocs/DEPLOYMENT.md.Neo4j is hungry, and optional. The built-in graph needs no server; the optional Neo4j (
docker-compose.neo4j.yml) wants ~1–2 GB of RAM on its own.No telemetry, which cuts both ways. Nothing phones home, so nothing tells us when your install breaks. Bug reports are the only signal we get.
Documentation
docs/GETTING_STARTED.md— first-run walkthroughdocs/ARCHITECTURE.md— the contributor map and the full system guide, in that orderdocs/API_DOCS.md— HTTP + MCP surface referencedocs/DEPLOYMENT.md— production deploys
⭐ Contributing & community
Kernl is Apache-2.0 and built in the open. Star the repo if it's useful, open an issue for bugs and ideas, and say hi in Discussions. Contributions welcome — see docs/CONTRIBUTING.md.
License & credits
Created and maintained by Matias Aguirre — a Matware project. See AUTHORS and NOTICE.
Released under the Apache License 2.0 — fork it, build commercial plugins on top, redistribute, modify. © 2026 Matware.
Available Tools
149 toolskernel_agents_add_learningA
Manually add a learning/insight to an agent. High-confidence learnings are injected into the agent's system prompt.
Inputs: type (required), content (required), agent_id (required), scope, +1 more.
kernel_agents_add_triggerB
Add an event trigger or schedule to an agent. Event triggers fire when a matching event occurs. Schedules run periodically. A schedule's runs work for project; without it they inherit the project of an office that serves exactly one, and otherwise run outside any project (and cannot draft from a project's accounts).
Inputs: type (required), agent_id (required), cron, filter, +5 more.
kernel_agents_ask_supervisorA
Ask the chief about a doubt you can't resolve alone: unclear requirements, priorities, or a decision you are not authorized to make. Give 2 to 4 concrete options, your preferred one first. The chief answers or escalates it to the human. Don't wait idle: keep working on what doesn't depend on it. The answer comes back as a new run or an inbox message. Never re-ask a question that was already answered.
Inputs: options (required), question (required), env, context, +5 more.
kernel_agents_call_meetingA
Call a group meeting with other agents. You (the caller) become the moderator. The meeting runs N structured rounds (default 2, capped at 20) where each attendee gives input, then you synthesize into decisions and action items. Use this when you need collaborative input from multiple agents before proceeding.
Inputs: topic (required), attendee_ids (required), rounds, context, +2 more.
kernel_agents_chainA
Create a declarative chain between two agents. When the source agent completes, the target agent is automatically triggered.
Inputs: source_agent_id (required), target_agent_id (required), label, delay_ms, +2 more.
kernel_agents_createC
Create a new autonomous agent definition with system prompt, goal template, tool permissions, and LLM config
Inputs: name (required), role, model, flow_id, +10 more.
kernel_agents_decision_policy_setA
Chief only. Set how a kind of question (category) is handled in an office: off, suggest (show what past decisions suggest), or auto (a precedent answers it alone while its measured precision holds). Only turn on auto when the operator asked for it.
Inputs: mode (required), flow_id (required), category (required), min_samples, +2 more.
kernel_agents_decision_statsB
Read-only. Per kind of question (category) in an office: the policy (off / suggest / auto), and how often the operator chose what past decisions suggested — the measured precision a category needs before a precedent may answer it alone.
Inputs: flow_id, __caller_agent_id.
kernel_agents_deleteA
Soft-delete an agent (sets active=0, preserves history)
Inputs: id (required), __caller_agent_id.
kernel_agents_directoryA
View the full office directory — all departments (flows) with their agents, roles, capabilities, and connections. Use this to find agents you can request help from or delegate work to.
Inputs: flow_id. Returns: flows, unassigned
kernel_agents_env_listA
Read-only. The environment problems open in your office, since when, and who is waiting on each.
Inputs: __caller_agent_id.
kernel_agents_env_reportA
Report that something in your office's environment blocks your work (DEV down, a missing credential, a broken deploy). Use the same short key every time for the same problem (dev-e2e, credential-dev-patient-jwt). If it is already open you just join it — nobody is asked again. You get a letter when it is fixed: park the work until then.
Inputs: key (required), subject, description, __caller_agent_id.
kernel_agents_env_resolveC
Close an environment problem of your office that is fixed. Everyone who joined it gets a letter to resume.
Inputs: key (required), note, __caller_agent_id.
kernel_agents_factory_finalizeA
Finalize an Agent Factory draft: validate the proposed tools against the real catalog, resolve/create the target office, guard against duplicates, and create the agent INACTIVE (active=0) for human review. Returns the activation command. Use AFTER you've researched the domain, synthesized the system prompt, and picked tools via kernel_tool_search.
Inputs: name (required), system_prompt (required), brief, provider, +6 more.
kernel_agents_feedbackC
Rate an agent run and provide feedback. The agent learns from feedback to improve future runs.
Inputs: rating (required), run_id (required), lesson, outcome.
kernel_agents_flows_createA
Create a new flow (department / office). Returns the new flow id, which you must pass to subsequent kernel_agents_create calls so the agents show up under this office in the 3D view.
Inputs: name (required), color, description.
kernel_agents_flows_listA
List active flows (offices / departments). Use this before creating a new one to avoid duplicates.
Inputs: no named parameters.
kernel_agents_flows_set_repoA
Promote an office (flow) to a host git repo all its agents work in, or revert it. Pass an absolute path to promote; omit/empty path to revert to the kernel workspace home. Agents without their own cwd_path override will use this directory as cwd.
Inputs: flow_id (required), path, git_init.
kernel_agents_get_skillsA
List the procedural skills attached to an agent, with descriptions and token estimates.
Inputs: agent_id (required).
kernel_agents_historyC
List past runs for an agent
Inputs: agent_id (required), limit, status.
kernel_agents_inboxA
Read an agent's office inbox (messages from colleagues). Defaults to the caller's own inbox and shows unread items only. Useful for the dashboard or to check what's pending before a run.
Inputs: limit, status, agent_id, __caller_agent_id.
kernel_agents_inbox_ackA
Acknowledge office-inbox letters you have finished handling. Unacknowledged letters are handed to you again by the inbox sweeper (up to 3 times), so ack every letter you completed.
Inputs: message_ids (required), __caller_agent_id.
kernel_agents_listA
List all agent definitions, optionally filtered by active status
Inputs: active. Returns: total, agents
kernel_agents_list_subscriptionsA
List active conversation subscriptions for an agent. Useful before subscribing (to avoid duplicates) or to audit what conversations an agent is watching.
Inputs: agent_id, __caller_agent_id.
kernel_agents_list_triggersB
List event triggers, schedules, and chains for an agent
Inputs: agent_id (required).
kernel_agents_memoryA
Read an agent's conversational memory — recent interactions with humans and other agents. Use this to check what another agent has been working on or said recently.
Inputs: agent_id (required), limit.
kernel_agents_post_to_colleagueA
Leave an async message in another agent's inbox. Works ACROSS offices — every agent can reach every other agent. The recipient does NOT run immediately — the message appears as a 'PENDING REQUESTS FROM COLLEAGUES' block in their system prompt the next time they run, then is marked read. Use this for blockers, clarifications and hand-backs between agents. For a doubt that needs a decision from above use kernel_agents_ask_supervisor. For blocking one-shot questions use kernel_agents_invoke; for group deliberation use kernel_agents_call_meeting. To continue a thread, pass in_reply_to_message_id (the conversation-message id of the turn you are replying to) or an explicit conversation_id. To signal disagreement with something the recipient (or a peer) said, set role: "counter" — 2+ counters from different agents on the same conversation auto-opens a debate.
Inputs: body (required), subject (required), role, to_agent_id, +4 more.
kernel_agents_question_contextA
Read-only. Everything about an escalated question: the question, the chief's reason, the 4 options, the full context, and the asking agent's run (its goal and steps up to the question).
Inputs: question_id (required).
kernel_agents_questions_answerA
Chief only. Answer a question in triage: pick one of its options by 0-based selected_index, or write text when none fits. The asking agent gets the answer and resumes.
Inputs: question_id (required), leaves_work_to_operator (required), text, selected_index, +1 more.
kernel_agents_questions_escalateA
Chief only. Hand a question in triage to the human, with a one-line reason they will read. Use for product or business decisions, money, irreversible actions, or anything you are not sure about.
Inputs: reason (required), question_id (required), __caller_agent_id.
kernel_agents_questions_triage_listA
Chief only. List the office agents' questions waiting for your triage, with their 4 options.
Inputs: __caller_agent_id.
kernel_agents_remove_triggerB
Remove an event trigger or schedule from an agent
Inputs: type (required), trigger_id (required).
kernel_agents_resumeA
Resume an interrupted agent run from its last checkpoint (native agents only). Use it on a run the kernel failed with 'resumable with kernel_agents_resume'. Tool calls whose outcome was lost are not repeated — the agent is told their result is unknown.
Inputs: run_id (required).
kernel_agents_runB
Manually trigger an agent run with a specific goal. Returns the run result.
Inputs: agent_id (required), goal, project, variables.
kernel_agents_set_skillsA
Attach (or replace) the procedural skills loaded by an agent. Each slug must reference an installed extension with type='skill'. Pass an empty array to detach all.
Inputs: skills (required), agent_id (required).
kernel_agents_statsB
Get performance stats for an agent: success rate, avg tokens, top tools, common errors, learnings
Inputs: agent_id (required).
kernel_agents_statusA
Get the status and step-by-step log of an agent run
Inputs: run_id (required).
kernel_agents_subject_historyA
Read-only. Everything asked and decided about an issue and all its parts (web#2653 covers web#2653:a-b…), oldest first: who asked, the answer, who decided it and through what channel, and which environment problems were open at the time. Read it before asking about a subject again.
Inputs: subject (required), limit.
kernel_agents_subscribe_conversationA
Subscribe an agent to a conversation. Once subscribed, every new turn in that conversation wakes the agent with a run (mode='responder') so it can read and reply without being explicitly invoked. Use this to keep an agent engaged in a thread after invoke/post/meeting hands the topic over. Idempotent — re-subscribing updates the mode/filter. Defaults: subscribe yourself unless agent_id is set.
Inputs: conversation_id (required), mode, agent_id, filter_role, +1 more.
kernel_agents_unchainC
Remove a chain between two agents
Inputs: chain_id (required).
kernel_agents_unsubscribe_conversationB
Cancel a conversation subscription so the agent stops being woken by new turns. Defaults to the caller unless agent_id is supplied.
Inputs: conversation_id (required), agent_id, __caller_agent_id.
kernel_agents_updateB
Update an agent definition (name, prompt, tools, config, active status)
Inputs: id (required), name, model, active, +10 more.
kernel_agents_workspace_applyA
Declare what an office's home folder must contain and prepare it now: git repos to clone (at a branch), files to seed, MCP servers and skills for every claude_code agent working in the home. Replaces the previous spec. Existing checkouts are never re-cloned or reset; seeded files only replace an existing one when overwrite is true. Runs of the office wait for the home to be ready and fail with the reason when it can't be prepared.
Inputs: spec (required), flow_id (required).
kernel_agents_workspace_getB
Show an office's declarative workspace spec and how its last preparation went.
Inputs: flow_id (required).
kernel_attest_identityA
Return this kernel's Ed25519 attestation identity (server_id) and whether attestation is currently enabled. Clients pin this fingerprint and verify every receipt against it.
Inputs: no named parameters. Returns: enabled, server_id
kernel_attest_verifyA
Verify a previously-issued attestation receipt against its embedded server_id. Stateless verification — does not check whether you actually trust that signing identity. Wire-compatible with the Rust mtw-attest crate.
Inputs: receipt (required). Returns: tool, ts_ms, valid, reason, +2 more
kernel_attest_verify_chainA
Verify a plan receipt + its child receipts as one chained audit. Returns valid only when (1) the plan receipt's own signature checks out, (2) every child verifies, and (3) the merkle root of the children matches the one inside the plan receipt. Stateless — works on chains from any peer.
Inputs: plan_receipt (required), child_receipts (required). Returns: valid, reason, plan_id, server_id, +1 more
kernel_audit_changesB
Recent tool calls that wrote something, newest first — by agent, run or tool — with the ids each touched.
Inputs: tool, limit, since, run_id, +1 more. Returns: object
kernel_audit_cost_reportA
Token consumption and cost analysis. Shows which agents burn the most tokens, failure rates, and wasted spend. Critical for budget monitoring.
Inputs: hours.
kernel_audit_logsA
Query the agent event log for security analysis. Shows agent activity, errors, tool calls, token consumption, and failure patterns.
Inputs: limit, since, agent_id, event_type, +1 more.
kernel_audit_who_changedA
Who changed this? Every tool call that wrote and named or returned this id (a task, contact, note, fact…): the agent and run or the MCP client that made it, the tool, when, whether it worked, and its arguments in short.
Inputs: id (required), limit. Returns: object
kernel_brain_askA
What do I know about X? Searches every memory at once — indexed tasks, notes, contacts and mail (brain), past chat messages, what agents have learned, and the people, tasks, mail, events and products in the graph — by meaning and by words, merges the findings into one ranked list, and shows what each result is connected to. Use it before answering a question about a person, project or topic.
Inputs: query (required), limit, related. Returns: object
kernel_brain_decayA
Maintenance: pull every learned weight a fraction back toward the 1.0 baseline so stale boosts/penalties fade. Run periodically.
Inputs: rate. Returns: adjusted
kernel_brain_feedbackA
Record a usage signal for a recalled item to teach the brain. open/correct promote it, ignore demotes it. This is the autoaprendizaje loop — future recalls rank adapted to your behaviour.
Inputs: signal (required), item_id (required). Returns: weight, item_id
kernel_brain_indexA
Index (or incrementally refresh) module rows into the unified semantic space. Only rows changed since the last run are touched (watermark). Pass kinds to backfill one module at a time. Embeds row text, so run it deliberately when the embeddings backend is healthy.
Inputs: kinds. Returns: indexed, removed, per_kind
kernel_brain_recallA
Unified semantic recall across ALL modules — tasks, notes, contacts, communications, reminders, calendar events — in one ranked result. Use this to surface everything related to a topic regardless of which module it lives in. Ranking blends embedding similarity with a learned per-item weight that adapts to how you use results.
Inputs: query (required), kinds, limit, hybrid, +3 more. Returns: object
kernel_brain_statsB
Coverage of the unified space: total items, count per kind, and per-source watermarks.
Inputs: no named parameters. Returns: object
kernel_chat_analyzeC
Run analytics on the concept graph. Shows top concepts by importance and community structure.
Inputs: no named parameters.
kernel_chat_archiveC
Archive a chat episode. In future phases, this also generates a summary embedding.
Inputs: episode_id (required).
kernel_chat_conceptsB
List extracted concepts from chat conversations, ordered by gravity (cross-conversation importance).
Inputs: limit, min_gravity.
kernel_chat_contextA
Preview the cognitive context that would be retrieved for a query. Useful for debugging the retrieval pipeline.
Inputs: query (required), budget, episode_id.
kernel_chat_historyC
Get message history for a chat episode.
Inputs: episode_id (required), limit, offset.
kernel_chat_listC
List chat episodes, optionally filtered by status.
Inputs: limit, status.
kernel_chat_messageB
Send a message in a chat episode and receive the LLM response. The system automatically retrieves relevant context from memory (when available).
Inputs: message (required), episode_id (required), context_budget.
kernel_chat_patternsC
View detected temporal and behavioral patterns from chat conversations.
Inputs: no named parameters.
kernel_chat_recallB
Reinforce a memory node manually, boosting its strength against decay. Use this to mark a memory as important.
Inputs: memory_id (required).
kernel_chat_searchB
Full-text search across all chat messages. Returns matching messages with their episode context.
Inputs: query (required), limit.
kernel_chat_startA
Start a new chat episode (conversation). Returns the episode ID to use with kernel_chat_message.
Inputs: model, title, provider.
kernel_code_readA
Read a source file from the project (read-only). Restricted to project src — cannot read .env, credentials, node_modules, or data.
Inputs: path (required), limit, offset.
kernel_code_runA
Run a small JS script that can call other kernel tools via tool(name, args). Use this to compose multiple tool calls in ONE inference round (e.g. list-then-filter, create-then-run). Sandbox: no FS, no network, no require, 5s default wall-clock. Available helpers: tool(name, args) (async), log(msg), input (the vars object). Example: const r = await tool("kernel_tasks_list", {}); return r.tasks.length.
Inputs: script (required), vars, timeoutMs. Returns: logs, result, durationMs
kernel_code_searchA
Search for a pattern in the project source code (grep). Returns matching lines with file paths. Restricted to src/ directory.
Inputs: pattern (required), glob, max_results.
kernel_config_catalogB
List all known configurable settings with their descriptions, types, and categories. Use this to discover what can be configured.
Inputs: category.
kernel_config_getA
Get the current value of a specific configuration setting by its env-var key (e.g. ANTHROPIC_API_KEY, LIFE_CITY, CHAT_DEFAULT_PROVIDER). Sensitive values are masked.
Inputs: key (required).
kernel_config_listA
List all kernel configuration settings, optionally filtered by category. Sensitive values (API keys, tokens) are automatically masked.
Inputs: category.
kernel_config_setA
Set a configuration value. Changes take effect immediately (no restart needed) and are persisted to the .env file. Examples: set LIFE_CITY to 'Berlin', set CHAT_DEFAULT_PROVIDER to 'openai', set PROACTIVE_MORNING_TIME to '08:00'.
Inputs: key (required), value (required).
kernel_config_set_manyA
Set multiple configuration values at once. Useful when applying a group of related settings, e.g. changing location (latitude + longitude + city + timezone).
Inputs: settings (required).
kernel_dashboard_eveningB
Evening review: what was completed today, what's pending, and tasks for tomorrow.
Inputs: no named parameters.
kernel_dashboard_morningA
Morning briefing: today's tasks, overdue items, upcoming deadlines, contacts needing follow-up. Your daily overview.
Inputs: no named parameters.
kernel_dashboard_weeklyA
Weekly planning summary: tasks completed this week, open items, upcoming deadlines, contact activity.
Inputs: no named parameters.
kernel_extensions_activateA
Activate an installed-but-idle extension (those with manifest.requires_activation=true). Equivalent to enable() for that subset — exists as a separate tool so the consent step is auditable.
Inputs: id (required).
kernel_extensions_disableC
Disable an installed extension by id.
Inputs: id (required).
kernel_extensions_enableC
Enable an installed extension by id.
Inputs: id (required).
kernel_extensions_install_bundleB
Install an extension from a local .kernl bundle path.
Inputs: bundle_path (required).
kernel_extensions_listC
List installed extensions, optionally filtering by type or status.
Inputs: type, status.
kernel_extensions_receiptA
Get the install receipt for an extension — proves WHO installed it WHEN and from WHERE, with the kernel's Ed25519 signature. Includes a download watermark when fetched from a watermarking marketplace provider.
Inputs: id (required).
kernel_extensions_uninstallC
Remove an extension (deletes files + row).
Inputs: id (required).
kernel_extensions_updateC
Upgrade an installed extension in place from a local .kernl bundle path.
Inputs: bundle_path (required), force.
kernel_facts_as_ofA
The graph as it stood at a moment: every fact about a person or thing (subject ref or name) at at, each one classified by both timelines — known (true then and Kernl knew it), stale (Kernl believed it then but it was no longer true, or was a mistake) or unknown (true then, but Kernl had not learned it yet) — with the agent that wrote it and what it replaced. One traversal of the graph.
Inputs: at (required), subject (required). Returns: object
kernel_facts_assertA
Record a fact about a person, thing or the user — subject, predicate, value — with when it became true. A new value for the same subject and predicate ends the old one (mode change) or replaces it as a mistake (mode correction); the history is kept, so the memory does not hold two contradicting answers. Saying the same thing again changes nothing.
Inputs: object (required), subject (required), predicate (required), mode, +6 more. Returns: object
kernel_facts_explainA
Why did Kernl (or an agent) act that way? Give the person or thing (subject ref or name) and the moment of the decision — at, or action_ref, the id of what the action produced or touched (an email, a task…). Returns what Kernl believed then against what is now known to have been true then, fact by fact, who wrote each belief and from what source, and a verdict: consistent, late_information (the world changed but Kernl learned it after the decision) or wrong_belief (the stored fact was later corrected as a mistake).
Inputs: at, name, subject, predicate, +1 more. Returns: object
kernel_facts_queryA
Facts that are true now — or were true at as_of, or as Kernl believed them at known_at. history lists every value ever recorded with when it held and whether it was corrected.
Inputs: text, as_of, limit, history, +3 more. Returns: object
kernel_facts_retractB
A fact no longer holds (how=ended, from at) or never did (how=wrong). It stays in the history.
Inputs: id (required), at, how. Returns: object
kernel_graph_analyzeA
Graph analytics over the labels you name (and, optionally, only some relationship types): pagerank (who is central), communities (Louvain groups), components (what is connected at all), betweenness (who bridges groups). The result is written on each node as pageRank (pagerank), communityId (communities), componentId (components), betweenness (betweenness) — use it afterwards in kernel_graph_query, e.g. ORDER BY p.pageRank DESC. Runs on Graph Data Science when the graph has it or GDS_REMOTE_URI points at one (only numbered nodes and edges are sent), otherwise in the kernel, up to 200000 nodes.
Inputs: labels (required), algorithm (required), top, write, +2 more. Returns: object
kernel_graph_askA
Ask Kernl's graph a question in plain words ("which people did I email most last month?", "what tasks depend on the report?"). It writes a read-only query from the graph's schema, runs it, fixes it from its own errors, and returns the rows with the query it used.
Inputs: question (required), limit. Returns: object
kernel_graph_queryA
Run one READ-ONLY Cypher query on Kernl's graph and get rows back. It is checked before it runs: no writing, only db.* read procedures, bounded variable-length paths (at most 6 hops), connected patterns, and labels and relationship types that exist (wrong ones come back with suggestions). Rows are capped by limit.
Inputs: cypher (required), limit, params. Returns: object
kernel_graph_schemaA
What Kernl's graph holds: node labels with counts and properties, which relationships connect which labels, and the vector and full-text search indexes. Read it before kernel_graph_query.
Inputs: no named parameters. Returns: object
kernel_graph_scratchA
Run Cypher — reads AND writes — in your own private, in-memory scratch graph: a working space for plans, dependency maps or a slice of the main graph you want to reshape (see kernel_graph_slice). It belongs to your run, nobody else sees it, and it is wiped when the run ends or after 30 idle minutes. At most 20000 nodes; no LOAD CSV, no apoc/gds/dbms. The main graph is never touched.
Inputs: cypher (required), limit, params. Returns: object
kernel_graph_scratch_dropA
Wipe your scratch graph now (it also goes when your run ends).
Inputs: no named parameters. Returns: object
kernel_graph_sliceA
Take a slice of Kernl's main graph with a READ-ONLY query that returns nodes, relationships or paths (e.g. MATCH p = (:Person {name: $n})-[*1..2]-() RETURN p), checked like kernel_graph_query. into: "scratch" (default) copies it into your scratch graph, keeping labels and properties, with _src set to the original's element id; into: "json" returns it as nodes and relationships, for a sandboxed agent or a file. Embeddings are left out.
Inputs: cypher (required), into, rows, params. Returns: object
kernel_kernl_bug_reportA
Chief only. File a bug in Kernl itself — its code or behaviour — for Kernl's developers. Use it when a failure is Kernl's fault: a wrong result, a missing event, a crash, a tool that does not do what it says. Do NOT use it for an agent hitting its limits (steps, tokens, time), a provider outage or rate limit, expired auth, or an agent's prompt: those are fixed by the operator, not by changing Kernl. Give a precise title, the area of Kernl you believe is at fault, and your diagnosis with evidence. The report stays local until the operator publishes it.
Inputs: area (required), title (required), diagnosis (required), repro, +2 more.
kernel_kernl_bugs_listB
List Kernl's own bug reports (filed by the chief or the operator), newest activity first.
Inputs: status, __caller_agent_id.
kernel_marketplace_browseB
Browse the marketplace: list extensions, agents, flows, themes, and templates. Filter by type, category, or search query.
Inputs: sort, type, query, category.
kernel_marketplace_catalog_browseB
Browse the unified marketplace catalog (skills, plugins, modules, offices, themes, channels, etc.). Merges every catalog provider with installed status.
Inputs: type, limit, query, category.
kernel_marketplace_catalog_installB
Install a catalog item by id or slug. Routes through ExtensionService — works for skills, plugins, modules, offices, themes, etc.
Inputs: id (required).
kernel_marketplace_catalog_providersA
List configured catalog providers (bundled, remote, git, ...).
Inputs: no named parameters.
kernel_marketplace_catalog_uninstallB
Uninstall an installed extension by id or slug. Removes the install dir and the row in installed_extensions.
Inputs: id (required), force.
kernel_marketplace_exportC
Export a marketplace item as a JSON package for sharing.
Inputs: id (required).
kernel_marketplace_getB
Get detailed information about a marketplace item by slug or ID.
Inputs: identifier (required).
kernel_marketplace_importC
Import a marketplace package from JSON. Supports agents, flows, themes, templates.
Inputs: package_json (required).
kernel_marketplace_installC
Install a marketplace item (extension, agent, flow, theme, or template).
Inputs: id (required).
kernel_marketplace_reviewC
Add a review for a marketplace item (1-5 stars).
Inputs: rating (required), item_id (required), body, title.
kernel_marketplace_statsB
Get marketplace statistics: item counts by type, install stats, ratings.
Inputs: no named parameters.
kernel_marketplace_themeC
Manage themes: activate, deactivate, or preview a theme.
Inputs: action (required), item_id.
kernel_marketplace_uninstallC
Uninstall a marketplace item.
Inputs: id (required).
kernel_meta_cost_reportB
Top-N tools by accumulated dollar cost. Sourced from rolling p50 stats the cost router maintains across runs. Returns enabled=false when the cost router isn't wired in.
Inputs: limit. Returns: rows, enabled
kernel_meta_elicit_confirmA
Server-initiated elicitation demo. Asks the connected client to display a yes/no form and echoes the user's choice. Returns action: "unsupported" (with a reason) when the client didn't declare the elicitation capability — every real tool that uses elicitation must handle that branch explicitly.
Inputs: message (required), default_value. Returns: action, reason, confirmed
kernel_meta_render_cardA
Render a card as an MCP-application UI surface. Returns both a plaintext summary (for CLI / legacy clients) and an HTML body (for web-based clients that opt into the ui content type — Claude Desktop, ChatGPT, web harnesses). Use this as a template for any domain tool that wants to ship a real surface instead of pasting markdown — wire uiResult(...) from core/helpers.ts.
Inputs: title (required), body, items, accent. Returns: bytes, mimeType, rendered
kernel_models_apply_migrationA
Apply ONE model migration: replace a gone model with a new one in either a global config key or a per-agent model_chain. Exactly one of configKey / agentId must be given. This is the gated action behind the discovery cron's suggestions — nothing changes until you call it.
Inputs: to (required), from (required), slug (required), agentId, +1 more.
kernel_models_catalogA
List LLM models discovered per provider by the model-discovery cron. Filter by provider slug and/or status (available | gone). Shows when each model was first/last seen.
Inputs: slug, status.
kernel_models_pending_migrationsA
List configured model references (global config + per-agent model_chain) that point at a model the discovery cron has marked 'gone' upstream — these would 404/403 mid-run. Each entry includes a suggested successor. Read-only: apply with kernel_models_apply_migration.
Inputs: no named parameters.
kernel_office_createA
Create or refresh a whole office (department) in one declarative call: flow + agents + optional chains, cron and home repo. Agents get smart defaults — with repo set they become claude_code executors with native FS tools jailed to that cwd. Idempotent (flow matches by name, agents by slug). The office appears in the 3D agents-flow view immediately.
Inputs: name (required), agents (required), cron, repo, +4 more.
kernel_office_pack_exportA
Export what an office's agents learned (their active, general learnings above a confidence floor) as a knowledge pack: JSON or Markdown, sorted so exporting again gives a clean git diff. Emails, phone numbers, tokens and home paths are blanked unless redact=false. Returns the file's content.
Inputs: office (required), format, redact, min_confidence. Returns: object
kernel_office_pack_importA
Bring a knowledge pack (the JSON or Markdown that kernel_office_pack_export makes) into an office, for review. Lessons are matched to the office's agents by name (or by role when one agent has it; agent_map overrides), compared with what they already know, and staged — none reaches an agent until accepted with kernel_office_pack_review. Accepted lessons start at confidence 0.6 at most.
Inputs: pack (required), office (required), source, agent_map. Returns: object
kernel_office_pack_reviewA
Review staged pack lessons. With only import_id it lists them; accept and reject take item ids or "all" (every pending one). Without import_id it lists the imports, with how many lessons still wait. Accepting makes the lesson an ordinary learning of its agent.
Inputs: accept, office, reject, import_id. Returns: object
kernel_outbox_listB
List outbox drafts (default: pending). Approving happens only in the dashboard.
Inputs: status, project.
kernel_outbox_proposeA
Propose something that leaves Kernl (a post, an email, a message, a social-network post) as a DRAFT for the user to approve. Inside a project run the account must be linked to that project. Nothing is published until a human approves it. Social network post or reply: channel "social_post", account_ref "social:self", payload { text: string, reply_to?: string (post id), forum_id?: string, tags?: string[] }.
Inputs: channel (required), payload (required), account_ref (required), scheduled_for.
kernel_panel_record_appendB
Append one event to a collection of YOUR office's panel (e.g. a state change for the office timeline). The key is generated.
Inputs: data (required), collection (required).
kernel_panel_record_putB
Create or replace one record in a collection of YOUR office's panel (shown to the operator in the office panel). Use a stable key (e.g. the issue key).
Inputs: key (required), data (required), collection (required).
kernel_places_listC
Known places, newest first. missing: true lists items that name a place but have no coordinates yet.
Inputs: kind, limit, missing. Returns: object
kernel_places_nearA
What is near a place: events, trips, hotels and travel activities within a radius, nearest first, with the distance in km. where is coordinates ("-34.60, -58.38"), a map link, the name or address of a known place, or — when the geocoder is on — any address. Items only count once they have coordinates (from a map link, set by hand, or geocoded); kernel_places_list with missing=true shows the rest.
Inputs: where (required), to, from, kinds, +2 more. Returns: object
kernel_places_searchA
Search businesses on Google Maps by kind and place (e.g. query 'clínicas', location 'Córdoba, Argentina'). Returns name, address, phone, website, rating and a Maps link. Read-only; up to 60 results.
Inputs: query (required), limit, location, radius_km.
kernel_places_setA
Set where something is, by hand. For an item: kind + ref_id (an event, trip, accommodation or activity id). For a place of your own (home, office, a gym): kind 'manual' with a name. Takes lat/lng or a map link; a hand-set place is never overwritten by a sync.
Inputs: kind (required), lat, lng, link, +3 more. Returns: object
kernel_places_syncA
Re-read events and travel for places, take coordinates from their map links and — when the geocoder is on — look up up to geocode addresses that still have none.
Inputs: geocode. Returns: object
kernel_plan_executeA
Run a plan that previously passed kernel_plan_validate. When the plan touches non-reversible tools, the caller MUST either pass a matching approval_token (from validate) or set prompt_user: true to drive an interactive elicitation. Returns one outcome per node with status, duration, and the per-call receipt when attestation is on.
Inputs: plan (required), prompt_user, approval_token. Returns: object
kernel_plan_validateA
Validate + simulate a plan (DAG of tool calls). Pure: nothing executes. Returns issues (cycles, dangling deps, unknown tools), estimated_cost (sum of per-node p50s, latency = critical path), side_effects_preview, and requires_approval (true when any node calls a non-reversible tool). Pair with kernel_plan_execute.
Inputs: plan (required). Returns: object
kernel_projects_assign_officeC
Make an office serve a project (or pause/update its settings for it).
Inputs: flow_id (required), project (required), active, settings.
kernel_projects_createC
Create a project with its brief (value_prop and audience are required).
Inputs: name (required), slug (required), brief (required).
kernel_projects_getA
Show one project: brief, linked resources and the offices that serve it.
Inputs: project (required).
kernel_projects_linkB
Link an existing resource (social/email account, repo, task project, workspace, GitHub or GitLab connection) to a project. A GitHub/GitLab connection linked to a project is reserved for it: its repos use that one, and no other project's repo can.
Inputs: kind (required), ref_id (required), project (required).
kernel_projects_listA
List projects (products/businesses offices work for) with status, connector state and pending drafts.
Inputs: flow_id.
kernel_projects_pullC
Pull the project's connector snapshot now (institutions, waitlist).
Inputs: project (required).
kernel_research_digestA
Summarize a large source (a kernel tool's output or an inline list) WITHOUT loading the raw rows into your context. Ranks to top-k (when query set), chunks, runs a bounded map-reduce with concurrency + cooldown caps, and returns a grounded digest with citations. Use this instead of listing a big inventory and summarizing it yourself.
Inputs: source (required), map_instruction (required), reduce_instruction (required), k, +7 more. Returns: digest, tokens, degraded, citations, +3 more
kernel_skill_loadA
Load the full body of a procedural skill the agent has attached. Call this when a user request matches a skill listed in the system_prompt's 'Available skills' section, to read the step-by-step playbook before acting.
Inputs: slug (required), file, query.
kernel_store_browseA
List the paid extensions available in the Kernl store and show which ones your current license already unlocks. Read-only.
Inputs: no named parameters. Returns: object
kernel_store_installA
Download and install a paid extension from the Kernl store. Requires a license that includes the extension; the license authenticates the download. Installs the signed .kernl and activates it if entitled.
Inputs: slug (required). Returns: object
kernel_store_updateA
Check the Kernl store for newer versions of your installed, licensed extensions and apply them in place. Only touches extensions you've already installed and your license covers — never installs anything new. Free (no license) is a no-op. Manual trigger; nothing runs automatically.
Inputs: no named parameters. Returns: object
kernel_today_cardA
One-call snapshot of your day, returned as TEXT + structured JSON + an HTML 'ui' block. Aggregates: today's events, overdue+due-today tasks, pending email drafts, open trades and active session PnL. Capable clients (Claude Desktop, web harnesses) render the HTML card; CLI clients see the markdown fallback. Use this whenever the agent or human asks 'what does today look like'.
Inputs: accent. Returns: date, tasks, events, trading, +1 more
kernel_tool_describeA
Fetch the full input/output schema for a tool by name. Use after kernel_tool_search to load only the schemas you'll actually call. Returns the same shape that tools/list would emit for this single tool — minus the host function: this is purely metadata.
Inputs: name (required). Returns: name, tags, description, inputSchema, +1 more
kernel_tool_searchA
Search the kernel tool catalog by free-text query. Returns ranked matches (name + description + tags + score) without dragging their full input schemas into the context. Pair with kernel_tool_describe to fetch one tool's full schema on demand. Replaces the antipattern of dumping every tool into the context window.
Inputs: query (required), limit. Returns: total, matches
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
Loading tool schema changelog…
TDQS
Scored across 149 tools
There are several overlapping clusters: kernel_store_*, kernel_marketplace_catalog_* and kernel_marketplace_* all browse/install marketplace items, while extensions also have their own install/enable/uninstall path. Multiple ask/query/recall tools (graph_ask, brain_ask, brain_recall, facts_query, agents_ask_supervisor) and dashboard_morning vs today_card create real misselection risk. Descriptions help, but boundaries are not clean enough for reliable selection across 149 tools.
All tools use snake_case and a consistent kernel_ prefix, with clear module names such as config, agents, graph and brain. Most follow module_action_object or module_object_action, but verb placement varies (kernel_agents_list vs kernel_agents_add_trigger) and some are noun-only (kernel_today_card). These are minor deviations and remain readable.
149 tools is far beyond a manageable tool surface; even with kernel_tool_search and kernel_tool_describe, the set is too large for reliable context management and discovery. This is an extreme mismatch for a single MCP server.
Broad coverage exists for agents, config, chat, graph facts, extensions/marketplace, projects, outbox and panels, with many CRUD/lifecycle operations. However, core domains repeatedly referenced by dashboards and brain tools—tasks, notes, contacts, calendar events and email approval—lack direct CRUD tools, leaving agents unable to complete those workflows through this surface. Marketplace/store/extension paths also overlap rather than forming one clean lifecycle.
Maintenance
Related MCP Connectors
Persistent memory, knowledge graph, task management and more for AI agents via MCP.
Persistent, portable memory for AI assistants — your private memory graph, from any MCP client.
Governed personal world model and memory for your AI agent. Pair once, connect over MCP.
An MCP memory server. One memory your agents share — across models, devices and apps.
Related MCP Servers
- AlicenseNot gradedqualityAmaintenanceSelf-hosted MCP server giving AI agents persistent memory for personalization and context across conversations.103 PyPI283Apache 2.0
- AlicenseNot gradedqualityBmaintenanceSelf-hosted MCP server that gives coding agents persistent, code-aware memory with structural graph recall and blast-radius planning. It links experiential decisions to code locations and provides honest measurement instruments.Apache 2.0
- AlicenseNot gradedqualityCmaintenanceSelf-hosted, local-first knowledge graph and memory server for AI agents. Enables agents to persist, recall, and organize knowledge through MCP with automatic distillation, deduplication, and cross-linking.MIT
- AlicenseBqualityCmaintenanceA local-first open-source MCP server that acts as a personal secretary, memory manager, and automation hub—it syncs Calendar, Gmail, Canvas, GitHub, and Health into a typed temporal memory graph, and enables approval-gated write actions like creating events, drafting/sending mail, and filing issues, all with telegram/slack/CLI interfaces and a SQLite-backed audit trail.33Apache 2.0