diff --git a/.cursor-plugin/marketplace.json b/.cursor-plugin/marketplace.json index 49f6d8ec..acc60083 100644 --- a/.cursor-plugin/marketplace.json +++ b/.cursor-plugin/marketplace.json @@ -72,6 +72,11 @@ "name": "pstack", "source": "pstack", "description": "if you want to go fast, go deep first. pstack helps you write less, but higher quality code. rigorous agent workflows you can parallelize with confidence." + }, + { + "name": "unforgit", + "source": "unforgit", + "description": "Git-backed repository memory for AI coding agents using MCP, project rules, and durable local knowledge." } ] } diff --git a/unforgit/.cursor-plugin/plugin.json b/unforgit/.cursor-plugin/plugin.json new file mode 100644 index 00000000..8cda5dc5 --- /dev/null +++ b/unforgit/.cursor-plugin/plugin.json @@ -0,0 +1,30 @@ +{ + "name": "unforgit", + "displayName": "Unforgit", + "version": "0.9.3", + "description": "Git-backed repository memory for AI coding agents using MCP, project rules, and durable local knowledge.", + "author": { + "name": "Miguel Medeiros" + }, + "publisher": "Unforgit", + "homepage": "https://unforgit.com", + "repository": "https://github.com/MiguelMedeiros/unforgit", + "license": "MIT", + "logo": "assets/avatar.png", + "keywords": [ + "memory", + "mcp", + "agents", + "repository", + "knowledge-base" + ], + "category": "developer-tools", + "tags": [ + "memory", + "mcp", + "agent-memory" + ], + "skills": "./skills/", + "rules": "./rules/", + "mcpServers": "./mcp.json" +} diff --git a/unforgit/LICENSE b/unforgit/LICENSE new file mode 100644 index 00000000..19dbafac --- /dev/null +++ b/unforgit/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2026 Miguel Medeiros + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/unforgit/README.md b/unforgit/README.md new file mode 100644 index 00000000..d0667ca5 --- /dev/null +++ b/unforgit/README.md @@ -0,0 +1,44 @@ +# Unforgit Cursor Plugin + +Unforgit gives Cursor durable, repository-scoped memory through MCP. Agents can remember and recall project decisions, conventions, gotchas, and reusable playbooks instead of rediscovering them in every session. + +## Included + +- MCP server registration for `unforgit-mcp` +- Cursor memory rules +- Unforgit memory skill +- Local-first setup guidance + +## Requirements + +Install the published CLI package so the MCP binary is on `PATH`: + +```bash +npm install -g unforgit +``` + +Initialize Unforgit in your project if you have not already: + +```bash +cd your-project +unforgit init --ide cursor +``` + +## Manual MCP config + +```json +{ + "mcpServers": { + "unforgit": { + "command": "unforgit-mcp", + "args": [] + } + } +} +``` + +## Learn more + +- Website: https://unforgit.com +- MCP docs: https://unforgit.com/docs/mcp +- Repository: https://github.com/MiguelMedeiros/unforgit diff --git a/unforgit/assets/avatar.png b/unforgit/assets/avatar.png new file mode 100644 index 00000000..6ccf88f0 Binary files /dev/null and b/unforgit/assets/avatar.png differ diff --git a/unforgit/mcp.json b/unforgit/mcp.json new file mode 100644 index 00000000..f498a1d9 --- /dev/null +++ b/unforgit/mcp.json @@ -0,0 +1,8 @@ +{ + "mcpServers": { + "unforgit": { + "command": "unforgit-mcp", + "args": [] + } + } +} diff --git a/unforgit/rules/unforgit-memory.mdc b/unforgit/rules/unforgit-memory.mdc new file mode 100644 index 00000000..f21aa080 --- /dev/null +++ b/unforgit/rules/unforgit-memory.mdc @@ -0,0 +1,37 @@ +# Unforgit Memory + +Use this skill whenever work can benefit from durable project memory or when the user asks you to remember, recall, curate, or inspect repository knowledge. + +## Core workflow + +1. **Recall first for substantive work.** At the start of non-trivial coding, planning, debugging, release, or review work, call `unforgit_recall` with a query based on the user's request and the repository area being touched. +2. **Use recalled context.** Apply prior decisions, conventions, gotchas, and playbooks before changing code or proposing a plan. +3. **Save durable context promptly.** When a stable decision, convention, gotcha, bug pattern, workaround, API contract, or reusable procedure emerges, call `unforgit_add` with concise self-contained text. +4. **Curate when memory quality matters.** Use `unforgit_health`, `unforgit_sync_status`, `unforgit_find_similar`, `unforgit_consolidate`, and `unforgit_curate` when diagnosing memory quality, duplicates, sync, or stale notes. + +## What to save + +- `semantic`: stable facts, architectural decisions, conventions, API contracts. +- `procedural`: repeatable workflows, release/deploy playbooks, troubleshooting steps. +- `episodic`: notable bugs, gotchas, one-off observations that may prevent future mistakes. + +## What not to save + +- Do not save secrets, tokens, passwords, API keys, private credentials, or sensitive environment values. +- Do not save temporary progress, task checklists, transient logs, command output dumps, PR numbers, commit SHAs, or facts likely to be stale soon. +- Do not save obvious information already documented in the repository unless the memory captures a decision or gotcha not obvious from the code. + +## Writing guidelines + +- Write memory text in English unless the repository explicitly standardizes another language. +- Keep each memory concise but self-contained. +- Use tags such as `auth`, `api`, `deploy`, `bug`, `gotcha`, `decision`, or package/module names. +- Prefer repository-scoped Unforgit memory over global assistant memory for project-specific knowledge. +- If a memory may duplicate an existing one, search first and consolidate rather than creating noise. + +## Tool hints + +- Search: `unforgit_recall({ "query": "...", "k": 5 })` +- Save: `unforgit_add({ "text": "...", "type": "semantic", "tags": ["decision"] })` +- Health: `unforgit_health()` +- Sync status: `unforgit_sync_status()` diff --git a/unforgit/skills/unforgit-memory/SKILL.md b/unforgit/skills/unforgit-memory/SKILL.md new file mode 100644 index 00000000..9cd64d5e --- /dev/null +++ b/unforgit/skills/unforgit-memory/SKILL.md @@ -0,0 +1,42 @@ +--- +name: unforgit-memory +description: Use Unforgit MCP tools as durable repository memory for decisions, conventions, gotchas, and playbooks. +--- + +# Unforgit Memory + +Use this skill whenever work can benefit from durable project memory or when the user asks you to remember, recall, curate, or inspect repository knowledge. + +## Core workflow + +1. **Recall first for substantive work.** At the start of non-trivial coding, planning, debugging, release, or review work, call `unforgit_recall` with a query based on the user's request and the repository area being touched. +2. **Use recalled context.** Apply prior decisions, conventions, gotchas, and playbooks before changing code or proposing a plan. +3. **Save durable context promptly.** When a stable decision, convention, gotcha, bug pattern, workaround, API contract, or reusable procedure emerges, call `unforgit_add` with concise self-contained text. +4. **Curate when memory quality matters.** Use `unforgit_health`, `unforgit_sync_status`, `unforgit_find_similar`, `unforgit_consolidate`, and `unforgit_curate` when diagnosing memory quality, duplicates, sync, or stale notes. + +## What to save + +- `semantic`: stable facts, architectural decisions, conventions, API contracts. +- `procedural`: repeatable workflows, release/deploy playbooks, troubleshooting steps. +- `episodic`: notable bugs, gotchas, one-off observations that may prevent future mistakes. + +## What not to save + +- Do not save secrets, tokens, passwords, API keys, private credentials, or sensitive environment values. +- Do not save temporary progress, task checklists, transient logs, command output dumps, PR numbers, commit SHAs, or facts likely to be stale soon. +- Do not save obvious information already documented in the repository unless the memory captures a decision or gotcha not obvious from the code. + +## Writing guidelines + +- Write memory text in English unless the repository explicitly standardizes another language. +- Keep each memory concise but self-contained. +- Use tags such as `auth`, `api`, `deploy`, `bug`, `gotcha`, `decision`, or package/module names. +- Prefer repository-scoped Unforgit memory over global assistant memory for project-specific knowledge. +- If a memory may duplicate an existing one, search first and consolidate rather than creating noise. + +## Tool hints + +- Search: `unforgit_recall({ "query": "...", "k": 5 })` +- Save: `unforgit_add({ "text": "...", "type": "semantic", "tags": ["decision"] })` +- Health: `unforgit_health()` +- Sync status: `unforgit_sync_status()`