satori
Click on "Install 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., "@satorireflect on the current session"
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.
satori
A self-learning loop for Claude Code — the model learns skills from its own sessions. Fully automatic, fully visible, fully reversible.

⚠️ Beta disclaimer
This is beta software I build for myself and share with the community as-is. It parses your session transcripts, stores lesson data locally and — by default, automatically — activates skills that will instruct your future Claude sessions. Every activation is announced in chat (⛩) and reversible in one call (
retire_skill), but do readserver.pyand watch what your agent learns. It works on my setup; I can't guarantee yours and take no responsibility for the skills your agent teaches itself. Want to pre-approve everything instead?SATORI_AUTO_APPROVE=0.
satori is an MCP server + hooks that give Claude Code a closed self-learning loop: user corrections and tool failures become lesson candidates, lessons become skill drafts, drafts become active skills — automatically, visibly, reversibly. Windows-native, works in Claude Desktop, zero bash wrappers.
Two principles you won't find together elsewhere: the server does only deterministic mechanics (parsing, counters, storage, validation) — the thinking is done by the calling model right in the session, no background LLM calls, no extra bills; and fully automatic, fully visible, fully reversible — validated drafts activate on their own, every loop event is announced in chat with a ⛩ marker, and retire_skill undoes any activation in one call (prefer a manual approval gate instead? SATORI_AUTO_APPROVE=0).
Features
4-stage loop — capture → decide → distill → curate;
reflect()is called several times per sessionUser correction = signal #1 — surfaces as a candidate after a single occurrence (Devin's mechanic); tool failures wait for recurrence
Patch-not-append — a recurring signal bumps
seen_countinstead of piling up rowsSKIP gate, forever — "not skill-worthy" verdicts are remembered; rejected noise never comes back
Fully automatic — a validated draft activates immediately (backup of anything it overwrites,
retire_skill= one-call undo);SATORI_AUTO_APPROVE=0switches to a manual staging gateThe trigger is sacred —
description: Use when ...is mandatory: recall works when a note says when to recall it, not what it doespinned_project — a lesson is global or pinned to one project; approve routes it to the right skills folder
Draft validation — frontmatter, size, secrets (also redacted at rest), prompt-injection markers (EN+RU)
FTS5 search over past sessions — "when did I fix exactly this error" finds the actual transcript
Curator — usage telemetry; unused drafts go stale in 30 days, archived in 90
Smart nudge hooks — silent by default; they speak only on a correction (instantly) or accumulated work; a declined nudge stays declined
Visible audit trail — every loop event surfaces in chat as a ⛩ marker line: what fired, why, what was staged or skipped
dream/wake integration — the dream-skill consolidation pass harvests satori's staging and promotes/retires drafts through its validator gate
Related MCP server: Claude Error Collector
Quick Start
Easiest — let Claude install it. Paste this message into Claude Code:
Install the satori self-learning loop from https://github.com/timoncool/satori:
1) clone the repo to a permanent location (not a temp dir — the MCP runs from it);
2) create a venv inside it and install the single dependency: fastmcp;
3) register the MCP in my .mcp.json (project or global) as "satori" with
command = absolute path to the venv python and args = [absolute path to server.py];
4) recommended: add the three nudge hooks (UserPromptSubmit / Stop / SessionEnd,
all calling hooks/nudge.py with the venv python — exact JSON is in the README
"Quick Start" step 3) into ~/.claude/settings.json, PRESERVING my existing hooks;
5) smoke-test: import server in the venv and show me what got configured;
then remind me to restart Claude Code / Desktop so the MCP and hooks load.That's it — Claude clones, wires configs, verifies and reports. Manual way:
Clone & install the one dependency
git clone https://github.com/timoncool/satori.git cd satori && python -m venv .venv && .venv\Scripts\pip install fastmcpRegister the MCP — in your project's
.mcp.json(or global config):"satori": { "command": "<path>\\satori\\.venv\\Scripts\\python.exe", "args": ["<path>\\satori\\server.py"] }(Optional) nudge hooks — three hooks onto one script in
~/.claude/settings.json:"UserPromptSubmit": [{"matcher": "", "hooks": [{"type": "command", "command": "<venv-python> <path>/hooks/nudge.py prompt-submit", "timeout": 10}]}], "Stop": [{"matcher": "", "hooks": [{"type": "command", "command": "<venv-python> <path>/hooks/nudge.py stop", "timeout": 10}]}], "SessionEnd": [{"matcher": "", "hooks": [{"type": "command", "command": "<venv-python> <path>/hooks/nudge.py session-end", "timeout": 60}]}]Restart Claude Code / Desktop.
How it works
session transcript
│ (hook/tool call — parsing costs 0 tokens)
▼
① capture reflect() reads what's new since the stored offset: corrections,
failures, fix-after-fail, complex segments (≥12 calls + ≥2 edits)
▼
② decide the model judges candidates (corrections after 1×, the rest after 2×):
noise → skip_lesson (forever), worthy → a draft
▼
③ distill submit_draft → validated, provenance-stamped, staged AND auto-activated
into ~/.claude/skills/ (or the pinned project). ⛩ announced in chat;
retire_skill = one-call undo. Manual gate: SATORI_AUTO_APPROVE=0
▼
④ curate usage telemetry, stale at 30d, archive at 90dHooks (all optional, all silent by default): UserPromptSubmit — on a correction injects one line "fix it, then reflect" (series-deduplicated); on ≥25 accumulated tool calls — same, and repeats only after the next full threshold; Stop — same threshold at turn end; SessionEnd — silent capture directly in Python, no model involved at all. When a nudge does fire, the model opens its reply with a visible ⛩ satori: ... marker and reports what was recorded — you always see the loop working.
Anti-pollution by construction: the loop never writes into Claude's memory (only its own SQLite + staging); context injections are one line and only when warranted; an ignored nudge doesn't nag.
Tools
Tool | What it does |
| stages 1+2+4: signals since offset, aggregation, candidates + similar existing skills, curator tick |
| permanent SKIP |
| draft into staging with full validation |
| one-call undo: live skill + staging copy → archive, pre-activation backup restored |
| manual-mode gate ( |
| FTS5 over all past transcripts |
| loop telemetry |
Configuration (env)
Variable | Default | Meaning |
| 1 | fully automatic activation; 0 = manual staging gate |
| 2 | recurrences before a candidate (except corrections) |
| 1 | user corrections surface immediately |
| 12 / 2 | "complex segment" threshold |
| 30 / 90 | draft aging |
| 25 | accumulated work before a nudge |
| 10 / 3 | nudge cooldowns |
| 1 | Stop-hook nudge (0 = off) |
Works best with dream-skill
dream-skill is this project's sibling — memory consolidation for Claude Code (dream = read-only pass, wake = gated apply, full rollback). satori handles procedural memory (skills), dream/wake handles factual memory (notes, rules, index) — and they meet in the middle:
satori runs fully automatic inside sessions; dream is the periodic auditor: its Skill harvest phase reads satori's staging + usage telemetry and proposes
retire_skillfor stale/duplicate self-taught skills (andpromote_skillif you run satori in manual mode)dream's validator re-checks every self-taught skill against a hard checklist:
Use whentrigger, no injection markers, no duplicateswake applies the audit, logs everything, and its
rollbackrestores skills too
Each works standalone; together the cycle is complete: сон → пробуждение → прозрение (dream → wake → satori).
Standing on shoulders
An honest list of sources: Hermes Agent (Nous) — the 4-stage cycle, FTS5, periodic self-reflection; claude-self-improving-skills — complexity thresholds, patch-over-create, curator, telemetry, "declined stays declined"; claude-evolve — objective signals, patch-not-append; claude-harness-hermes — permanent SKIP, redaction at rest; Devin (Cognition) — corrections at threshold 1, the trigger as a sacred field, pinned scoping, injection scanning; dream-skill (ours) — the staging gate.
Other Projects by @timoncool
Project | Description |
Memory consolidation for Claude Code — dream/wake with a gate | |
TRAIL — cross-MCP content tracking protocol | |
Full Telegram Bot API as MCP server | |
Civitai API as MCP server | |
Your life in weeks — interactive calendar |
Authors
Nerual Dreming — Telegram | neuro-cartel.com | ArtGeneration.me
Support the Author
I build open-source software and do AI research. Most of what I create is free and available to everyone. Your donations help me keep creating without worrying about where the next meal comes from =)
All donation methods | dalink.to/nerual_dreming | boosty.to/neuro_art
BTC:
1E7dHL22RpyhJGVpcvKdbyZgksSYkYeEBCETH (ERC20):
0xb5db65adf478983186d4897ba92fe2c25c594a0cUSDT (TRC20):
TQST9Lp2TjK6FiVkn4fwfGUee7NmkxEE7C
Star History
License
This server cannot be installed
Maintenance
Related MCP Servers
- AlicenseAqualityBmaintenanceMCP server to dynamically load Claude Code skills into AI agentsLast updated57914MIT
- FlicenseBqualityFmaintenanceAn MCP server that enables Claude to learn from user corrections by recording them as persistent rules in CLAUDE.md files. It manages project-specific or global guidelines to ensure the assistant avoids repeating the same mistakes in future sessions.Last updated24
- AlicenseAqualityCmaintenanceAn MCP server that makes your AI agent learn and evolve by capturing feedback as reusable, persistent skills that improve over time.Last updated101MIT
- AlicenseAqualityDmaintenanceAn autonomous MCP server that uses the Claude Code CLI to solve coding problems without permission prompts.Last updated1MIT
Related MCP Connectors
Hosted MCP server connecting claude.ai, ChatGPT and other AI apps to your own computer
Augments MCP Server - A comprehensive framework documentation provider for Claude Code
Paid remote MCP for Claude Code skill update gate MCP, structured receipts, audit logs, and reviewer
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/timoncool/satori'
If you have feedback or need assistance with the MCP directory API, please join our Discord server