{"id":45736338,"url":"https://github.com/jmcentire/kindex","last_synced_at":"2026-04-12T05:02:32.520Z","repository":{"id":340462431,"uuid":"1166098391","full_name":"jmcentire/kindex","owner":"jmcentire","description":"Knowledge index that learns from your conversations","archived":false,"fork":false,"pushed_at":"2026-02-28T18:44:07.000Z","size":557,"stargazers_count":8,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-03-01T16:43:09.348Z","etag":null,"topics":["ai","claude","cli","context-management","knowledge-graph","python"],"latest_commit_sha":null,"homepage":"https://github.com/jmcentire/kindex","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/jmcentire.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-02-24T21:54:13.000Z","updated_at":"2026-02-28T18:44:02.000Z","dependencies_parsed_at":null,"dependency_job_id":"8910a381-76ce-4903-947d-5e1235f4f66e","html_url":"https://github.com/jmcentire/kindex","commit_stats":null,"previous_names":["jmcentire/kindex"],"tags_count":8,"template":false,"template_full_name":null,"purl":"pkg:github/jmcentire/kindex","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jmcentire%2Fkindex","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jmcentire%2Fkindex/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jmcentire%2Fkindex/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jmcentire%2Fkindex/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/jmcentire","download_url":"https://codeload.github.com/jmcentire/kindex/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jmcentire%2Fkindex/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":30008552,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-03-02T15:15:59.058Z","status":"ssl_error","status_checked_at":"2026-03-02T15:15:58.758Z","response_time":60,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.6:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["ai","claude","cli","context-management","knowledge-graph","python"],"created_at":"2026-02-25T11:14:59.516Z","updated_at":"2026-04-12T05:02:32.511Z","avatar_url":"https://github.com/jmcentire.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Kindex\n\n[![Python 3.10+](https://img.shields.io/badge/python-3.10+-blue.svg)](https://www.python.org/downloads/)\n[![MIT License](https://img.shields.io/badge/license-MIT-green.svg)](LICENSE)\n[![v0.17.0](https://img.shields.io/badge/version-0.17.0-purple.svg)](https://github.com/jmcentire/kindex/releases)\n[![PyPI](https://img.shields.io/pypi/v/kindex.svg)](https://pypi.org/project/kindex/)\n[![Tests](https://img.shields.io/badge/tests-980%20passing-brightgreen.svg)](#)\n[![Claude Code Plugin](https://img.shields.io/badge/Claude%20Code-Plugin-orange.svg)](#install-as-claude-code-plugin)\n\n**The memory layer Claude Code doesn't have.**\n\nKindex does one thing. It knows what you know.\n\nIt's a persistent knowledge graph for AI-assisted workflows. It indexes your conversations, projects, and intellectual work so that Claude Code never starts a session blind. Available as a **free Claude Code plugin** (MCP server) or standalone CLI.\n\n\u003e **Memory plugins capture what happened. Kindex captures what it means and how it connects.** Most memory tools are session archives with search. Kindex is a weighted knowledge graph that grows intelligence over time — understanding relationships, surfacing constraints, and managing exactly how much context to inject based on your available token budget.\n\n## Install as Claude Code Plugin\n\nTwo commands. Zero configuration.\n\n```bash\npip install kindex[mcp]\nclaude mcp add --scope user --transport stdio kindex -- kin-mcp\nkin init\n```\n\nClaude Code now has 30 native tools: `search`, `add`, `context`, `show`, `ask`, `learn`, `link`, `list_nodes`, `status`, `suggest`, `graph_stats`, `graph_merge`, `dream`, `changelog`, `ingest`, `tag_start`, `tag_update`, `tag_resume`, `remind_create`, `remind_list`, `remind_snooze`, `remind_done`, `remind_check`, `remind_exec`, `mode_activate`, `mode_list`, `mode_show`, `mode_create`, `mode_export`, `mode_import`, `mode_seed`.\n\nOr add `.mcp.json` to any repo for project-scope access:\n```json\n{ \"mcpServers\": { \"kindex\": { \"command\": \"kin-mcp\" } } }\n```\n\n## Install as CLI\n\n```bash\npip install kindex\nkin init\n```\n\nWith LLM-powered extraction:\n```bash\npip install kindex[llm]\n```\n\nWith reminders (natural language time parsing):\n```bash\npip install kindex[reminders]\n```\n\nWith everything (LLM + vectors + MCP + reminders):\n```bash\npip install kindex[all]\n```\n\n## Why Kindex\n\n### Context-aware by design\nFive context tiers auto-select based on available tokens. When other plugins dump everything into context, Kindex gives you 200 tokens of executive summary or 4000 tokens of deep context — whatever fits. **Your plugin doesn't eat the context window.**\n\n| Tier | Budget | Use Case |\n|------|--------|----------|\n| full | ~4000 tokens | Session start, deep work |\n| abridged | ~1500 tokens | Mid-session reference |\n| summarized | ~750 tokens | Quick orientation |\n| executive | ~200 tokens | Post-compaction re-injection |\n| index | ~100 tokens | Existence check only |\n\n### Knowledge graph, not log file\nNodes have types, weights, domains, and audiences. Edges carry provenance and decay over time. The graph understands what matters — not just what was said.\n\n### Operational guardrails\nConstraints block deploys. Directives encode preferences. Watches flag attention items. Checkpoints run pre-flight. No other memory plugin has this.\n\n### Cache-optimized LLM retrieval\nThree-tier prompt architecture with Anthropic prompt caching. Stable knowledge (codebook) is cached at 10% cost. Query-relevant context is predicted via graph expansion and cached per-topic. Only the question pays full price. Transparent — `kin ask` just works better and cheaper.\n\n### Team and org ready\n`.kin` inheritance chains let a service repo inherit from a platform context, which inherits from an org voice. Private/team/org/public scoping with PII stripping on export. Enterprise-ready from day one.\n\n## In Practice\n\nA 162-file fantasy novel vault — characters, locations, magic systems, plot outlines — ingested in one pass. Cross-referenced by content mentions. Searched in milliseconds.\n\n```\n$ kin status\nNodes:     192\nEdges:     11,802\nOrphans:   3\n\n$ time kin search \"the Baker\"\n# Kindex: 10 results for \"the Baker\"\n\n## [document] The Baker - Hessa's Profile and Message Broker System (w=0.70)\n  → Thieves Guild, Five Marks, Thieves Guild Operations\n\n## [person] Mia and The Baker (Hessa) -- Relationship (w=0.70)\n  → Sebastian and Mia, Mia -- Motivations and Goals\n\n0.142 total\n\n$ kin graph stats\nNodes:      192\nEdges:      11,802\nDensity:    0.3218\nComponents: 5\nAvg degree: 122.94\n```\n\n192 nodes. 11,802 edges. 5 context tiers. Hybrid FTS5 + graph traversal in 142ms.\n\n## Getting Claude to Actually Use It\n\nInstalling the MCP plugin gives Claude the tools. But Claude won't use them proactively unless you tell it to. Kindex ships with a recommended CLAUDE.md block that turns passive tools into active habits:\n\n```bash\n# Print the recommended directives\nkin setup-claude-md\n\n# Or auto-append to your global CLAUDE.md\nkin setup-claude-md --install\n```\n\nThis adds session lifecycle rules (start/during/segment/end), explicit capture triggers (discoveries, decisions, key files, notable outputs), and search-before-add discipline. The difference between \"Claude has a knowledge graph\" and \"Claude actively maintains a knowledge graph\" is this block.\n\nThe SessionStart hook (`kin setup-hooks`) reinforces these directives at the start of every session with a \"Session directives\" block that reminds Claude to use kindex MCP tools throughout the session.\n\n### What gets captured\n\nWith the directives active, Claude will:\n- **Search** the graph before starting work and before adding nodes\n- **Add** discoveries, decisions, key files, notable outputs, and new terms as they emerge\n- **Link** related concepts when connections are found\n- **Learn** from long files and outputs via bulk extraction\n- **Tag** sessions to track work context across conversations\n- **Remind** with actions for deferred tasks (shell commands or headless Claude invocations)\n\n### Actionable Reminders\n\nReminders can carry shell commands and/or natural-language instructions. When due, the daemon executes them automatically — simple commands run directly, complex tasks launch headless `claude -p`. A Stop hook guard blocks Claude from exiting when actionable reminders are pending.\n\n```bash\n# Kill a cloud instance in 1 hour (but download results first)\nkin remind create \"Kill vast.ai instance\" --at \"in 1 hour\" \\\n  --action \"vastai destroy instance 12345\" \\\n  --instructions \"Download results from /workspace/ before killing\"\n\n# Manual trigger\nkin remind exec --reminder-id \u003cid\u003e\n```\n\n### Dream — Knowledge Consolidation\n\nKindex dreams. After each Claude Code session, a detached background process runs fuzzy deduplication, auto-applies pending suggestions, and strengthens edges between nodes that share domains. Like memory consolidation during sleep — replay, strengthen important paths, prune noise.\n\n```bash\n# See what would happen (no changes)\nkin dream --dry-run\n\n# Run full consolidation\nkin dream\n\n# Fast path: dedup + suggestions only\nkin dream --lightweight\n\n# Include LLM-powered cluster summarisation\nkin dream --deep\n\n# Fork and return immediately (used by Stop hook)\nkin dream --detach --lightweight\n```\n\nThree triggers: manual CLI, periodic cron (step 11 of `kin cron`), and automatic detached subprocess on Claude Code session exit. File locking prevents concurrent cycles. The detached process uses `start_new_session=True` to survive Claude Code's exit.\n\n### Conversation Modes\n\nModes are reusable conversation-priming artifacts that induce a processing mode in an AI session. Based on research showing that induced understanding outperforms direct instruction by 5.4x, and that 15 tokens of mode-setting capture 98.8% of achievable priming benefit.\n\nFive built-in modes: `collaborate`, `code`, `create`, `research`, `chat`. Create custom modes from any session and export them for team sharing (PII-free).\n\n```bash\n# Seed default modes\nkin mode seed\n\n# Activate a mode — outputs the priming artifact\nkin mode activate collaborate\n\n# Create a custom mode\nkin mode create debug-session \\\n  --primer \"We're hunting a bug. Precision over speed...\" \\\n  --boundary \"Show your reasoning chain. Name assumptions.\" \\\n  --permissions \"Speculate about root causes freely.\"\n\n# Export for team sharing (PII-stripped)\nkin mode export collaborate \u003e collaborate.json\n\n# Import a teammate's mode\nkin mode import their-mode.json\n```\n\nModes are not instructions — they're state inductions. A primer establishes *how to think*, a boundary defines *what quality means*, and permissions state *what's allowed*. The AI shifts processing mode rather than following a checklist.\n\n## Quick Start\n\n```bash\n# Add knowledge (with optional tags)\nkin add \"Stigmergy is coordination through environmental traces\" --tags biology,coordination\n\n# Search with hybrid FTS5 + graph traversal\nkin search stigmergy\nkin search coordination --tags biology   # filter results by tag\n\n# Ask questions (with automatic classification)\nkin ask \"How does weight decay work?\"\n\n# Get context for AI injection\nkin context --topic stigmergy --level full\n\n# List and filter by tags\nkin list --tags python,ml              # nodes tagged with both\nkin list --type concept --tags ai      # combine type and tag filters\n\n# Track operational rules\nkin add \"Never break the API contract\" --type constraint --trigger pre-deploy --action block\n\n# Check status before deploy\nkin status --trigger pre-deploy\n\n# Ingest from all sources\nkin ingest all\n\n# Session tags — named work context handles\nkin tag start auth-refactor --focus \"OAuth2 flow\" --remaining \"tokens,tests\"\nkin tag segment --focus \"Token storage\" --summary \"Flow design done\"\nkin tag resume auth-refactor   # context block for new session\nkin tag end --summary \"All done\"\n\n# Reminders — never forget, never nag\nkin remind create \"standup\" --at \"every weekday at 9am\" --priority high\nkin remind create \"reply to Kevin\" --at \"in 30 minutes\" --priority urgent\nkin remind list\nkin remind snooze --reminder-id \u003cid\u003e --duration 1h\nkin remind done --reminder-id \u003cid\u003e\n```\n\n## .kin/ Directory \u0026 Inheritance\n\nProjects use `.kin/` directories that encode their communication style, engineering standards, and values. Teams inherit from orgs. Repos inherit from teams. The knowledge graph carries the voice forward.\n\n```\n~/.kindex/voices/acme.kin             # Org voice (downloadable, public)\n    ^\n    |  inherits\n~/Code/platform/.kin/config           # Platform team context\n    ^\n    |  inherits\n~/Code/payments-service/.kin/config   # Service-specific context\n```\n\n```yaml\n# payments-service/.kin/config\nname: payments-service\naudience: team\ndomains: [payments, python]\ninherits:\n  - ../platform/.kin/config\n```\n\nThe `.kin/` directory is the standard location for all kindex project artifacts:\n- `.kin/config` — project metadata (voice, domains, audience, inheritance)\n- `.kin/index.json` — graph snapshot for git tracking\n\nThe payments service gets Acme's voice principles, the platform's engineering standards, AND its own domain context. Local values override ancestors. Lists merge with dedup. Parent directories auto-walk when no explicit `inherits` is set.\n\nOld-style `.kin` files (plain YAML) are auto-upgraded to `.kin/config` on first access.\n\nSee [examples/kin-voices/](examples/kin-voices/) for ready-to-use voice templates.\n\n## Architecture\n\n```\nSQLite + FTS5          \u003c- primary store and full-text search\n  nodes: id, title, content, type, weight, audience, domains, extra\n  edges: from_id, to_id, type, weight, provenance\n  fts5:  content synced via triggers\n\nRetrieval pipeline:\n  FTS5 BM25 --+\n  Graph BFS --+-- RRF merge -- tier formatter -- context block\n  (vectors) --+                   |\n      |                   full | abridged | summarized | executive | index\n      |\n  Embedding providers (configurable):\n      local (sentence-transformers) | openai | gemini\n\nLLM cache tiers (kin ask):\n  Tier 1: codebook (stable node index)     \u003c- cached @ 10% cost\n  Tier 2: query-relevant context           \u003c- cached per-topic @ 10% cost\n  Tier 3: user question                    \u003c- full price, tiny\n\nReminders:\n  reminders table (SQLite)    \u003c- separate from knowledge graph\n  Time parsing:  dateparser (NL) + dateutil.rrule (recurrence) + cronsim (cron)\n  Channels:      system (macOS) | slack | email | claude (hook) | terminal\n  Daemon:        launchd/cron adaptive interval -\u003e check due -\u003e notify -\u003e auto-snooze\n  Scheduling:    adaptive tiers (\u003e7d=daily, \u003e1d=hourly, \u003e1h=10min, \u003c1h=5min, none=disabled)\n  Actions:       shell commands run directly | complex tasks launch claude -p\n  Stop guard:    blocks session exit when actionable reminders pending\n\nDream (kin dream):\n  Modes:         lightweight (\u003c5s) | full (non-LLM) | deep (claude -p clusters)\n  Triggers:      CLI | cron step 11 | Stop hook (detached, start_new_session=True)\n  Dedup:         difflib.SequenceMatcher, 4-char title bucketing, 0.95 merge / 0.85 suggest\n  Consolidation: suggestion auto-apply, domain edge strengthening, cluster summarisation\n  Safety:        fcntl.flock exclusion, protected types skip, provenance tracking\n\nThree integration paths:\n  MCP plugin --\u003e Claude calls tools natively (search, add, learn, remind, ...)\n  CLI hooks  --\u003e SessionStart / PreCompact / Stop lifecycle events\n  Adapters   --\u003e Entry-point discovery for custom ingestion sources\n  Code       --\u003e ctags + cscope + tree-sitter structural analysis\n```\n\n### Node Types\n\n**Knowledge**: concept, document, session, person, project, decision, question, artifact, skill\n\n### Code Intelligence\n\nIngest repository structure with `kin ingest code --directory .`:\n\n- **Module nodes** (artifact) — one per source file with structural summary: classes, public functions, signatures, imports\n- **Symbol nodes** (concept) — one per class/interface/type with method signatures\n- **Edges** — imports (`depends_on`), inheritance (`implements`), containment (`context_of`), call graph (`relates_to`)\n- **Three extraction tiers** — ctags (100+ languages), cscope (C/C++ cross-refs), tree-sitter (AST call graphs)\n- **Incremental** — file hashing skips unchanged files on re-ingest\n\nCode structure lives in the same graph as your decisions, watches, and constraints. Search finds both what calls a function and what broke last time someone changed it.\n\n**Operational**: constraint (invariants), directive (soft rules), checkpoint (pre-flight), watch (attention flags)\n\n## CLI Reference (49 commands)\n\n### Core\n| Command | Description |\n|---------|-------------|\n| `kin search \u003cquery\u003e` | Hybrid FTS5 + graph search with RRF merging (--tags, --mine) |\n| `kin context` | Formatted context block for AI injection (--level, --tokens) |\n| `kin add \u003ctext\u003e` | Quick capture with auto-extraction and linking (--tags, --type) |\n| `kin show \u003cid\u003e` | Full node details with edges, provenance, and state |\n| `kin list` | List nodes (--type, --status, --tags, --audience, --mine, --limit) |\n| `kin ask \u003cquestion\u003e` | Question classification + LLM or context answer |\n\n### Knowledge Management\n| Command | Description |\n|---------|-------------|\n| `kin learn` | Extract knowledge from sessions and inbox |\n| `kin link \u003ca\u003e \u003cb\u003e` | Create weighted edge between nodes |\n| `kin alias \u003cid\u003e [add\\|remove\\|list]` | Manage AKA/synonyms for a node |\n| `kin register \u003cid\u003e \u003cpath\u003e` | Associate a file path with a node |\n| `kin orphans` | Nodes with no connections |\n| `kin trail \u003cid\u003e` | Temporal history and provenance chain |\n| `kin decay` | Apply weight decay to stale nodes/edges |\n| `kin recent` | Recently active nodes |\n| `kin tag [action]` | Session tags: start, update, segment, pause, end, resume, list, show |\n| `kin remind [action]` | Reminders: create, list, show, snooze, done, cancel, check, exec |\n| `kin mode [action]` | Conversation modes: activate, list, show, create, export, import, seed |\n\n### Graph Analytics\n| Command | Description |\n|---------|-------------|\n| `kin graph [mode]` | Dashboard: stats, centrality, communities, bridges, trailheads |\n| `kin suggest` | Bridge opportunity suggestions (--accept, --reject) |\n| `kin skills [person]` | Skill profile and expertise for a person |\n| `kin embed` | Index all nodes for vector similarity search |\n\n### Operational\n| Command | Description |\n|---------|-------------|\n| `kin status` | Graph health + operational summary (--trigger, --owner, --mine) |\n| `kin set-audience \u003cid\u003e \u003cscope\u003e` | Set privacy scope (private/team/org/public) |\n| `kin set-state \u003cid\u003e \u003ckey\u003e \u003cvalue\u003e` | Set mutable state on directives/watches |\n| `kin export` | Audience-aware graph export with PII stripping |\n| `kin import \u003cfile\u003e` | Import nodes/edges from JSON/JSONL (--mode merge/replace) |\n| `kin sync-links` | Update node content with connection references |\n\n### Ingestion \u0026 External Sources\n| Command | Description |\n|---------|-------------|\n| `kin ingest \u003csource\u003e` | Ingest from: projects, sessions, files, commits, github, linear, code, all |\n| `kin cron` | One-shot maintenance cycle (for crontab/launchd) |\n| `kin dream` | Knowledge consolidation: dedup, suggestions, edge strengthening (--deep, --detach) |\n| `kin watch` | Watch for new sessions and ingest them (--interval) |\n| `kin analytics` | Archive session analytics and activity heatmap |\n| `kin index` | Write .kin/index.json for git tracking |\n\n### Infrastructure\n| Command | Description |\n|---------|-------------|\n| `kin init` | Initialize data directory |\n| `kin config [show\\|get\\|set]` | View or edit configuration |\n| `kin setup-hooks` | Install lifecycle hooks into Claude Code |\n| `kin setup-cron` | Install periodic maintenance (launchd/crontab) |\n| `kin setup-claude-md` | Output/install recommended CLAUDE.md kindex directives |\n| `kin stop-guard` | Stop hook guard for actionable reminders |\n| `kin doctor` | Health check with graph enforcement (--fix) |\n| `kin migrate` | Import markdown topics into SQLite |\n| `kin budget` | LLM spend tracking |\n| `kin whoami` | Show current user identity |\n| `kin changelog` | What changed (--since, --days, --actor) |\n| `kin log` | Recent activity log |\n| `kin git-hook [install\\|uninstall]` | Manage git hooks in a repository |\n| `kin prime` | Generate context for SessionStart hook (--codebook) |\n| `kin compact-hook` | Pre-compact knowledge capture |\n\n## Configuration\n\nConfig is layered like git — global defaults, then global config, then local config. Each layer deep-merges over the previous, so you only set what you want to override.\n\n| Layer | Path | Purpose |\n|-------|------|---------|\n| Global | `~/.config/kindex/kin.yaml` | User-wide defaults |\n| Local | `.kin/config` or `kin.yaml` in cwd | Project-specific overrides |\n\nUse `kin config set --global llm.enabled true` for global settings, or `kin config set llm.model claude-sonnet-4-6` for project-local.\n\n```yaml\ndata_dir: ~/.kindex\n\nllm:\n  enabled: false\n  model: claude-haiku-4-5-20251001\n  api_key_env: ANTHROPIC_API_KEY\n  cache_control: true              # Prompt caching (90% savings on repeated prefixes)\n  codebook_min_weight: 0.5         # Min node weight for codebook inclusion\n  tier2_max_tokens: 4000           # Token budget for query-relevant context\n\nembedding:\n  provider: local                  # local, openai, or gemini\n  # model: \"\"                      # empty = provider default\n  # api_key_env: \"\"                # empty = provider default (OPENAI_API_KEY / GEMINI_API_KEY)\n  # dimensions: 0                  # 0 = provider default (384 / 1536 / 3072)\n\nbudget:\n  daily: 0.50\n  weekly: 2.00\n  monthly: 5.00\n\nproject_dirs:\n  - ~/Code\n  - ~/Personal\n\ndefaults:\n  hops: 2\n  min_weight: 0.1\n  mode: bfs\n\nreminders:\n  enabled: true\n  check_interval: 300            # 5 min base interval\n  adaptive_scheduling: true      # adjust interval based on nearest reminder\n  min_interval: 300              # floor for adaptive scheduling\n  default_channels: [system]     # system, slack, email, claude, terminal\n  snooze_duration: 900           # 15 min default snooze\n  auto_snooze_timeout: 300       # auto-snooze after 5 min inaction\n  idle_suppress_after: 600       # suppress if idle \u003e 10 min\n  channels:\n    slack:\n      enabled: false\n      webhook_url: \"\"\n    email:\n      enabled: false\n      smtp_host: \"\"\n      to_addr: \"\"\n```\n\n## Development\n\n```bash\nmake dev          # install with dev + LLM dependencies\nmake test         # run 980 tests\nmake check        # lint + test combined\nmake clean        # remove build artifacts\n```\n\n## License\n\nMIT\n\n\u003c!-- mcp-name: io.github.jmcentire/kindex --\u003e\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjmcentire%2Fkindex","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fjmcentire%2Fkindex","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjmcentire%2Fkindex/lists"}