claude-launchpad 0.12.2 → 0.13.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -72,7 +72,7 @@ Init generates all three. Doctor checks for them. `--fix` creates any that are m
72
72
  | `claude-launchpad init` | Detect stack, generate config + hooks + permissions | Locally, free |
73
73
  | `claude-launchpad doctor --fix` | Auto-fix issues found by doctor | Locally, free |
74
74
  | `claude-launchpad eval` | Run Claude against test scenarios, score results | Via Claude CLI |
75
- | `claude-launchpad memory` | Optional persistent memory system | Locally |
75
+ | `claude-launchpad memory` | Optional knowledge base that persists across sessions | Locally |
76
76
  | `/lp-enhance` (skill) | Claude reads your code and completes CLAUDE.md | Inside Claude Code |
77
77
 
78
78
  ## Doctor
@@ -193,7 +193,7 @@ Results save to `.claude/eval/` as structured markdown. Feed them back to Claude
193
193
 
194
194
  ## Memory
195
195
 
196
- Optional persistent memory that replaces Claude Code's built-in flat-file system. Memories decay naturally, so stale knowledge fades and relevant context stays.
196
+ Claude maintains a personal knowledge base about your project. It learns what matters, forgets what doesn't, and gets smarter every session.
197
197
 
198
198
  ```bash
199
199
  claude-launchpad memory
@@ -201,14 +201,9 @@ claude-launchpad memory
201
201
 
202
202
  If memory is not installed, it runs interactive setup. If installed, it shows stats. Requires native deps first: `npm install better-sqlite3 sqlite-vec`.
203
203
 
204
- **What it does:**
205
- - **Smart session injection** loads the most relevant memories at session start
206
- - **Stop hook** extracts facts from the conversation when you finish
207
- - **Decay model** fades memories naturally (episodic: 30 days, semantic: 18 months, procedural: 2 years)
208
- - **Self-tuning retrieval** promotes memories Claude searches for, demotes ones injected but never used
209
- - **Project-scoped** with no cross-contamination between projects
210
- - **TUI dashboard** (`--dashboard`) with vim navigation, filtering, and search
211
- - **Cross-device sync** pushes and pulls memories between machines via private GitHub Gist
204
+ Every session, Claude loads what it needs to know and extracts new knowledge when you finish. Stale facts fade on their own. Knowledge Claude actually uses gets reinforced. Each project has its own isolated memory, and you can sync it across machines via private GitHub Gist.
205
+
206
+ Browse everything with `--dashboard` -- a terminal UI with vim navigation, filtering, and search.
212
207
 
213
208
  Data stays in `~/.agentic-memory/memory.db`. Sync requires the [GitHub CLI](https://cli.github.com/) (`gh`).
214
209
 
package/dist/cli.js CHANGED
@@ -572,6 +572,8 @@ function generateEnhanceSkill() {
572
572
  "5. **## Memory** - ONLY if agentic-memory is configured in settings.json. Max 6 bullets.",
573
573
  "6. **## Key Decisions** - only decisions that affect how Claude works in this codebase",
574
574
  "",
575
+ "7. **Skill Authoring** - if .claude/rules/conventions.md lacks a Skill Authoring section, plan to add one",
576
+ "",
575
577
  "If any section would exceed 8 bullets, plan a .claude/rules/ file for the overflow.",
576
578
  "",
577
579
  "**Done when:** you know exactly what to add/change and the line count stays under 200.",
@@ -633,6 +635,20 @@ function generateEnhanceSkill() {
633
635
  "- Each package gets its own rules file: .claude/rules/packages-<name>.md",
634
636
  "- Suggest claudeMdExcludes in settings.json to skip irrelevant package CLAUDE.md files",
635
637
  "",
638
+ "## Skill authoring conventions",
639
+ "",
640
+ "If .claude/rules/conventions.md exists but has no Skill Authoring section, add this:",
641
+ "",
642
+ "## Skill Authoring",
643
+ "",
644
+ "When creating Claude Code skills (.claude/skills/*/SKILL.md):",
645
+ "",
646
+ "- Add TRIGGER when / DO NOT TRIGGER when clauses in the description for auto-invocation",
647
+ "- Add allowed-tools in frontmatter to restrict tool access (e.g. Read, Glob, Grep for read-only skills)",
648
+ "- Add argument-hint in frontmatter showing the expected input format",
649
+ '- Structure as phases: Research, Plan, Execute, Verify with "Done when:" success criteria per phase',
650
+ "- Handle edge cases and preconditions before execution",
651
+ "",
636
652
  "## Hook review",
637
653
  "",
638
654
  "Review .claude/settings.json hooks:",
@@ -786,6 +802,18 @@ function generateStarterRules(detected) {
786
802
  lines.push("- Prefer Result over unwrap/expect in library code");
787
803
  lines.push("- No unsafe blocks without a safety comment");
788
804
  }
805
+ lines.push(
806
+ "",
807
+ "## Skill Authoring",
808
+ "",
809
+ "When creating Claude Code skills (.claude/skills/*/SKILL.md):",
810
+ "",
811
+ "- Add TRIGGER when / DO NOT TRIGGER when clauses in the description for auto-invocation",
812
+ "- Add allowed-tools in frontmatter to restrict tool access (e.g. Read, Glob, Grep for read-only skills)",
813
+ "- Add argument-hint in frontmatter showing the expected input format",
814
+ '- Structure as phases: Research, Plan, Execute, Verify with "Done when:" success criteria per phase',
815
+ "- Handle edge cases and preconditions before execution"
816
+ );
789
817
  lines.push("");
790
818
  return lines.join("\n");
791
819
  }
@@ -2638,10 +2666,10 @@ function isMemoryInstalled() {
2638
2666
  }
2639
2667
  }
2640
2668
  function createMemoryCommand() {
2641
- const memory = new Command4("memory").description("Persistent memory system for Claude Code sessions").option("--dashboard", "Open the memory dashboard").action(async (opts) => {
2669
+ const memory = new Command4("memory").description("Knowledge base that Claude maintains across sessions").option("--dashboard", "Open the memory dashboard").action(async (opts) => {
2642
2670
  if (opts.dashboard) {
2643
2671
  if (!isMemoryInstalled()) {
2644
- log.error("Memory system is not installed. Run `claude-launchpad memory` first.");
2672
+ log.error("Knowledge base not set up yet. Run `claude-launchpad memory` first.");
2645
2673
  return;
2646
2674
  }
2647
2675
  const { requireMemoryDeps } = await import("./require-deps-NKRCPVAO.js");
@@ -2652,23 +2680,22 @@ function createMemoryCommand() {
2652
2680
  }
2653
2681
  if (!isMemoryInstalled()) {
2654
2682
  log.blank();
2655
- log.step("Agentic memory is not set up for this project.");
2683
+ log.step("Claude doesn't have a knowledge base for this project yet.");
2656
2684
  log.blank();
2657
- log.info("This will (skipping what's already in place):");
2658
- log.info(" - Set up SQLite database at ~/.agentic-memory/");
2659
- log.info(" - Add SessionStart + Stop hooks to .claude/settings.json");
2660
- log.info(" - Register the MCP server with Claude Code (global)");
2661
- log.info(" - Add memory guidance to CLAUDE.md");
2685
+ log.info("After setup, Claude will:");
2686
+ log.info(" - Remember decisions, gotchas, and learnings across sessions");
2687
+ log.info(" - Automatically recall relevant context when you start a session");
2688
+ log.info(" - Save important facts as you work, so nothing gets lost");
2662
2689
  log.blank();
2663
2690
  const proceed = await confirm2({
2664
- message: "Install agentic-memory?",
2691
+ message: "Set up knowledge base?",
2665
2692
  default: true
2666
2693
  });
2667
2694
  if (!proceed) {
2668
2695
  log.info("Skipped.");
2669
2696
  return;
2670
2697
  }
2671
- const { runInstall } = await import("./install-C5XDWATE.js");
2698
+ const { runInstall } = await import("./install-H6GW4P6K.js");
2672
2699
  await runInstall({});
2673
2700
  } else {
2674
2701
  const { requireMemoryDeps } = await import("./require-deps-NKRCPVAO.js");
@@ -2714,7 +2741,7 @@ function createMemoryCommand() {
2714
2741
  }
2715
2742
 
2716
2743
  // src/cli.ts
2717
- var program = new Command5().name("claude-launchpad").description("CLI toolkit that makes Claude Code setups measurably good").version("0.12.2", "-v, --version").action(async () => {
2744
+ var program = new Command5().name("claude-launchpad").description("CLI toolkit that makes Claude Code setups measurably good").version("0.13.1", "-v, --version").action(async () => {
2718
2745
  const hasConfig = await fileExists(join11(process.cwd(), "CLAUDE.md")) || await fileExists(join11(process.cwd(), ".claude", "settings.json"));
2719
2746
  if (hasConfig) {
2720
2747
  await program.commands.find((c) => c.name() === "doctor")?.parseAsync([], { from: "user" });