{"_id":"@eddacraft/kindling-adapter-claude-code","_rev":"4-5f1587ddfc9f61c21cbf638b3fd60414","name":"@eddacraft/kindling-adapter-claude-code","dist-tags":{"latest":"0.1.2"},"versions":{"0.1.0":{"name":"@eddacraft/kindling-adapter-claude-code","version":"0.1.0","keywords":["kindling","claude-code","claude","anthropic","adapter","hooks","session","ai","coding","tool-calls","memory","continuity"],"author":{"name":"EddaCraft","email":"hello@eddacraft.ai"},"license":"Apache-2.0","_id":"@eddacraft/kindling-adapter-claude-code@0.1.0","maintainers":[{"name":"joshuaboys","email":"josh@arkahna.io"}],"homepage":"https://github.com/EddaCraft/kindling/tree/main/packages/kindling-adapter-claude-code#readme","bugs":{"url":"https://github.com/EddaCraft/kindling/issues"},"dist":{"shasum":"35525eeae4dcdfbddeaf26ae29c40a7a9d553e9e","tarball":"https://registry.npmjs.org/@eddacraft/kindling-adapter-claude-code/-/kindling-adapter-claude-code-0.1.0.tgz","fileCount":35,"integrity":"sha512-p+6c5QzOSnkPZ7C20XJN2JdtDvZPH1IJLbZKep0ujCkeM7r6NGARrl9/w0iPtIFLQSVB1Bq3hiY7NzBAEAK6eQ==","signatures":[{"sig":"MEUCIQCXChl4Rqf5m0QVDKeyKrCamFgaM3SvKlcNtXKqtHInEQIgJMN0Ysnsx3sz6zE3t/VEH6MW976XSGCJdJNiqlyC0QY=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@eddacraft%2fkindling-adapter-claude-code@0.1.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":90533},"main":"./dist/index.js","type":"module","_from":"file:eddacraft-kindling-adapter-claude-code-0.1.0.tgz","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"scripts":{"lint":"eslint src","test":"vitest run","build":"tsc --build","clean":"rm -rf dist","test:watch":"vitest","type-check":"tsc --noEmit"},"_npmUser":{"name":"joshuaboys","email":"josh@arkahna.io"},"_resolved":"/tmp/bc6dd48928fc110c453a537efa22eeab/eddacraft-kindling-adapter-claude-code-0.1.0.tgz","_integrity":"sha512-p+6c5QzOSnkPZ7C20XJN2JdtDvZPH1IJLbZKep0ujCkeM7r6NGARrl9/w0iPtIFLQSVB1Bq3hiY7NzBAEAK6eQ==","repository":{"url":"git+https://github.com/EddaCraft/kindling.git","type":"git","directory":"packages/kindling-adapter-claude-code"},"_npmVersion":"10.8.2","description":"Claude Code adapter for Kindling - capture tool calls and session context via hooks for memory continuity","directories":{},"_nodeVersion":"20.20.0","dependencies":{"@eddacraft/kindling-core":"0.1.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^3.2.4","typescript":"^5.3.0","@types/node":"^20.11.0"},"_npmOperationalInternal":{"tmp":"tmp/kindling-adapter-claude-code_0.1.0_1770862698808_0.1494854034315114","host":"s3://npm-registry-packages-npm-production"},"deprecated":"DEPRECATED: this package is deprecated and will be removed at v1.0.0. kindling is now a Rust daemon; use @eddacraft/kindling (thin client) or the `kindling` binary. See https://github.com/eddacraft/kindling."},"0.1.1":{"name":"@eddacraft/kindling-adapter-claude-code","version":"0.1.1","keywords":["kindling","claude-code","claude","anthropic","adapter","hooks","session","ai","coding","tool-calls","memory","continuity"],"author":{"name":"EddaCraft","email":"hello@eddacraft.ai"},"license":"Apache-2.0","_id":"@eddacraft/kindling-adapter-claude-code@0.1.1","maintainers":[{"name":"joshuaboys","email":"josh@arkahna.io"}],"homepage":"https://github.com/EddaCraft/kindling/tree/main/packages/kindling-adapter-claude-code#readme","bugs":{"url":"https://github.com/EddaCraft/kindling/issues"},"dist":{"shasum":"eedad9b1234b8059d52e834bcdaf4b2eb9e48829","tarball":"https://registry.npmjs.org/@eddacraft/kindling-adapter-claude-code/-/kindling-adapter-claude-code-0.1.1.tgz","fileCount":35,"integrity":"sha512-O55ZdIeYBgA8kMUnHcf3hxLbfQeR1d98cDDpfQ1LnRBU1+1JHmd/eWAUFoZidDPHr6qkqJOn2rrQGU1UonkeQA==","signatures":[{"sig":"MEUCIQDRjGaz4aJ5wSPJHZBSghP8Gqqo+YlOsUsHscV8YRvlLgIgHPKOnPpMc1wpPKRe9pfIWethJ49kC9AlQZErZ2QKuVI=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@eddacraft%2fkindling-adapter-claude-code@0.1.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":90533},"main":"./dist/index.js","type":"module","_from":"file:eddacraft-kindling-adapter-claude-code-0.1.1.tgz","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"scripts":{"lint":"eslint src","test":"vitest run","build":"tsc --build","clean":"rm -rf dist","test:watch":"vitest","type-check":"tsc --noEmit"},"_npmUser":{"name":"joshuaboys","email":"josh@arkahna.io"},"_resolved":"/tmp/12e492d3dca38bbf9e6b04a2844698e8/eddacraft-kindling-adapter-claude-code-0.1.1.tgz","_integrity":"sha512-O55ZdIeYBgA8kMUnHcf3hxLbfQeR1d98cDDpfQ1LnRBU1+1JHmd/eWAUFoZidDPHr6qkqJOn2rrQGU1UonkeQA==","repository":{"url":"git+https://github.com/EddaCraft/kindling.git","type":"git","directory":"packages/kindling-adapter-claude-code"},"_npmVersion":"10.8.2","description":"Claude Code adapter for Kindling - capture tool calls and session context via hooks for memory continuity","directories":{},"_nodeVersion":"20.20.0","dependencies":{"@eddacraft/kindling-core":"0.1.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^3.2.4","typescript":"^5.3.0","@types/node":"^20.11.0"},"_npmOperationalInternal":{"tmp":"tmp/kindling-adapter-claude-code_0.1.1_1770960578564_0.5522514781037817","host":"s3://npm-registry-packages-npm-production"},"deprecated":"DEPRECATED: this package is deprecated and will be removed at v1.0.0. kindling is now a Rust daemon; use @eddacraft/kindling (thin client) or the `kindling` binary. See https://github.com/eddacraft/kindling."},"0.1.2":{"name":"@eddacraft/kindling-adapter-claude-code","version":"0.1.2","keywords":["kindling","claude-code","claude","anthropic","adapter","hooks","session","ai","coding","tool-calls","memory","continuity"],"author":{"name":"EddaCraft","email":"hello@eddacraft.ai"},"license":"Apache-2.0","_id":"@eddacraft/kindling-adapter-claude-code@0.1.2","maintainers":[{"name":"joshuaboys","email":"josh@arkahna.io"}],"homepage":"https://github.com/EddaCraft/kindling/tree/main/packages/kindling-adapter-claude-code#readme","bugs":{"url":"https://github.com/EddaCraft/kindling/issues"},"dist":{"shasum":"d706a8af2cd10d38351902c749b0fa73f76c130a","tarball":"https://registry.npmjs.org/@eddacraft/kindling-adapter-claude-code/-/kindling-adapter-claude-code-0.1.2.tgz","fileCount":35,"integrity":"sha512-VNL2vFIx80X4DIJSetaTnXGH8rUiWx7tWIOL+Qn82Y8/vVqZ/sA303tGJioYL3xHa/X9bPqM3x3TsXaul3gguw==","signatures":[{"sig":"MEQCIGRJS5ib1Hy41rEY6o61oWQNrFxn6Wkp57ZN+YvjQ/L3AiBnbiJNgZMLEQ3KfDllFrzjM2H3q20IHQpymR9daGpbug==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@eddacraft%2fkindling-adapter-claude-code@0.1.2","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":90533},"main":"./dist/index.js","type":"module","_from":"file:eddacraft-kindling-adapter-claude-code-0.1.2.tgz","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"scripts":{"lint":"eslint src","test":"vitest run","build":"tsc --build","clean":"rm -rf dist","test:watch":"vitest","type-check":"tsc --noEmit"},"_npmUser":{"name":"joshuaboys","email":"josh@arkahna.io"},"_resolved":"/tmp/4306cca7030e6806b737391ac439d965/eddacraft-kindling-adapter-claude-code-0.1.2.tgz","_integrity":"sha512-VNL2vFIx80X4DIJSetaTnXGH8rUiWx7tWIOL+Qn82Y8/vVqZ/sA303tGJioYL3xHa/X9bPqM3x3TsXaul3gguw==","repository":{"url":"git+https://github.com/EddaCraft/kindling.git","type":"git","directory":"packages/kindling-adapter-claude-code"},"_npmVersion":"10.8.2","description":"Claude Code adapter for Kindling - capture tool calls and session context via hooks for memory continuity","directories":{},"_nodeVersion":"20.20.0","dependencies":{"@eddacraft/kindling-core":"0.1.2"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^3.2.4","typescript":"^5.3.0","@types/node":"^20.11.0"},"_npmOperationalInternal":{"tmp":"tmp/kindling-adapter-claude-code_0.1.2_1771253704829_0.3243616757014831","host":"s3://npm-registry-packages-npm-production"},"deprecated":"DEPRECATED: this package is deprecated and will be removed at v1.0.0. kindling is now a Rust daemon; use @eddacraft/kindling (thin client) or the `kindling` binary. See https://github.com/eddacraft/kindling."}},"time":{"created":"2026-02-12T02:18:18.741Z","modified":"2026-06-22T06:09:58.450Z","0.1.0":"2026-02-12T02:18:18.959Z","0.1.1":"2026-02-13T05:29:38.719Z","0.1.2":"2026-02-16T14:55:04.966Z"},"bugs":{"url":"https://github.com/EddaCraft/kindling/issues"},"author":{"name":"EddaCraft","email":"hello@eddacraft.ai"},"license":"Apache-2.0","homepage":"https://github.com/EddaCraft/kindling/tree/main/packages/kindling-adapter-claude-code#readme","keywords":["kindling","claude-code","claude","anthropic","adapter","hooks","session","ai","coding","tool-calls","memory","continuity"],"repository":{"url":"git+https://github.com/EddaCraft/kindling.git","type":"git","directory":"packages/kindling-adapter-claude-code"},"description":"Claude Code adapter for Kindling - capture tool calls and session context via hooks for memory continuity","maintainers":[{"name":"joshuaboys","email":"josh@arkahna.io"}],"readme":"# @eddacraft/kindling-adapter-claude-code\n\nClaude Code adapter for Kindling - capture tool calls and session context via hooks for memory continuity.\n\n## Overview\n\nThis adapter integrates Kindling with [Claude Code](https://claude.ai/code) via its hooks system. It automatically captures:\n\n- **Tool calls** (Read, Write, Edit, Bash, Glob, Grep, etc.)\n- **User messages**\n- **Subagent completions**\n- **Session lifecycle** (start/stop)\n\nAll captured events become searchable observations in Kindling, enabling context retrieval across sessions.\n\n## Installation\n\n```bash\nnpm install @eddacraft/kindling-adapter-claude-code @eddacraft/kindling-core @eddacraft/kindling-store-sqlite\n```\n\n## Quick Start\n\n```typescript\nimport { createHookHandlers } from '@eddacraft/kindling-adapter-claude-code';\nimport { openDatabase, SqliteKindlingStore } from '@eddacraft/kindling-store-sqlite';\n\n// Initialize store\nconst db = openDatabase({ dbPath: '~/.kindling/kindling.db' });\nconst store = new SqliteKindlingStore(db);\n\n// Create hook handlers\nconst handlers = createHookHandlers(store);\n\n// Register with Claude Code hooks (see Hook Configuration below)\n```\n\n## Hook Configuration\n\nThe adapter provides handlers for Claude Code hooks. Register them in your `.claude/settings.json`:\n\n```json\n{\n  \"hooks\": {\n    \"SessionStart\": [\n      {\n        \"type\": \"command\",\n        \"command\": \"kindling-hook session-start\"\n      }\n    ],\n    \"PostToolUse\": [\n      {\n        \"type\": \"command\",\n        \"command\": \"kindling-hook post-tool-use\"\n      }\n    ],\n    \"Stop\": [\n      {\n        \"type\": \"command\",\n        \"command\": \"kindling-hook stop\"\n      }\n    ]\n  }\n}\n```\n\n## API Reference\n\n### `createHookHandlers(store, config?)`\n\nCreates hook handlers connected to a Kindling store.\n\n```typescript\nconst handlers = createHookHandlers(store, {\n  // Capture tool results (default: true)\n  captureResults: true,\n\n  // Capture user messages (default: true)\n  captureUserMessages: true,\n\n  // Capture subagent outputs (default: true)\n  captureSubagents: true,\n\n  // Default intent for new sessions\n  defaultIntent: 'Claude Code session',\n});\n```\n\n### Hook Handlers\n\n| Handler              | Hook             | Description                         |\n| -------------------- | ---------------- | ----------------------------------- |\n| `onSessionStart`     | SessionStart     | Opens a session capsule             |\n| `onPostToolUse`      | PostToolUse      | Captures tool calls as observations |\n| `onStop`             | Stop             | Closes the session capsule          |\n| `onUserPromptSubmit` | UserPromptSubmit | Captures user messages              |\n| `onSubagentStop`     | SubagentStop     | Captures subagent completions       |\n\n### Utility Methods\n\n```typescript\n// Check if a session is active\nhandlers.isSessionActive('session-123');\n\n// Get session statistics\nhandlers.getSessionStats('session-123');\n// Returns: { eventCount: 42, duration: 3600000 }\n\n// Access the underlying session manager\nconst manager = handlers.getSessionManager();\n```\n\n## Event Mapping\n\n| Claude Code Event        | Observation Kind | Description          |\n| ------------------------ | ---------------- | -------------------- |\n| PostToolUse (Write/Edit) | `file_diff`      | File modifications   |\n| PostToolUse (Bash)       | `command`        | Shell commands       |\n| PostToolUse (other)      | `tool_call`      | Tool invocations     |\n| UserPromptSubmit         | `message`        | User messages        |\n| SubagentStop             | `node_end`       | Subagent completions |\n\n## Content Filtering\n\nThe adapter includes safety features to prevent accidental capture of sensitive data:\n\n- **Secret detection**: API keys, tokens, and passwords are automatically masked\n- **Content truncation**: Large outputs are truncated (default: 50KB)\n- **Path exclusions**: Files in `.git/`, `node_modules/`, `.env`, etc. are flagged\n\n```typescript\nimport {\n  filterContent,\n  maskSecrets,\n  isExcludedPath,\n} from '@eddacraft/kindling-adapter-claude-code';\n\n// Filter content with secret masking\nconst safe = filterContent('api_key=secret123');\n// Result: 'api_key=[REDACTED]'\n\n// Check if path should be excluded\nisExcludedPath('/project/.env'); // true\n```\n\n## Direct Usage\n\nYou can also use the lower-level APIs directly:\n\n```typescript\nimport { SessionManager, mapEvent } from '@eddacraft/kindling-adapter-claude-code';\n\n// Create session manager\nconst manager = new SessionManager(store);\n\n// Start session\nconst ctx = manager.onSessionStart({\n  sessionId: 'session-1',\n  cwd: '/home/user/project',\n  intent: 'Debug authentication',\n});\n\n// Process events\nconst event = {\n  type: 'post_tool_use',\n  timestamp: Date.now(),\n  sessionId: 'session-1',\n  cwd: '/home/user/project',\n  toolName: 'Read',\n  toolInput: { file_path: '/src/auth.ts' },\n  toolResult: '// auth code...',\n};\n\nconst result = manager.onEvent(event);\n\n// End session\nmanager.onStop('session-1', {\n  summaryContent: 'Fixed token validation bug',\n});\n```\n\n## Use Case: Session Continuity\n\nThe primary use case is maintaining context across Claude Code sessions:\n\n1. **Session 1**: Work on authentication bug\n   - Adapter captures: file reads, edits, test runs, errors\n   - Session closes with summary\n\n2. **Session 2**: \"What did I work on yesterday?\"\n   - Query Kindling: `service.retrieve({ query: 'authentication' })`\n   - Get back: relevant observations with provenance\n\nThis enables Claude Code to \"remember\" what happened in previous sessions.\n\n## License\n\nApache-2.0\n","readmeFilename":"README.md"}