{"id":51014950,"url":"https://github.com/dreygur/knot","last_synced_at":"2026-06-21T09:01:51.285Z","repository":{"id":353029091,"uuid":"1216810089","full_name":"dreygur/knot","owner":"dreygur","description":"Persistent memory pool MCP server — eliminate Context Rot. BLAKE3-verified knowledge graph for Claude.","archived":false,"fork":false,"pushed_at":"2026-04-22T05:58:15.000Z","size":106,"stargazers_count":0,"open_issues_count":0,"forks_count":1,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-04-22T07:38:11.836Z","etag":null,"topics":["ai-tools","blake3","claude","knowledge-graph","mcp","mcp-server","memory","rust","sqlite"],"latest_commit_sha":null,"homepage":null,"language":"Rust","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/dreygur.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-04-21T08:55:48.000Z","updated_at":"2026-04-22T05:55:29.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/dreygur/knot","commit_stats":null,"previous_names":["dreygur/knot"],"tags_count":1,"template":false,"template_full_name":null,"purl":"pkg:github/dreygur/knot","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dreygur%2Fknot","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dreygur%2Fknot/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dreygur%2Fknot/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dreygur%2Fknot/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/dreygur","download_url":"https://codeload.github.com/dreygur/knot/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dreygur%2Fknot/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":34603587,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-06-21T02:00:05.568Z","response_time":54,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"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-tools","blake3","claude","knowledge-graph","mcp","mcp-server","memory","rust","sqlite"],"created_at":"2026-06-21T09:01:46.167Z","updated_at":"2026-06-21T09:01:51.276Z","avatar_url":"https://github.com/dreygur.png","language":"Rust","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Knot\n\n**Persistent memory pool MCP server** - eliminate Context Rot with verified, hierarchical knowledge.\n\nEvery memory Knot stores is **verified against the actual file on disk**. If the file changes or disappears, the memory is flagged stale before it can mislead you. This is Jit-V: Just-in-Time Verification.\n\n\u003e Built in Dhaka for the global developer community.\n\u003e Knot is dedicated to keeping code human-verified in an AI world.\n\n---\n\n## First 5 Minutes\n\nInstall, then open Claude Code and try:\n\n```\nsave_wisdom(content=\"SQLite WAL mode prevents reader/writer blocking\", tags=[\"sqlite\", \"performance\"])\nrecall_memory(query=\"SQLite concurrency\")\n```\n\nThat's it. Knot is running. From here:\n- `save_wisdom` - persist anything you learn\n- `recall_memory` - retrieve it semantically later\n- `commit_session` - promote today's session memories to the project permanently\n\n---\n\n## Installation\n\n### Claude Code - via `/plugin`\n\n```\n/plugin marketplace add dreygur/knot\n/plugin install knot@knot\n```\n\nKnot registers itself as an MCP server and wires up Claude Code hooks automatically on first start.\n\n### One-liner\n\n```bash\ncurl -fsSL https://raw.githubusercontent.com/dreygur/knot/main/install.sh | bash\n```\n\nInstalls the binary, registers with Claude Code and OpenCode (whichever is detected), and injects the Knot Protocol into your agent rules.\n\n### Manual\n\n```bash\n# Download binary (replace with your platform)\ncurl -fsSL https://github.com/dreygur/knot/releases/latest/download/knot-x86_64-unknown-linux-gnu \\\n  -o ~/.local/bin/knot \u0026\u0026 chmod +x ~/.local/bin/knot\n\n# Register with Claude Code\nclaude mcp add --name knot --command ~/.local/bin/knot \\\n  --scope user -e KNOT_DATA_DIR=$HOME/.knot\n\n# Register with OpenCode\nopencode mcp add --name knot --command ~/.local/bin/knot \\\n  -e KNOT_DATA_DIR=$HOME/.knot\n```\n\n| Platform | Binary |\n|----------|--------|\n| Linux x86_64 | `knot-x86_64-unknown-linux-gnu` |\n| macOS x86_64 | `knot-x86_64-apple-darwin` |\n| macOS Apple Silicon | `knot-aarch64-apple-darwin` |\n| Windows x86_64 | `knot-x86_64-pc-windows-msvc.exe` |\n\n---\n\n## How Jit-V Works\n\nWhen you save a memory tied to a file:\n\n```\nsave_wisdom(content=\"auth middleware validates JWT in 3 steps\",\n            tags=[\"auth\"], verification_path=\"/src/middleware/auth.rs\")\n```\n\nKnot hashes the file at save time. On every future `recall_memory`, it re-hashes the file live:\n\n- **Match** - memory is `[VERIFIED]`, utility score increases\n- **Changed** - memory is `[STALE:MODIFIED]`, flagged but still returned\n- **Missing** - memory is `[STALE:MISSING]`, flagged for review\n\nStale memories are never silently promoted to project scope. `commit_session` rejects them at the boundary.\n\n---\n\n## Memory Hierarchy\n\n| Level | Scope | Lifetime |\n|-------|-------|----------|\n| L1 | Session | Current conversation only |\n| L2 | Project | Promoted from session via `commit_session` |\n| L3 | Global | Cross-project, long-term knowledge |\n\n---\n\n## Tools\n\n### Memory\n\n| Tool | Description |\n|------|-------------|\n| `save_wisdom` | Persist knowledge with optional file verification |\n| `recall_memory` | Semantic search - returns verified results with confidence score |\n| `commit_session` | Promote L1 session nodes to L2 project scope (stale nodes rejected) |\n| `jit_verify` | Re-run verification on a specific node |\n| `list_nodes` | List nodes filtered by scope and tags |\n| `link_nodes` | Create typed edges: `depends_on`, `contradicts`, `refines` |\n| `forget_node` | Permanently delete a node |\n| `knot_status` | Health check: node counts, ghost count, DB status |\n| `prune_ghosts` | Remove nodes whose source files no longer exist |\n\n### Skills\n\n| Tool | Description |\n|------|-------------|\n| `save_skill` | Save a reusable executable procedure with steps and verification |\n| `execute_skill` | Run a saved skill with variable substitution |\n| `recall_skills` | Search skills by name or description |\n\n---\n\n## Skills\n\nSkills are reusable procedures with variable placeholders. Save once, run anywhere.\n\n### Community Standard Style (template)\n\nCopy this as a starting point for your own skills:\n\n```json\n{\n  \"name\": \"community-standard-style\",\n  \"description\": \"Apply consistent code style to a module\",\n  \"prerequisites\": [\"cmd:cargo\"],\n  \"steps\": [\n    {\n      \"description\": \"Format the module\",\n      \"command\": \"cargo fmt -- {{file_path}}\"\n    },\n    {\n      \"description\": \"Run linter\",\n      \"command\": \"cargo clippy -- -D warnings\"\n    }\n  ],\n  \"verification_command\": \"cargo test\"\n}\n```\n\nSave it:\n```\nsave_skill(name=\"community-standard-style\", description=\"Apply consistent code style\",\n           prerequisites=[\"cmd:cargo\"],\n           steps=[{description:\"Format\", command:\"cargo fmt -- {{file_path}}\"},\n                  {description:\"Lint\",   command:\"cargo clippy -- -D warnings\"}],\n           verification_command=\"cargo test\")\n```\n\nRun it:\n```\nexecute_skill(skill_name=\"community-standard-style\",\n              variables=[{key:\"file_path\", value:\"src/main.rs\"}])\n```\n\n---\n\n## Configuration\n\n| Variable | Default | Description |\n|----------|---------|-------------|\n| `KNOT_DATA_DIR` | `~/.knot` | Data persistence directory |\n| `KNOT_LOG` | `knot=info` | Logging level (`knot=debug` for verbose) |\n| `KNOT_READ_ONLY` | - | Set to `1` to disable all writes |\n\n---\n\n## Knot Protocol\n\nThe install script injects this into `~/.clauderules` / `~/AGENTS.md` automatically:\n\n```markdown\n# Knot Protocol\n- Before starting any task, call recall_memory to check for prior context.\n- After completing multi-step tasks (exit 0), call save_skill to formalize the procedure.\n- Use recall_skills to find reusable skills before manual execution.\n- Use commit_session to promote session learnings to project scope.\n```\n\n---\n\n## CLI\n\nThe binary also works as a CLI for scripting and hooks:\n\n```bash\nknot recall \"SQLite WAL mode\"          # semantic search\nknot commit \u003csession_id\u003e \u003cproject\u003e     # commit session to project\nknot status                            # vault health\nknot --help\n```\n\n---\n\n## Contributing\n\nSee [CONTRIBUTING.md](CONTRIBUTING.md).\n\n---\n\n## License\n\nMIT\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdreygur%2Fknot","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fdreygur%2Fknot","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdreygur%2Fknot/lists"}