{
  "markdown": "# Claude Launchpad\n\n[![npm version](https://img.shields.io/npm/v/claude-launchpad?style=flat-square)](https://www.npmjs.com/package/claude-launchpad)\n[![npm downloads](https://img.shields.io/npm/dm/claude-launchpad?style=flat-square)](https://www.npmjs.com/package/claude-launchpad)\n[![GitHub stars](https://img.shields.io/github/stars/mboss37/claude-launchpad?style=flat-square)](https://github.com/mboss37/claude-launchpad)\n[![License: MIT](https://img.shields.io/badge/license-MIT-blue?style=flat-square)](https://github.com/mboss37/claude-launchpad/blob/master/LICENSE)\n![macOS](https://img.shields.io/badge/macOS-supported-brightgreen?style=flat-square&logo=apple)\n![Linux](https://img.shields.io/badge/Linux-supported-brightgreen?style=flat-square&logo=linux)\n![Windows](https://img.shields.io/badge/Windows-untested-yellow?style=flat-square&logo=windows)\n\n**Claude follows CLAUDE.md ~80% of the time. Hooks run at 100%. Most setups have zero hooks.**\n\nLaunchpad scores your coding-agent config, fixes gaps with hooks and permissions, and runs scenarios to prove the agent follows your rules. Local Cursor Agent projects can be scaffolded, diagnosed, repaired, and evaluated with `--harness cursor`. Memory is the same local SQLite store and MCP server for both harnesses (`memory install --harness claude|cursor|both`). Cursor Cloud memory is not supported.\n\nCursor can also consume Claude Code files (`CLAUDE.md`, `.claude/skills/`, `.claude/agents/`, supported hooks) when [third-party configuration](https://cursor.com/docs/reference/third-party-hooks) is enabled. That is a migration bridge, not the native target. Launchpad generates native Cursor files (`AGENTS.md`, `.cursor/`) and certifies them with a live Agent canary. Verified against Cursor Agent `2026.08.25-3e8eec8` via `pnpm canary:cursor`. Eval through Cursor Agent is `pnpm canary:cursor:eval`.\n\nFor developers using Claude Code or Cursor Agent who want consistent results: solo devs, vibe coders, AI-first teams.\n\n## Install and See Your Score\n\n```bash\nnpx claude-launchpad\n```\n\n```\n  Instruction Budget     ━━━━━━━━━━━━━━━━━━━━   100%\n  CLAUDE.md Quality      ━━━━━━━━━━━━━━━━━━━━   100%\n  Settings               ━━━━━━━━━━━━━━━━━━━━   100%\n  Hooks                  ━━━━━━━━━━━━━━━━━━━━   100%\n  Rules                  ━━━━━━━━━━━━━━━━━━━━   100%\n  Permissions            ━━━━━━━━━━━━━━━━━━━━   100%\n  MCP Servers            ━━━━━━━━━━━━━━━━━━━━   100%\n\n  Overall                ━━━━━━━━━━━━━━━━━━━━   100%\n\n  ✓ No issues found. Your configuration looks solid.\n```\n\nA typical unconfigured project scores ~31%. After `--fix`, it jumps to ~91%.\n\n## Quick Start\n\n**New project:**\n\n```bash\nnpx claude-launchpad init\n```\n\nDetects your stack, generates config, hooks, and permissions. Start at ~93%.\n\n**Existing project:**\n\n```bash\nnpx claude-launchpad doctor --fix\n```\n\nScores your config, auto-repairs everything it can.\n\n## The Three-File System + Workflow Rules\n\nWithout structure, CLAUDE.md becomes a dumping ground:\n\n- Future ideas bury active guidance\n- Sprint notes push conventions off-screen  \n- Past ~200 lines, Claude starts ignoring rules at the bottom\n\nThe three-file split keeps each concern where it belongs:\n\n| File | Purpose | Example |\n|---|---|---|\n| `CLAUDE.md` | What Claude needs to know | Stack, commands, conventions, guardrails |\n| `TASKS.md` | What we're doing now | Current sprint, session log (empty between sprints) |\n| `BACKLOG.md` | What we're doing later | WP-NNN template, 7 mandatory fields, P0/P1/P2/P3 sections |\n\nInit generates all three plus a path-scoped workflow rule: `.claude/rules/workflow.md` (Claude) or `.cursor/rules/workflow.mdc` (Cursor). It also installs a `workflow-check.sh` hook that injects drift warnings into the agent's context: a WP entry live in both files, TASKS.md > 80 lines, Current Sprint > 15 items, Session Log > 3 entries, and dependency-blind pulls.\n\nDoctor flags MEDIUM when the workflow rule is missing, LOW when the hook is missing, and MEDIUM on duplicate `## Memory` headings. `--fix` installs or repairs any of them without clobbering existing user content. See the [workflow docs](https://mboss37.github.io/claude-launchpad/docs/workflow) for the full lifecycle.\n\n## Commands\n\n| Command | What it does | Runs |\n|---|---|---|\n| `claude-launchpad` | Score your config (routes to doctor) | Locally, free |\n| `claude-launchpad init` | Detect stack, generate config + hooks + permissions | Locally, free |\n| `claude-launchpad init --harness cursor` | Scaffold a local Cursor Agent project (`AGENTS.md`, `.cursor/`) | Locally, free |\n| `claude-launchpad doctor --fix` | Auto-fix issues found by doctor (Claude, Cursor, or both) | Locally, free |\n| `claude-launchpad doctor --harness cursor` | Score a Cursor Agent project; add `--fix` to repair Launchpad-managed files | Locally, free |\n| `claude-launchpad eval` | Run Claude or Cursor Agent against test scenarios | Via the selected harness CLI/SDK |\n| `claude-launchpad memory` | Optional knowledge base that persists across sessions | Locally |\n| `/lp-enhance` (skill) | The agent reads your code and completes CLAUDE.md or AGENTS.md | Inside Claude Code or Cursor Agent |\n\n## Doctor\n\nRuns analyzers against the selected harness. Claude: `.claude/` and CLAUDE.md. Cursor: `AGENTS.md` and `.cursor/`. Scores stay separate. No API calls, no network, no cost.\n\n**Analyzers:**\n\n| Analyzer | What it catches |\n|---|---|\n| **Instruction Budget** | Too many instructions. Claude starts ignoring rules past ~200. |\n| **CLAUDE.md Quality** | Missing sections, vague instructions, hardcoded secrets, duplicate `## Memory` headings |\n| **Settings** | No hooks configured, dangerous tool access without safety nets |\n| **Hooks** | Missing auto-format, no .env protection, dead PostCompact hooks (the event doesn't exist — `--fix` migrates to a SessionStart `compact` matcher), missing workflow-check hook, missing jq, no auto-sync on session end |\n| **Rules** | Dead rule files, stale references, empty configs, missing `.claude/rules/workflow.md` |\n| **Permissions** | Credential exposure (~/.ssh, ~/.aws), blanket Bash approval, bypass-mode unprotected |\n| **MCP Servers** | Invalid transport configs, missing commands/URLs |\n\nAn optional Memory analyzer runs when agentic memory is detected.\n\n**Flags:**\n\n| Flag | What it does |\n|---|---|\n| `--fix` | Auto-fix: adds hooks, CLAUDE.md or AGENTS.md sections, BACKLOG.md, rules, .claudeignore / .cursorignore |\n| `--fix --dry-run` | Preview fixes without applying them |\n| `--watch` | Re-runs every second as you edit config files |\n| `--json` | Pure JSON output for scripts and CI |\n| `--min-score <n>` | Exit code 1 if score is below threshold (for CI) |\n| `-p, --path <dir>` | Run on a different directory |\n| `--harness` | `auto` (default), `claude`, `cursor`, or `both`. Scores stay separate. |\n\n## Init\n\nReads your manifest files (package.json, go.mod, pyproject.toml, etc.) and generates config that fits. No templates, no menus.\n\n```\n  → Detecting project...\n  ✓ Found Next.js project\n  · Package manager: pnpm\n\n  ✓ Generated CLAUDE.md\n  ✓ Generated TASKS.md\n  ✓ Generated BACKLOG.md\n  ✓ Generated .claude/settings.json (schema, permissions, hooks)\n  ✓ Generated .claude/.gitignore\n  ✓ Generated .claudeignore\n  ✓ Generated .claude/rules/conventions.md\n```\n\n**What init writes (Claude, default):**\n- Always: `CLAUDE.md`, `TASKS.md`, `BACKLOG.md`, `.claude/settings.json`\n- Creates when missing: `.claude/.gitignore`, `.claudeignore`, `.claude/rules/conventions.md`, `.claude/rules/workflow.md`, `.claude/rules/hooks.md`, `.claude/rules/verification.md`, `.claude/agents/code-reviewer.md`\n- Offers `/lp-enhance` install (project/global/skip) if not already present\n\n**What init writes (`--harness cursor`):**\n- Always: `AGENTS.md`, `TASKS.md`, `BACKLOG.md`, `.cursor/hooks.json`, `.cursorignore`\n- Creates when missing: `.cursor/rules/*.mdc`, `.cursor/agents/code-reviewer.md`, `.cursor/skills/lp-enhance/SKILL.md`, hook scripts under `.cursor/hooks/`\n- `--force` overwrites `AGENTS.md` only\n\n**Supported stacks:** TypeScript, JavaScript, Python, Go, Ruby, Rust, Dart, PHP, Java, Kotlin, Swift, Elixir, C#. Detects frameworks: Next.js, FastAPI, Django, Rails, Laravel, Express, SvelteKit, Angular, NestJS, and 15+ more.\n\n## Enhance\n\nInit detects your stack but cannot read your architecture. The `/lp-enhance` skill runs inside Claude Code or Cursor Agent to fill in the details.\n\n```\n/lp-enhance\n```\n\nThe agent reads your codebase and updates `CLAUDE.md` or `AGENTS.md` with real content: actual architecture, actual conventions, actual guardrails. Not boilerplate. It also suggests project-specific hooks and MCP servers.\n\nStays under the 200-instruction budget. Overflows detailed content to `.claude/rules/` or `.cursor/rules/*.mdc`. If the skill is missing, `doctor --fix` will create it.\n\n**When to re-run:** after major refactors, new dependencies, or architecture changes.\n\n## Eval\n\nRuns the selected coding agent against real test scenarios and scores the results.\n\n```bash\n# Interactive mode (pick suite, runs, model)\nclaude-launchpad eval\n\n# Or pass flags directly\nclaude-launchpad eval --suite security --runs 1 --model haiku\nclaude-launchpad eval --harness cursor --suite security --runs 1 --model auto\n```\n\nIf both Claude and Cursor configs are present, `--harness` is required. Each scenario creates an isolated sandbox with only that harness's project config. It runs the agent and checks whether the configuration made it follow the rules.\n\n```\n  ✓ security/sql-injection            10/10  PASS\n  ✓ security/env-protection           10/10  PASS\n  ✓ security/secret-exposure          10/10  PASS\n  ✓ security/input-validation         10/10  PASS\n  ✗ conventions/file-size              5/10  FAIL\n    ✗ Claude kept all generated files under 800 lines\n\n  Config Eval Score      ━━━━━━━━━━━━━━━━━━━─    95%\n```\n\nResults save to `.claude/eval/` or `.cursor/eval/` as structured markdown. Feed them back to the agent to fix failures.\n\n**Suites:**\n\n| Suite | Scenarios | What it tests |\n|---|---|---|\n| `security` | 7 | SQL injection, .env protection, secret exposure, input validation, credential read, env exfil via Bash, env-read-attempt |\n| `conventions` | 5 | Error handling, immutability, file size, naming, no hardcoded values |\n| `workflow` | 5 | Git conventions, session continuity, memory persistence, deferred tracking, premature-victory |\n\n**Flags:**\n\n| Flag | What it does |\n|---|---|\n| `--suite <name>` | Run one suite: `security`, `conventions`, or `workflow` |\n| `-p, --path <dir>` | Project root to evaluate (defaults to cwd) |\n| `--scenarios <path>` | Use a custom scenarios directory |\n| `--harness <name>` | `claude` or `cursor` (required when both configs exist) |\n| `--model <model>` | Model to use: `haiku`, `sonnet`, `opus`, or a Cursor model id / `auto` |\n| `--runs <n>` | Runs per scenario (default 3, median score used) |\n| `--debug` | Keep sandbox directories for inspection |\n| `--json` | JSON output |\n| `--timeout <ms>` | Timeout per run (default 120000) |\n\n## Hooks\n\nInstruction-file rules are ~80% reliable. Hooks are 100% enforced by the harness. Init and `--fix` set up these hooks automatically. Claude event names below; Cursor uses the native equivalents (`beforeReadFile`, `beforeShellExecution`, `afterFileEdit`, `postToolUse`, `sessionStart`).\n\n| Hook | Trigger | What it does |\n|---|---|---|\n| **.env protection** | Before any Read/Write/Edit | Blocks Claude from reading `.env` files that contain secrets |\n| **Force-push protection** | Before any Bash command | Blocks `git push --force` to prevent destroying remote history |\n| **Auto-format** | After any Write/Edit | Runs your language's formatter (prettier, ruff, gofmt, rustfmt, etc.) |\n| **SessionStart** | Session opens | Injects TASKS.md so Claude knows where you left off |\n| **PostCompact** | After context compression | Re-injects TASKS.md so Claude doesn't lose sprint state mid-session |\n| **workflow-check** | After BACKLOG.md/TASKS.md Edit/Write | Injects context warnings: WP entry in both files, TASKS.md > 80 lines, Current Sprint > 15 items, Session Log > 3 entries, dependency-blind pulls |\n| **sprint-size / sprint-open** | Session start / `git commit` | Warns on microsprints (<3 WPs), oversized sprints (>7 WPs), new sprint opened without BACKLOG cleanup |\n\nClaude Code memory projects get three additional hooks. Cursor Agent does not — it uses `memory_search` and explicit `memory sync` / `push` / `pull`:\n\n| Hook | Trigger | What it does |\n|---|---|---|\n| **SessionStart pull** | Session opens | Auto-pulls memories from GitHub Gist |\n| **SessionStart context** | Session opens | Injects the most relevant memories into Claude's context (6-signal scoring + diversity + token budget) |\n| **SessionEnd push** | Session closes | Auto-pushes new memories to GitHub Gist |\n\n## Memory (optional)\n\nClaude's built-in memory resets per machine. Launchpad gives each project persistent, cross-device memory that syncs via a private GitHub Gist. Switch laptops and your decisions are already there.\n\n**Why this memory and not another:**\n\n- **Free cross-machine sync.** Native Claude Code memory is single-machine; cloud memory layers need API keys and subscriptions. Launchpad syncs through a private GitHub Gist you already have — zero cost, deletions propagate, machines converge.\n- **Measured, not assumed.** The only local agent memory with a benchmark suite (59 tests) gating every release: retrieval quality, injection quality, decay accuracy, scale. `doctor` diagnoses memory health; `eval` proves behavior.\n- **Zero infrastructure.** One native dep, stdio MCP, local SQLite. No Docker, no vector DB service, no localhost API server, no cloud account.\n- **Engineered injection.** Session context is packed by 6-signal relevance scoring with diversity re-ranking under a token budget — not just \"last N memories\".\n\n```bash\nclaude-launchpad memory\nclaude-launchpad memory install --harness cursor\n```\n\nInteractive setup if not installed, stats if it is. The one native dep is installed for you (`npm install -g better-sqlite3`) or on demand. Sync requires the [GitHub CLI](https://cli.github.com/). `--harness claude|cursor|both` writes the MCP file for the selected local harness. Cursor Agent uses `.cursor/mcp.json` and does not auto-inject memories; Cursor Cloud Agents cannot use this local server.\n\nOnce set up, `claude-launchpad memory sync` is the everyday command — pull + push in one call, so every machine has the same project brain. Deletions propagate too (tombstones): machines converge to the same memory set, never more, never less. This is the piece Claude Code's built-in memory doesn't do — see [built-in vs Launchpad memory](https://mboss37.github.io/claude-launchpad/docs/memory#built-in-memory-vs-launchpad-memory).\n\n- Claude: relevant memories auto-injected at session start. Cursor: call `memory_search` — no auto-inject. New memories stored as the agent works.\n- Stale knowledge fades, important decisions persist\n- Each project has its own scoped memory\n- `--dashboard` opens a terminal UI with vim nav, filtering, and search\n\nFull flag and subcommand reference in [the memory docs](https://mboss37.github.io/claude-launchpad/docs/memory).\n\n## Use in CI\n\nBlock PRs that degrade your agent config quality. `--min-score` gates each harness separately:\n\n```yaml\n# .github/workflows/agent-config.yml\nname: Agent Config Quality\non:\n  pull_request:\n    paths: ['CLAUDE.md', '.claude/**', '.claudeignore', 'AGENTS.md', '.cursor/**', '.cursorignore']\njobs:\n  config-check:\n    runs-on: ubuntu-latest\n    steps:\n      - uses: actions/checkout@v4\n      - uses: actions/setup-node@v4\n        with: { node-version: '22' }\n      - run: npx claude-launchpad@latest doctor --min-score 80 --json\n```\n\nScore below threshold = exit code 1 = PR blocked.\n\n## Glossary\n\nNew to the harnesses? Here's what the terms mean.\n\n| Term | What it is |\n|---|---|\n| **CLAUDE.md** | Claude Code's project instruction file. [Official docs](https://docs.anthropic.com/en/docs/claude-code/memory#claudemd) |\n| **AGENTS.md** | Cursor Agent's project instruction file. Same job as CLAUDE.md, different filename. |\n| **TASKS.md** | Sprint tracker and session log. Shared by both harnesses. |\n| **BACKLOG.md** | Where deferred features live. Priority tiers (P0/P1/P2) keep future ideas organized without cluttering TASKS.md. |\n| **Hooks** | Commands that run automatically when the agent does something. Instruction-file rules are ~80% reliable. Hooks are 100% enforced. |\n| **Instruction budget** | Soft limit of ~200 actionable lines in CLAUDE.md or AGENTS.md. Past that, rules at the bottom get ignored. Doctor counts them. |\n| **Rules** | Extra files in `.claude/rules/` or `.cursor/rules/*.mdc` so the instruction file stays under budget. |\n| **Compaction** | Claude Code compresses long conversations. A SessionStart `compact` matcher re-injects TASKS.md. Cursor uses `sessionStart`. |\n| **MCP Servers** | External tools. Claude: `.mcp.json` or settings. Cursor: `.cursor/mcp.json`. |\n| **.claudeignore / .cursorignore** | Like `.gitignore` for the agent — skip noise files. |\n\n## Privacy\n\n- No telemetry, no analytics, no data sent anywhere\n- Doctor, init, and fix run fully offline\n- Memory stores data locally at `~/.agentic-memory/`\n- Sync (`memory push/pull`) uses a private GitHub Gist under your account\n- Enhance runs inside the local Claude Code or Cursor Agent session; eval uses that harness's CLI/SDK\n\n[Full privacy policy](https://mboss37.github.io/claude-launchpad/privacy.html).\n\n## License\n\nMIT\n",
  "bytes": 17565,
  "sha": "e1d21ec257485d53427389d118663ebf2e2b486fbf6fce85b7c332fa671698e9",
  "repo_slug": "mboss37/claude-launchpad",
  "fonte": "repo",
  "truncated": false,
  "api": "https://agentalog.com/api/listings/plg_mboss37_claude_launchpad_claude_launchpa_266641f8/readme"
}