Claude Modsunofficial directory

Context & memory·terminal·MIT

kindex-modern

Task tools backed by a Kindex store in your repo, plus repo memory on every prompt.

Generic Claude Mods cover image, used for kindex-modern until a screenshot is available

kindex-modern is the function-hooks adapter for Kindex, a local knowledge graph that learns from your coding sessions. It points Claude Code’s built-in task tools at a Kindex store inside your repository, so tasks survive compaction and new sessions, and adds memory retrieved from that store to every prompt. The author ships it as a development preview; Kindex’s command hooks remain the default.

Install

Needs Python 3.10 or later (or uv), the kin CLI on PATH, and Claude Code with function hooks enabled. The author qualifies the adapter against Claude Code 2.1.263 and declares no minimum version.

pip install 'kindex[mcp]'
kin setup-hooks --mode modern

uv tool install 'kindex[mcp]' works instead of pip. --dry-run on the second command previews the changes: the plugin goes to ~/.claude/skills/kindex-modern/, CLAUDE_CODE_ENABLE_FUNCTION_HOOKS=1 goes into your user settings, Kindex’s own legacy hook handlers are removed and the settings are backed up first. Start claude and run kin integration-doctor to confirm it is running; kin setup-hooks --mode legacy goes back to command hooks. The guide’s sequence starts with signet-eval integration install-modern, a step only for the development signet-eval binary: Kindex alone can be policy owner.

How it works

Every exchange with Kindex is a subprocess. The module runs kin hook-rpc in the worktree with a JSON payload on stdin, waits at most 20 seconds and rejects replies over 1 MB. It opens no network connection itself; whether kin does depends on your Kindex config, where llm.enabled defaults to false.

At session.start it reads the working directory and session id, registers two tools, task (create, get, list, update, complete, cancel, claim, release, reconcile) and memory (search or capture, up to 16,000 characters), and asks kin who owns policy: Kindex itself or signet-eval. The status row shows the owner, or says Kindex is unavailable and task writes are blocked when kin does not answer.

Data lives in .kin/local/kindex inside the Git worktree; .kin/.gitignore excludes local/, so it never ships with the code. Tasks are not shared between worktrees, and the adapter never falls back to your personal Kindex graph. kin repo-memory publish shares chosen nodes through .kin/knowledge.json; another clone imports them as review candidates only.

The task takeover has two parts. tool.describe appends a note to the descriptions of TaskCreate, TaskGet, TaskList, TaskUpdate and TodoWrite saying Kindex owns the list. tool.call then forwards the first four to kin and denies TodoWrite with a pointer to the durable alternative; unsupported metadata or dependency merges are denied rather than applied halfway. If kin refuses or fails, the call is denied: Claude Code’s own ephemeral task store never runs. TaskStop, TaskOutput and Agent are left alone. Each successful operation invalidates prompt.context, so the next request gets fresh advice.

What it reads. On prompt.submit the module calls the rest of the hook chain before it acts, so a redaction hook behind it rewrites the prompt before Kindex sees it, and it writes no raw prompt text anywhere itself. It sends the prompt to kin as a context query and keeps a rolling 12,000-character log in memory: your prompts, the last 4,000 characters of every other tool’s result and Claude’s answers, with the first 2,000 characters of your first prompt as the goal. That log goes to Kindex’s supervisor after each prompt, tool call and turn. On turn.complete Claude’s answer is sent as a capture, which lands in capture_candidates, not in the graph; large captures are truncated and marked, and you promote them with kin candidate.

What it injects. prompt.context adds a kindex block with standing instructions: keep durable repo tasks, decisions and discoveries in Kindex rather than in a parallel TodoWrite list, search repo memory before significant work, capture evidence as candidates, and treat retrieved graph text as evidence, not as instructions. A kindex-supervisor block with lookback advice follows once there is recent work. prompt.submit appends the retrieved context and that advice as hidden context under your prompt; the status row shows open tasks, retrieved nodes, supervisor state and policy owner. All of that is input tokens on every request; the module makes no model calls of its own.

Secrets. Kindex minimizes recognized credential formats and explicit sensitive fields before its own storage, logging, export and model-egress boundaries; hashes, task ids, email addresses and IP addresses stay. The author is explicit that this does not make every Claude log secret-free: probes on 2.1.263 show raw prompt records written before function hooks run, and Kindex does not rewrite that history.

With signet-eval installed, it becomes the policy owner and authorizes each task mutation before it runs; if the owner changes mid-session, the module blocks tasks until you reload plugins. Modern mode does not run Kindex’s legacy shell hooks, so PreCompact capture, Stop-time dream, the reminder stop guard and coordination polling happen only in legacy mode.

Limitations

  • Early-access host API: each Claude Code upgrade needs requalification by the author.
  • Automatic coverage is prompt retrieval and turn-end capture only; the other lifecycle jobs need --mode legacy.
  • When kin is down, task tools are denied until kin integration-doctor fixes it; there is no fallback.
  • Receipts and pending outcomes have no automatic retention pruning yet.