kernlBLOCK
Self-hosted agent teams that do your work — and hand any LLM your real data (tasks, mail, calendar, finance) over MCP. No account, no cloud, nothing leaves your machine.
Overview
From the repository's own README, as read at the audited commit. Badges and raw HTML are left out.
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, no cloud, nothing leaves the box.
Install · Watch them work · Why Kernl · MCP integration · Website · Discussions
🎬 Watch them work
A real instance. 59 agents across twelve departments, work landing live. 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.
fdb936d0bc1fOBSERVED · 2026-10-11Connect
Built from this server's own package name, version and transport as found in its source — not copied from anyone's documentation, so it cannot drift against a page we do not control. Replace the environment placeholders with a token scoped to the least it needs.
claude mcp add extension-sdk --env ANTHROPIC_API_KEY=${ANTHROPIC_API_KEY} --env ANTHROPIC_AUTH_TOKEN=${ANTHROPIC_AUTH_TOKEN} --env BRAVE_API_KEY=${BRAVE_API_KEY} --env CINEMA_TMDB_API_KEY=${CINEMA_TMDB_API_KEY} -- npx -y @kernl/extension-sdk{
"mcpServers": {
"extension-sdk": {
"command": "npx",
"args": [
"-y",
"@kernl/extension-sdk"
],
"env": {
"ANTHROPIC_API_KEY": "${ANTHROPIC_API_KEY}",
"ANTHROPIC_AUTH_TOKEN": "${ANTHROPIC_AUTH_TOKEN}",
"BRAVE_API_KEY": "${BRAVE_API_KEY}",
"CINEMA_TMDB_API_KEY": "${CINEMA_TMDB_API_KEY}"
}
}
}
}Exposed tools (200)
389 read · 210 write · 36 destructive. Blast radius: 36 tools can delete or overwrite — an agent that can be talked into calling a tool can be talked into calling this one.
| Tool | Risk | Description |
|---|---|---|
A | read | d |
Archiver | read | Archives inbound emails older than 30 days (status=archived). |
Automations | read | Automated system checks and alerts (scheduled background jobs). |
Closer | read | cierra ventas |
Communications | write | Communications office: Gmail sync, Contacts sync, Calendar sync, Graph enrichment, and email triage. Serves every other office that needs inbox/CRM data. |
Constructora | read | |
Custom | read | My custom scene |
Demo | read | una oficina demo |
DevOps | read | Pipelines and infra. Subscribed to Incident wire. |
Discord | read | Discord bot for messaging and notifications in servers. |
Duplicate | read | |
Flights | read | Travel — flight search & itinerary scouting. |
Heural | read | Ventas y crecimiento |
Marketing | read | Genera y publica contenido |
Mattermost | write | Send notifications via Mattermost incoming webhooks. |
Monochrome | read | Pure grayscale aesthetic. Minimal and distraction-free. |
Nadia | read | |
Newsroom | read | Editorial team — assignments, fact-checks, copy review. |
Reporter | read | Writes drafts. Replies on inbox wake. |
SRE | read | Reliability engineer. Subscribed to Incident wire. |
Scout | read | Scout |
Slack | read | Slack bot with Socket Mode for messaging and notifications. |
Support | read | Customer triage. Subscribed to Incident wire. |
Telegram | read | Two-way messaging via Telegram Bot API with voice support. |
Test | read | A useful skill |
Torrent | write | Kernel-native channel for magnet-URI fan-out. Agents publish via notifier.send({channel: |
WebChat | read | Browser-based chat widget with WebSocket connection. |
WhatsApp | read | WhatsApp Web messaging via Baileys with media support. |
always_fail | write | Always fails — used to trigger abort. |
annotate | read | annotate by id |
boom | read | always errors |
briefing_generate | read | Generate a morning briefing with tasks, reminders, events, habits, learning progress, and training summary |
calc-implementer-llm | read | Writes a tiny shell calculator on demand. |
consume | read | |
create_record | write | Create a record (reversible — paired with delete_record). |
delete_record | destructive | Delete a record by id. |
demo-office | read | Demo workspace for MCP resources |
demo_tool | read | demo |
echo | read | echo back n |
engagements | read | One folder per target ( |
event_attendance_report | read | Generate an attendance reliability report for frequent event participants |
event_notify_summary | write | Generate post-event attendance summary to share with the group |
event_notify_upcoming | write | Format notification messages for upcoming events, ready to send via Telegram/WhatsApp/Mattermost |
event_pending_rsvps | read | List all upcoming events with pending RSVPs — people who haven |
get_current_weather | read | Get the current weather in a given location |
hello_say_hi | read | Returns a greeting. |
kernel_agents_add_learning | write | Manually add a learning/insight to an agent. High-confidence learnings are injected into the agent |
kernel_agents_add_trigger | write | Add an event trigger or schedule to an agent. Event triggers fire when a matching event occurs. Schedules run periodically. A schedule |
kernel_agents_ask_supervisor | read | Ask the chief about a doubt you can |
kernel_agents_call_meeting | read | Call a group meeting with other agents. You (the caller) become the moderator. |
kernel_agents_chain | write | Create a declarative chain between two agents. When the source agent completes, the target agent is automatically triggered. |
kernel_agents_create | write | Create a new autonomous agent definition with system prompt, goal template, tool permissions, and LLM config |
kernel_agents_delete | destructive | Soft-delete an agent (sets active=0, preserves history) |
kernel_agents_directory | read | 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. |
kernel_agents_factory_finalize | read | 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 |
kernel_agents_feedback | write | Rate an agent run and provide feedback. The agent learns from feedback to improve future runs. |
kernel_agents_flows_create | write | 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. |
kernel_agents_flows_list | read | List active flows (offices / departments). Use this before creating a new one to avoid duplicates. |
kernel_agents_flows_set_repo | write | 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. |
kernel_agents_get_skills | read | List the procedural skills attached to an agent, with descriptions and token estimates. |
kernel_agents_history | read | List past runs for an agent |
kernel_agents_inbox | read | Read an agent |
kernel_agents_inbox_ack | read | Acknowledge office-inbox letters you have finished handling. Unacknowledged letters are |
kernel_agents_invoke | write | Invoke another AI agent by its UUID and wait for its result. |
kernel_agents_list | read | List all agent definitions, optionally filtered by active status |
kernel_agents_list_subscriptions | read | List active conversation subscriptions for an agent. Useful before subscribing |
kernel_agents_list_triggers | read | List event triggers, schedules, and chains for an agent |
kernel_agents_memory | read | Read an agent |
kernel_agents_post_to_colleague | write | Leave an async message in another agent |
kernel_agents_questions_answer | read | Chief only. Answer a question in triage: pick one of its options by 0-based |
kernel_agents_questions_escalate | read | Chief only. Hand a question in triage to the human, with a one-line reason they will read. |
kernel_agents_questions_triage_list | read | Chief only. List the office agents |
kernel_agents_remove_trigger | destructive | Remove an event trigger or schedule from an agent |
kernel_agents_resume | write | Resume an interrupted agent run from its last checkpoint (native agents only). |
kernel_agents_run | write | Manually trigger an agent run with a specific goal. Returns the run result. |
kernel_agents_set_skills | write | Attach (or replace) the procedural skills loaded by an agent. Each slug must reference |
kernel_agents_stats | read | Get performance stats for an agent: success rate, avg tokens, top tools, common errors, learnings |
kernel_agents_status | write | Get the status and step-by-step log of an agent run |
kernel_agents_subscribe_conversation | read | Subscribe an agent to a conversation. Once subscribed, every new turn in that |
kernel_agents_unchain | destructive | Remove a chain between two agents |
kernel_agents_unsubscribe_conversation | read | Cancel a conversation subscription so the agent stops being woken by new turns. |
kernel_agents_update | write | Update an agent definition (name, prompt, tools, config, active status) |
kernel_agents_workspace_apply | write | Declare what an office |
kernel_agents_workspace_get | read | Show an office |
kernel_api_add | write | Register a new API in the registry. Provide at minimum name and base_url. |
kernel_api_add_category | write | Add a new API category. |
kernel_api_add_endpoint | write | Document an endpoint for an API. |
kernel_api_categories | read | List all API categories. |
kernel_api_delete | destructive | Remove an API from the registry. |
kernel_api_discover | read | Find APIs matching an intent or tags. Useful for Universal Research Engine. |
kernel_api_endpoints | read | List documented endpoints for an API. |
kernel_api_get | read | Get details of a specific API by ID or slug. |
kernel_api_list | read | List APIs in the registry with optional filters. |
kernel_api_search | read | Search APIs by name, description, or tags. |
kernel_api_seed | read | Load or reload seed data for the API registry. |
kernel_api_set_key | write | Set encrypted API key for an API. Keys are stored securely using AES-256-GCM. |
kernel_api_stats | read | Get statistics about APIs in the registry. |
kernel_api_test | read | Test API availability by pinging its base URL. |
kernel_api_update | write | Update an existing API in the registry. |
kernel_attest_identity | read | Return this kernel |
kernel_attest_verify | read | Verify a previously-issued attestation receipt against its embedded |
kernel_attest_verify_chain | read | Verify a plan receipt + its child receipts as one chained audit. |
kernel_audit_cost_report | read | Token consumption and cost analysis. Shows which agents burn the most tokens, |
kernel_audit_logs | read | Query the agent event log for security analysis. |
kernel_boom | read | boom |
kernel_brain_decay | read | Maintenance: pull every learned weight a fraction back toward the 1.0 |
kernel_brain_feedback | read | Record a usage signal for a recalled item to teach the brain. |
kernel_brain_index | read | Index (or incrementally refresh) module rows into the unified semantic |
kernel_brain_recall | read | Unified semantic recall across ALL modules — tasks, notes, contacts, |
kernel_brain_stats | read | Coverage of the unified space: total items, count per kind, and per-source watermarks. |
kernel_chat_analyze | write | Run analytics on the concept graph. Shows top concepts by importance and community structure. |
kernel_chat_archive | read | Archive a chat episode. In future phases, this also generates a summary embedding. |
kernel_chat_concepts | read | List extracted concepts from chat conversations, ordered by gravity (cross-conversation importance). |
kernel_chat_context | read | Preview the cognitive context that would be retrieved for a query. Useful for debugging the retrieval pipeline. |
kernel_chat_history | read | Get message history for a chat episode. |
kernel_chat_list | read | List chat episodes, optionally filtered by status. |
kernel_chat_message | write | Send a message in a chat episode and receive the LLM response. The system automatically retrieves relevant context from memory (when available). |
kernel_chat_patterns | read | View detected temporal and behavioral patterns from chat conversations. |
kernel_chat_recall | read | Reinforce a memory node manually, boosting its strength against decay. Use this to mark a memory as important. |
kernel_chat_search | read | Full-text search across all chat messages. Returns matching messages with their episode context. |
kernel_chat_start | write | Start a new chat episode (conversation). Returns the episode ID to use with kernel_chat_message. |
kernel_cinema_get | read | Fetch the full metadata for a single archive.org title (description, subjects, runtime, watchlist state, rating, etc.). |
kernel_cinema_ingest_run | write | Trigger one ingest pass against the archive.org scrape API right now (same code path as the cron). Useful when the user wants to populate a fresh kernel without waiting 15 min. |
kernel_cinema_ingest_status | read | Report on the cinema catalog ingester: total titles, embedding backlog, recent runs per collection, embedder info. |
kernel_cinema_list | read | List titles from the local cinema catalog (archive.org mirror). Filter by collection, year range, watchlist, and free-text query. Use this for browsing the catalog without semantic search. |
kernel_cinema_publisher_trust | write | Set trust level for a subtitle publisher (Nostr pubkey, hex). Affects which subs the player surfaces by default. |
kernel_cinema_search | read | Semantic search over the cinema catalog. Returns titles ranked by cosine similarity to the query embedding (multilingual, Spanish-friendly via bge-m3). Use this when the user describes what they want in natural language instead of giving keywords. |
kernel_cinema_subs_list | read | List subtitles available for a movie: LOCAL (locally generated), FEDERATED (Nostr / archive.org index, may not be downloaded). Set refresh=true to fan-out to providers in real time. |
kernel_cinema_watched | read | Mark a title as watched (timestamps watched_at) or unmark it. |
kernel_cinema_watchlist | write | Toggle a title in the watchlist. Idempotent — set |
kernel_code_read | read | Read a source file from the project (read-only). |
kernel_code_run | write | Run a small JS script that can call other kernel tools via |
kernel_code_search | read | Search for a pattern in the project source code (grep). |
kernel_comms_add_account | write | Add an email account for sending/receiving. Supports Gmail (OAuth) and Resend (API key) providers. |
kernel_comms_add_recipients | write | Add recipients to a draft campaign. Can add by email list or from CRM contacts. |
kernel_comms_attach | read | Attach a file to a communication draft. Copies the file to ./data/attachments/{comm-id}/. Only works on drafts. |
kernel_comms_create | write | Create a new communication draft. If contact_id is provided, auto-fills recipients from contact email. Supports email, WhatsApp, Mattermost, X, Instagram, and LinkedIn channels. |
kernel_comms_create_campaign | write | Create an email campaign from a template. |
kernel_comms_create_template | write | Create an email template with {{variable}} placeholders. |
kernel_comms_delete_account | destructive | Delete an email account. Communications linked to this account will be unlinked. |
kernel_comms_delete_template | destructive | Delete an email template. |
kernel_comms_enrich_draft | read | Enrich an email draft with additional data. The AI will intelligently incorporate |
kernel_comms_fetch_email | read | Fetch a specific email from Gmail and store it as an inbound communication. |
kernel_comms_get | read | Get a communication with attachments and linked contact/task details. |
kernel_comms_get_campaign | write | Get campaign details with recipient list and send progress. |
kernel_comms_get_template | read | Get a template with full content and detected variables. |
kernel_comms_list | read | List communications with optional filters by channel, status, contact, or task. |
kernel_comms_list_accounts | read | List all configured email accounts with their provider and default status. |
kernel_comms_list_campaigns | write | List email campaigns with status and send progress. |
kernel_comms_list_templates | read | List email templates, optionally filtered by category. |
kernel_comms_preview_template | read | Preview a template rendered with sample data. |
kernel_comms_remove_attachment | destructive | Remove an attachment from a communication. |
kernel_comms_search_inbox | write | Search Gmail inbox using Gmail query syntax. Returns message summaries with sender, subject, date, and snippet. |
kernel_comms_test_account | read | Probe an email account |
kernel_comms_thread | read | View all messages in a communication thread, ordered chronologically. |
kernel_comms_update | write | Update a communication draft. Use for progressive composition: add subject, body, recipients, or change status. Only drafts and failed messages can be edited. |
kernel_comms_update_account | write | Update an email account |
kernel_comms_update_template | write | Update a template |
kernel_config_catalog | read | List all known configurable settings with their descriptions, types, and categories. |
kernel_config_get | read | Get the current value of a specific configuration setting by its env-var key |
kernel_config_list | read | List all kernel configuration settings, optionally filtered by category. |
kernel_config_set | write | Set a configuration value. Changes take effect immediately (no restart needed) |
kernel_config_set_many | write | Set multiple configuration values at once. Useful when applying a group of |
kernel_crm_add_contact | write | Add (or merge) a contact in the Personal CRM. Idempotent by normalized phone + email — calling twice for the same person enriches the existing row instead of duplicating. Optional |
kernel_crm_find | read | Search contacts by name, email, company, or notes. Fuzzy matching. |
kernel_crm_get_contact | read | Get detailed info about a contact including recent interactions. |
kernel_crm_leads | read | Query the CRM lead pipeline — contacts whose |
kernel_crm_list_contacts | read | List all contacts, optionally filtered by relationship type. |
kernel_crm_log_interaction | read | Log an interaction with a contact (email, call, meeting, message, social). Updates last_interaction and Neo4j graph. |
kernel_crm_search_contacts | read | Search the address book for contacts by name or email. |
kernel_crm_set_do_not_contact | write | Mark a contact as |
kernel_crm_set_lead_status | write | Move a lead through the pipeline: |
kernel_dashboard_evening | read | Evening review: what was completed today, what |
kernel_dashboard_morning | read | Morning briefing: today |
kernel_dashboard_weekly | read | Weekly planning summary: tasks completed this week, open items, upcoming deadlines, contact activity. |
kernel_digest_preview | read | Preview a daily digest without sending it. kind=evening → tomorrow |
kernel_digest_send_now | write | Build and immediately deliver a digest to the configured channels (Telegram/WhatsApp) plus the dashboard. kind=evening (tomorrow) or morning (today). |
kernel_email_analyze | read | Analyze a fetched email (by comm_id) using AI and extract actionable suggestions (tasks, reminders, contacts, shopping items). Suggestions require approval before being created. |
kernel_email_approve | write | Approve a pending email suggestion and immediately create the corresponding entity (task, reminder, contact, or shopping item). Optionally override fields before creating. |
kernel_email_classify | read | Stamp provenance / importance / action_required / stakeholder / topic_tags on an inbound email. |
kernel_email_dismiss | read | Dismiss a pending email suggestion without creating anything. |
kernel_email_drafts | read | List your unsent email drafts, newest first. Filterable by contact, task, or account. |
kernel_email_fetch | read | Fetch one Gmail message by id and persist it as an inbound Communication. Idempotent — re-fetching the same id returns the existing record. |
kernel_email_inbox_recent | read | List recent INBOUND emails already stored in the kernel (e.g. fetched via |
kernel_email_pending | read | List all pending email analysis suggestions awaiting approval. Returns suggestions with their IDs for use with kernel_email_approve or kernel_email_dismiss. |
kernel_email_search | read | Search Gmail inbox. Returns structured message summaries (gmail_id, from, from_address, subject, snippet, labels). |
kernel_email_send | write | |
kernel_email_sync_analyze | write | Fetch recent emails from Gmail inbox and run AI analysis to extract actionable suggestions. Call kernel_email_pending afterwards to review. |
kernel_email_thread | read | Return every Communication in a thread, chronologically. Use this when you need full conversation context before composing a reply. Reply to |
kernel_event_attention | read | What needs your attention RIGHT NOW: events that aren |
kernel_event_lifecycle | read | Unified verb for event lifecycle: open / cancel / complete / duplicate. Replaces the four |
kernel_event_rsvp_summary | read | Full RSVP picture for one event: typed attendees[] + pending[] + the attendance summary. |
kernel_event_schedule | write | Create an event and invite contacts in ONE call. Replaces the legacy create→invite_contacts |
kernel_event_today | read | Return every event that starts today (the kernel |
kernel_event_upcoming | read | Events scheduled within the next N days (default 7). Skips past and cancelled events. |
kernel_events_attendees | read | List all attendees for an event grouped by RSVP status. |
kernel_events_cancel | read | Cancel an event. |
kernel_events_complete | read | Mark event as completed and get final summary with attendance stats and costs. |
kernel_events_contact_history | read | Get a contact |
kernel_events_create | write | Create a new event (e.g., futbol 5, dinner, meeting). Set min/max_attendees to enforce group size requirements. |
Trust audit
BLOCKgrade F · trust 28/100 Do not install this without reading the findings. The audit found something that could harm you or your machine.
| Layer | What it checks | Result |
|---|---|---|
| L0 | Provenance & inventory | FAIL |
| L1 | Static analysis of the code | FAIL |
| L2 | Instruction surface (what it tells the agent) | FAIL |
| L3 | Class-specific surface | WARN |
| L4 | Behavioural (sandbox) | SKIPPED |
What the source does
- Filesystem
- declared (18 observation(s))
- Network
- declared (15 observation(s))
- Shell
- declared (9 observation(s))
- Dependencies
- not all pinned
- Secrets in source
- found
Findings (25)
Add a YouTube channel. Requires OAuth credentials: client_id, client_secret (Google Cloud project), and refresh_token. Run the OAuth dance manually once at https://developers.google.com/oauthplaygroun
stage-payload.sh
log.warn(`claude_code auto-eval (failed-path) failed for run ${run.id}: ${e instanceof Error ? e.message : String(e)}`);title: "Use of eval() — dynamic code execution",
title: "Use of new Function() — dynamic code execution",
title: "exec()/execSync() with string arg (command injection risk)",
/(?:send|mand[áa]|envi[áa]|upload|forward)[^\n.]{0,50}(?:~\/\.\w|\.env\b|id_rsa|\/etc\/(?:passwd|shadow))/i,"/.ssh/",
"/.aws/",
"/.gnupg/",
"id_rsa", "id_ed25519", "id_ecdsa", "id_dsa",
".env" ... urllib.request
{ cert: creds.cert, key: creds.key, requestCert: true, rejectUnauthorized: false, minVersion: "TLSv1.2" },const INVISIBLE = /[͏----\u{E0000}-\u{E007F}]/gu;Chandelier_02.glb
brass_vase_01.glb
coffee_table_round_01.glb
marble_bust_01.glb
potted_plant_02.glb
// Heuristic: Math.random() in same line as crypto/token/uuid/secret words.
if (t.beacon) t.beacon.rotation.y += dt * 9;
if (truck.beacon) truck.beacon.rotation.y += dt * 9;
beacon?: any;
const beacon = new T.Group();
beacon.position.set(-2.25, 2.5, 0);
Gates applied: critical_finding, no_behavioural_pass, undeclared_transfer.
fdb936d0bc1ffull audit observations/trust-audit/mcp-server/fastslack__kernl.json · Report an issue / request a re-scanAudit history
Every audit this server has had. A grade with a past is a grade somebody is still checking.
| Date | Source | Verdict | Grade | Score | Change |
|---|---|---|---|---|---|
| 2026-10-11 | fdb936d0bc1f | BLOCK | F | 28 | first audit |
Questions
What is the kernl MCP server?
Self-hosted agent teams that do your work — and hand any LLM your real data (tasks, mail, calendar, finance) over MCP. No account, no cloud, nothing leaves your machine.
What tools does kernl expose?
200 in total: 389 read-only, 210 that write, and 36 that can delete or overwrite (delete_record, kernel_agents_delete, kernel_agents_remove_trigger, kernel_agents_unchain, kernel_api_delete). Every one is listed on this page with its risk.
Is kernl safe to connect to an agent?
No — not without reading the findings first. The audit graded it F (28/100) and found 14 critical or high issues in the source. Each one is listed on this page with the file and line it is on. Separately from the audit: 36 of its tools can destroy data, so scope the token you give it to what you actually need.
What credentials does kernl need?
It reads ANTHROPIC_API_KEY, ANTHROPIC_AUTH_TOKEN, BRAVE_API_KEY, CINEMA_TMDB_API_KEY, CLAUDE_CODE_OAUTH_TOKEN, COMMS_INBOUND_TOKEN, DISCORD_BOT_TOKEN, FS_COMMANDER_KEY, GOOGLE_CLIENT_SECRET, GOOGLE_CSE_KEY, GOOGLE_PLACES_API_KEY and GROK_API_KEY from the environment. Give it a token scoped to the least it needs — an agent that can be talked into calling a tool can be talked into calling it with your credentials.
How does kernl run?
It speaks stdio and streamable-http, so it runs as a local process your client starts. It is published on npm as @kernl/extension-sdk.
How current is this page?
The grade is for one exact copy of the source (fdb936d0bc1f), read on 2026-10-11. The repository is watched and re-audited when it changes.