thread-keeper MCP server
io.github.po4erk91/thread-keeper·v0.13.1·12 starsMulti-agent shared brain across Claude, Codex, Antigravity, Gemini, Copilot, and VS Code.
12 stars157 downloads/wk
Reviews
Write oneNobody has reviewed thread-keeper yet.
If you have run it, two minutes of your experience saves the next person an afternoon.
thread-keeper tools (100, 17 write)
write = sends, deletes, buys or postsRead from the package source without running it. The installed server may list more.
accept_candidateMaterialize candidate into its target table. target_kind overrides candidate's kind. thread_id optional.
agent_memory_cleanupTrim ThreadKeeper memory and clean orphan/over-limit server processes.
agent_statusShow autonomous learning loops with state, backlog, last pass, and RSS.
askwrite actionSend a question to a peer and wait synchronously for their answer.
briefCompact Claude-native memory brief. CALL AT THE START OF EVERY CONVERSATION.
broadcastwrite actionPost a message visible to ALL concurrent claude conversations.
candidate_review_runwrite actionFire one candidate-review pass.
candidate_review_statusShow candidate-reviewer configuration + last 5 passes + current pending queue size.
claim_pickupClaim a thread for self-initiated work. Marks it claimed by my cid.
consolidatePeriodic memory hygiene. dry_run=True (default) reports only.
contextRuntime context: session id, age, semantic on/off, db path, thread counts.
convene_panelSpawn a panel of independent agents to vote on a distillate or claim, filling the promotion quorum the way a second human otherwise would.
core_getReturn the full content of a single core-memory entry.
core_listList all core-memory entries, ordered by priority DESC then key.
core_removewrite actionDelete a core-memory entry by key.
core_setUpsert a core-memory entry. ALWAYS shown in brief, sorted by priority DESC.
curator_reviewFire one curator pass.
curator_review_statusShow curator configuration + last 5 passes + latest REPORT path.
curator_runwrite actionMove stale agent-created skills to archive.
dialectic_claimRegister a new claim about the user. Optionally seed with first piece of evidence — pass the supporting (or contradicting) quote in `evidence` and set `evidence_kind` to 'support' (default) or 'contradict'.
dialectic_evidenceAttach evidence to a claim. `kind`: 'support' | 'contradict'.
dialectic_mine_runwrite actionFire one mechanical capture pass now (force=True runs even when the miner daemon interval is 0).
dialectic_mine_statusMiner config + buffer sizes + last 5 capture passes.
dialectic_observation_resolveMark a dialectic_observations buffer row 'processed' so the validator never re-interprets it. Called by the validator child after it has written (or deliberately skipped) the observation's claims/evidence.
dialectic_reviewList active claims filtered by confidence floor and optional domain. Retired/superseded claims are omitted.
dialectic_supersedeRetire `old_claim_id` and register `new_claim` that refines or replaces it. The old claim moves to state='superseded' with superseded_by=<new_id>; its evidence is preserved (not deleted).
dialectic_synthesisTerse rendering of accumulated beliefs about the user, grouped by domain. Used as brief() input. Excludes low/disputed claims and non-active states. Returns at most 12 lines.
dialectic_validate_runwrite actionFire one validator pass. dry_run shows pending count + would_spawn without spawning or advancing the cursor.
dialectic_validate_statusValidator config + pending observation count + last 5 passes.
dialog_searchSearch ingested Claude Code transcripts.
distillMark content as worth carrying forward (distillation channel).
evolve_applyImplement a PROMOTED + not-yet-applied format-evolution suggestion.
evolve_apply_curator_reportApply a Curator advisory report using the existing evolve_applier role.
evolve_apply_roadmap_issueImplement one open GitHub issue through the evolve_applier role.
evolve_apply_statusShow evolve-applier config + curator/evolve queues + running applier + the last 5 apply passes.
evolve_mark_appliedMark a format-evolution suggestion as APPLIED — called by the evolve_applier child after it has opened the PR.
evolve_mark_curator_report_appliedMark a Curator report as processed by the evolve_applier child.
evolve_mark_roadmap_issue_appliedMark a roadmap issue as handed off — called by evolve_applier only after it has opened a real pull request for that issue.
expand_conceptFull description + triangulation_notes for one concept.
export_distillateswrite actionWrite distillates with vote_sum >= min_vote to a jsonl bucket. Marks them exported_at so the same item isn't re-exported next call. Default output: /tmp/thread-keeper-tasks/distillates.jsonl.
extract_recentScan recent dialog_messages and enqueue heuristic candidates.
find_invariantsFind recurring assistant-side patterns that survive prompt variance.
find_missed_spawnsFind assistant responses that decomposed into independent blocks but were answered linearly (no spawn() call nearby).
inboxRead signals addressed to me (whispers + broadcasts).
ingestIngest new Claude Code transcripts. Auto-runs on session start; call manually for backfill or after long absence.
lesson_appendMaterialize a class-level lesson into ~/.threadkeeper/lessons.md.
lesson_getReturn the full body of one lesson by slug. Useful when `lesson_list` surfaced something you want to read in full.
lesson_listCompact listing of materialized lessons, newest first.
lesson_removewrite actionRemove one materialized lesson section by slug.
linkwrite actionCreate a typed edge between two entities.
list_conceptsList registered concepts, filtered by minimum confidence.
live_statusSee what OTHER concurrent Claude sessions did since this session last polled. Call when brief() shows live=N where N>0, or proactively when you suspect a parallel instance is working on something relevant. Advances this session's cursor by default; pass advance_cursor=False to peek without consuming.
memory_guard_checkwrite actionRun one memory-guard pass now.
memory_guard_reclaimUnload thread-keeper model/caches now.
memory_guard_statusShow memory-guard thresholds and current thread-keeper RSS rows.
mp_cleanupwrite actionKill orphaned thread-keeper processes (parent gone AND heartbeat stale for > 5 minutes). Defaults to dry-run — pass dry_run=False to actually send signals. force=True uses SIGKILL instead of SIGTERM.
mp_dashboardOne-call rollup of the whole thread-keeper system: store sizes, how often each autonomous loop fired (in the last `window_days` and 30d), and what those loops actually produced (skills materialized, candidates accepted vs rejected, tier promotions). Read-only; no spawn, no mutate.
mp_healthDiagnostic snapshot of every running thread-keeper server process on this machine. Shows pid, parent status, RSS, heartbeat age, and whether each is classified as orphaned (parent gone + no fresh heartbeat from its session).
neighborsBFS the graph from a starting node up to `depth` hops away. Returns each visited node with its kind, id, and a short content snippet pulled from its native table. Both directions of edges traversed.
noteAdd a note to a thread. Write terse, optimized for future-Claude.
open_dialog_windowOpen a Terminal window that tails the live cross-session signal log.
open_threadOpen a thread. `question` should be terse (5-15 words, the open question). `parent_id` optional — pass an existing ID like 'T7f3' for a child. Returns new ID.
peersList concurrent claude conversations active in the last `window_min`.
pending_distillatesList distillates with vote_sum >= min_vote, not yet exported.
pickup_candidatesSurface unresolved threads that are stale and unclaimed — candidates for self-initiated pickup when context is free.
presenceList concurrent Claude sessions with heartbeats within threshold (default 5 min). Excludes self. Useful for understanding who else is currently active before making changes.
record_attemptRecord a self-test outcome. Updates reliability aggregates.
register_conceptRegister a concept that lacks a precise human name.
register_probeRegister a self-test probe: a known weak-spot task with a verifier.
reject_candidateMark rejected. Reason appended to rationale for heuristic tuning.
release_pickupRelease a claim. Only the claimant can release.
reliability_forReliability stats for one category over a window.
respondAnswer a specific question (signals.id) with a directed whisper.
review_candidatesstatus ∈ {pending, accepted, rejected, all}. Newest first.
review_threadSpawn a background review of a closed thread to extract memory/skills.
run_probewrite actionSurface a registered probe for self-attempt. Returns the prompt and the grader hint. After attempting, call record_attempt(category, success=true/false, probe_id=...) — the harness doesn't auto-grade because attempting and judging are the same model.
search_via_parentDelegate a semantic search to the parent process (or any peer with embeddings loaded). For light children spawned with THREADKEEPER_NO_EMBEDDINGS=1, this is how you reach into the shared DB's semantic index without loading PyTorch yourself.
session_endMark current session ended with optional terse summary.
shadow_review_runwrite actionFire one shadow-review pass.
shadow_review_statusShow shadow-review configuration + last 5 passes.
skill_listList skills with telemetry. Format: <name> tier=<hypothesis|observed|validated> origin=<...> state=<active|stale|archived> uses=N fg_uses=N views=N patches=N wrong=N pinned=0/1 last_active=<age>
skill_managewrite actionCreate, edit, patch, or delete skills under the primary skills root.
skill_recordRecord usage telemetry for a mirrored skill.
spawnspawn_budget_setOverride the spawn-budget cap for this process (in MB). Set 0 to disable enforcement. Does NOT persist across restarts — set THREADKEEPER_SPAWN_BUDGET_MB env for persistence.
spawn_budget_statusReport current spawn-budget usage: cap, used, free, plus per-running-task RSS. Used to decide whether another spawn() will be admitted.
spawn_statusShow which CLI thread-keeper detected as its host, and which CLI each spawn role resolves to (after env + file overrides). Use to sanity-check spawn config when you want loops to fire through a specific agent.
style_setSet a stylistic running rule. Examples: lang=ru | prose=lean | allow=half-baked,weird | deny=sycophancy,headers
tag_signalManually attach a signal to a task. Useful when retroactively building a task-thread (auto-tagging happens at signal-emit time when the cid matches a known spawned_cid).
task_logsRead tail of a spawned task's captured stdout/stderr log.
task_threadReplay a spawned task as a chronological thread: every signal tagged with the task_id (or to/from the task's spawned_cid), plus optionally notes added during the task window.
tasksList spawned tasks: id, pid, status, elapsed, spawned_cid (if linked), prompt prefix. Refreshes liveness and resolves spawned_cid lazily.
tournamentSpawn N children with different roles on the same prompt, then collect their answers via a tagged broadcast and return a comparison.
unlinkwrite actionRemove an edge by id.
verbatim_userCapture a user quote worth surfacing in future briefs. Use when the user's exact phrasing matters (sharp reframes, decisions, pushback).
vote_distillVote on a distillate, weight ∈ [-1, +1]. One vote per cid; re-voting overwrites your previous vote. Updates aggregate vote_sum/vote_count.
waitBlock until a new signal arrives for me or `timeout_s` elapses.
weak_spotsList categories ranked by recent failure rate (min 3 attempts in 30d), plus registered probe categories with no attempts yet (= unknown, equally important to test).
whisperwrite actionPost a message visible only to the specified conversation_id.
whoamiReturn this conversation's detected conversation_id + how we know.
Public scan report
scanner v0.1.9 · 2026-09-27 · same rubric, same numbers if you re-run it
- Code scan82 source files scanned25/25
- –Live reliabilityno gateway calls yet and no remote to proben/a
- –Tool poisoningtools not inspected (local package is not executed); not countedn/a
- Auth qualitylocal package, no credentials required12/15
- Maintenancelast push 0 days ago15/15
- Maintainer identityregistry namespace matches repository owner; GitHub account older than a year8/10
How thread-keeper compares
Against every graded AI and agents MCP server, from our own scans and uptime checks. Updated after each scan run.
- Safety score
- 92/100
- higher than 90% of 4,464 AI and agents servers
- Tools
- 100
- the typical AI and agents server has 6
- Tools that change things
- 17%
- typical: 0%. Fewer write tools means less an agent can break
- GitHub stars
- 12
- more than 86% of 2,697 AI and agents servers
- Downloads a week
- 157
- more than 71% of 1,515 AI and agents servers with a package
What its tools let an agent do: 79 read · 4 create · 15 change · 1 send or post · 1 run or deploy
Install thread-keeper in Claude Code, Cursor or VS Code
claude mcp add thread-keeper -- uvx threadkeeper
What the publisher says
From the thread-keeper repository's README, as published. We do not edit it. Read it on GitHub
thread-keeper
Multi-agent shared brain across Claude Code/Desktop, Codex, Antigravity CLI (agy), Copilot, and VS Code. Cross-session memory, self-improving skill loops, and inter-agent signaling — one local MCP server turns parallel agent instances into a coordinated multi-agent system instead of N isolated chats.
Every connected client (Claude Code, Claude Desktop, Codex CLI + desktop, Antigravity CLI, Copilot, every MCP-aware VS Code extension) shares one SQLite store, one set of threads, one user model, and one learning loop that improves the skill library autonomously over time.
The brief format is dense — structural tags, opaque IDs, ~6 KB per session-start injection. Optimized for agent consumption, not human reading.
Why
Every agent CLI starts cold. Context dies at session boundaries. Skills you taught Claude don't transfer to Codex. Threads you closed in yesterday's Antigravity chat are invisible to today's Copilot. Parallel agent instances running the same task don't know about each other and duplicate work or step on each other's writes.
thread-keeper is the substrate underneath. Three things that together make it more than a memory store:
claims about you. Survives session, restart, CLI swap. One agent records, every other agent (any CLI) reads. The brief injected at session start gives a new agent everything the previous one knew.
- Collective memory — threads, notes, verbatim quotes, dialectic
agents in parallel, each gets a self_cid + sees the same memory. broadcast / whisper / inbox / wait / ask / respond let concurrent sessions signal each other across CLIs. Parent / children / sibling agents become a coordinated swarm, not isolated chats.
- Multi-agent coordination — spawn primitive launches child
(auto-review on thread close, shadow-review daemon, extract harvester, candidate-reviewer, weekly Curator, and a thread-janitor that auto-closes idle threads so abandoned work reaches the harvest path — closing is reversible, a note reopens a closed thread) materialize class-level skills as the agents work. Adapted to multi-CLI: SKILL.md is the primary write target and gets mirrored to every known/configured skills root simultaneously (~/.claude/skills/, ~/.codex/skills/, ~/.gemini/config/skills/ for Antigravity, existing ~/.agents/skills/, extra roots from THREADKEEPEREXTRASKILLS_DIRS, and ~/.threadkeeper/skills/), with lessons.md as a fallback for CLIs without a native skills loader.
- Self-improving skill library — autonomous background loops
Shortened. The full README is on GitHub.
Nothing above is checked by us. What we check is on the safety report.
thread-keeper: common questions
- Is thread-keeper MCP server safe?
- Yes, by our scan: it is graded A (92/100). Read the thread-keeper safety report
- How do I install thread-keeper?
- It runs on your machine. Copy the Claude Code, Cursor, VS Code or Claude Desktop config from the install section.
- Does thread-keeper need an API key?
- Not as far as the registry entry and our scan can tell: no credentials are declared or required.
- Is thread-keeper maintained?
- The last commit was 36 days ago (2026-09-27). The latest release is v0.13.1.
- What can I use instead of thread-keeper?
- Servers from other publishers that do the same job: three.ws Brain MCP server, LLM Sandbox MCP server and PaperBanana MCP server.
- How does thread-keeper compare with other AI and agents MCP servers?
- safety score 92/100 (higher than 90% of 4,464 AI and agents servers); tools 100 (the typical AI and agents server has 6); tools that change things 17% (typical: 0%. Fewer write tools means less an agent can break). Full comparison.
Alternatives to thread-keeper
Same job from other publishers: the closest match first, then the best rated.
- three.ws BrainList LLM providers and run chat completions through the three.ws multi-provider router.not reviewedEstablishedB
- LLM SandboxSecurely run LLM-generated code in isolated containers across 7 languages and 3 container backends.not reviewedWidely usedA
- PaperBananaGenerate academic diagrams and statistical plots from text using multi-agent AI.not reviewedEstablishedA
- Agent-Native ChatMinimal chat-first app with durable threads, actions, and the app-agent loopnot reviewedEstablishedA
- SuperCompressCompress coding-agent context ~64%. Hosted Neural Keep MCP for Cursor/Claude/Codex.not reviewedEstablishedB