Agent Plugins Marketplace
All plugins

loop-memory

v0.7.0

pgvector semantic recall for verified dev-loop lessons (and, optionally, ADR/glossary/research knowledge). Opt-in: installs disabled by default — this is a database dependency, not core loop mechanics.

Claude Code

By paulkim-lansikLicense: MIT0 GitHub starsUpdated yesterday

Directory evidence

Runtimes
Claude Code
Parsed components
0 skill or MCP entries
Source updated
Sep 22, 2026
Manifest status
Canonical path parsed

The directory validates manifest shape and source location. It does not execute the plugin or provide a security endorsement. Review the indexing methodology

Install loop-memory for Claude Code

Installs for the current user
claude plugin marketplace add IchenDEV/agent-plugin-mkt
claude plugin marketplace update agent-plugin-marketplace
claude plugin install loop-memory@agent-plugin-marketplace

Paste and run these commands in a terminal with Claude Code. They add and refresh the PluginsMP catalog, then install this plugin.

The installer fetches third-party code from the source repository shown on this page. This directory validates manifest structure and source location, but does not perform a security audit; review the manifest, components, and source before installing.

Get the source manually
git clone https://github.com/reach0908/paul-loop

Clone the source repository, then follow its setup instructions to add the plugin to a compatible client. The plugin root is tools/loop-memory/.

Plugin files

tools/loop-memory/
└── .claude-plugin/plugin.json

Plugin manifests1

tools/loop-memory/.claude-plugin/plugin.json
{
  "name": "loop-memory",
  "version": "0.7.0",
  "description": "pgvector semantic recall for verified dev-loop lessons (and, optionally, ADR/glossary/research knowledge). Opt-in: installs disabled by default — this is a database dependency, not core loop mechanics.",
  "author": {
    "name": "paulkim-lansik"
  },
  "homepage": "https://github.com/reach0908/paul-loop",
  "repository": "https://github.com/reach0908/paul-loop",
  "license": "MIT",
  "keywords": [
    "memory",
    "pgvector",
    "recall",
    "semantic-search",
    "lessons"
  ],
  "defaultEnabled": false,
  "dependencies": [
    {
      "name": "loop-engine",
      "version": "^0.15.0"
    }
  ],
  "userConfig": {
    "openai_api_key": {
      "type": "string",
      "title": "OpenAI API key",
      "description": "Used to embed lessons/knowledge for semantic recall (provider=openai). Leave unset if using Gemini instead. Without either key, the hooks no-op (fail-open).",
      "sensitive": true,
      "required": false
    },
    "gemini_api_key": {
      "type": "string",
      "title": "Gemini API key",
      "description": "Used to embed lessons/knowledge for semantic recall (provider=gemini). Leave unset if using OpenAI instead.",
      "sensitive": true,
      "required": false
    },
    "loop_database_url": {
      "type": "string",
      "title": "loop-memory Postgres connection URL",
      "description": "pgvector-enabled Postgres to store notes in. Defaults to this plugin's docker-compose.yml (postgresql://postgres:postgres@localhost:5434/loop_memory).",
      "required": false
    },
    "loop_memory_signing_key": {
      "type": "string",
      "title": "Write-path signing key",
      "description": "HMAC-SHA256 key required for store writes and recall. Notes are bound to repository owner, corpus, source, embedding identity and content hash, including knowledge notes. Missing configuration fails closed; see README Threat model.",
      "sensitive": true,
      "required": false
    },
    "loop_dotenv_path": {
      "type": "string",
      "title": "Dotenv file the hooks load keys from",
      "description": "Repo-relative (or absolute) path to a dotenv-shaped file the hooks read before their embedding-key gate — Claude Code hands hooks the session process env only and never loads .env files, so a key that lives solely in an (unexported, gitignored) .env would otherwise make both hooks no-op silently. Values already set in the session env or via the options above always win. Default (if unset): .loop/.env. If the path is missing in a feature worktree, the main worktree's copy is used (a gitignored .env is never copied into a new worktree).",
      "required": false
    },
    "loop_adr_dir": {
      "type": "string",
      "title": "ADR directory (optional knowledge source)",
      "description": "Repo-relative path to your ADR directory (e.g. docs/adr). Assumes each file's first line is `# ADR-NNNN: Title` and a `**Status**: Superseded (by ADR-XXXX)`-style marker for deprecation. Leave unset to skip this knowledge source entirely.",
      "required": false
    },
    "loop_context_file": {
      "type": "string",
      "title": "Glossary file (optional knowledge source)",
      "description": "Repo-relative path to a single glossary markdown file, chunked by `**Term**:` paragraphs. Leave unset to skip.",
      "required": false
    },
    "loop_research_dir": {
      "type": "string",
      "title": "Research directory (optional knowledge source)",
      "description": "Repo-relative path to a directory of markdown research docs, chunked by `##` section. Leave unset to skip.",
      "required": false
    },
    "loop_design_dir": {
      "type": "string",
      "title": "Design-spec directory (optional knowledge source)",
      "description": "Repo-relative path to a directory of markdown design-spec docs, chunked by `##` section. Leave unset to skip.",
      "required": false
    },
    "loop_recall_max_distance": {
      "type": "number",
      "title": "Lessons recall distance cutoff",
      "description": "Cosine distance (0=identical..2=opposite) above which a lesson hit is dropped instead of injected. Embedder-dependent — calibrate for your provider. Default (if unset): 0.65, a loose safety net.",
      "required": false
    },
    "loop_knowledge_max_distance": {
      "type": "number",
      "title": "Knowledge recall distance cutoff",
      "description": "Same as loop_recall_max_distance, but for the knowledge corpus (ADR/glossary/research/design) — kept separate since knowledge prose has a different embedding distribution than short lesson signatures. Default (if unset): 0.65.",
      "required": false
    },
    "loop_embed_provider": {
      "type": "string",
      "title": "Embedding provider",
      "description": "openai or gemini. Set explicitly when both provider credentials are present; ambiguous selection fails closed.",
      "required": false
    },
    "loop_embed_model": {
      "type": "string",
      "title": "Embedding model",
      "description": "Explicit provider model override. The resolved model and dimensions are part of store compatibility; changing them requires a deliberate reindex.",
      "required": false
    }
  }
}

If you maintain this plugin, link to this source-backed listing from your README so users can review its manifest and indexed components.

[loop-memory on Agent Plugins Marketplace](https://pluginsmp.com/plugins/loop-memory)