replen 1.0.39 → 1.1.0

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 @@ Every data command accepts `--json` for scripting.
72
72
  Three layers, defence-in-depth — at least one will fire:
73
73
 
74
74
  1. **SessionStart hook** runs `npx replen check-new --hook` at the start of every Claude Code session. If there's anything new, the JSON output appears in the agent's opening context.
75
- 2. **MCP tool** `replen_check_new` is exposed to the agent at all times. The instructions in `CLAUDE.md` tell it to call this tool early in each session.
75
+ 2. **MCP tool** `replen_match` is exposed to the agent at all times. The instructions in `CLAUDE.md` tell it to call this once early in each session (it returns the footnote + the candidate inventory).
76
76
  3. **CLAUDE.md / AGENTS.md instruction** (idempotent, marker-versioned) is injected into every tracked repo on setup. This is the most reliable layer — survives Claude Code version churn.
77
77
 
78
78
  Calm-cadence by design: most days are silent. 1-3 actionable matches a month per project.
package/dist/commands.js CHANGED
@@ -335,7 +335,7 @@ export async function runCheckNew(argv) {
335
335
  console.log(` ${m.oneLine}`);
336
336
  }
337
337
  console.log("");
338
- console.log("Call replen_today for the full writeups.");
338
+ console.log("Open /replen (replen_match) for the full writeups.");
339
339
  }
340
340
  // Watch for new matches in the background. Polls /api/mcp/today, diffs against
341
341
  // the matchIds seen on the previous poll, prints anything new, and rings the
@@ -81,11 +81,6 @@ On your **very first response** of each session:
81
81
  - The user directly asked for Replen output ("anything from replen
82
82
  today?", "what\'s new from replen?"). Just answer.
83
83
 
84
- **Do NOT use \`replen_check_new\` for the conversational footnote.**
85
- That tool is cursor-based and meant for SessionStart shell hooks.
86
- \`replen_match\` queries inventory state directly and is the right
87
- primitive here.
88
-
89
84
  **Don\'t call \`replen_match\` again on subsequent turns** — once
90
85
  per session at start only. The user explicitly types
91
86
  \`/replen\` if they want a fresh triage mid-session.
package/dist/mcp-setup.js CHANGED
@@ -55,19 +55,21 @@ const CODEX_CONFIG = join(homedir(), ".codex", "config.toml");
55
55
  const GEMINI_CONFIG = join(homedir(), ".gemini", "settings.json");
56
56
  // Read/triage replen MCP tools that are safe to auto-allow so the proactive
57
57
  // footnote (replen_match) and in-session triage don't trigger a permission
58
- // prompt every session. Deliberately EXCLUDES replen_run / replen_handoff /
59
- // replen_feedback those trigger pipeline runs / open PRs and should keep
60
- // prompting for explicit consent.
58
+ // prompt every session. Deliberately EXCLUDES replen_handoff it opens PRs and
59
+ // should keep prompting for explicit consent.
61
60
  const REPLEN_AUTO_ALLOW = [
62
61
  "mcp__replen__replen_match",
63
- "mcp__replen__replen_check_new",
64
- "mcp__replen__replen_analyze",
65
- "mcp__replen__replen_state",
66
62
  "mcp__replen__replen_record_triage",
67
- "mcp__replen__replen_today",
68
- "mcp__replen__replen_search",
69
- "mcp__replen__replen_starred",
70
- "mcp__replen__replen_status",
63
+ "mcp__replen__replen_state",
64
+ "mcp__replen__replen_capture_insight",
65
+ "mcp__replen__replen_recall",
66
+ "mcp__replen__replen_leaps",
67
+ "mcp__replen__replen_queue",
68
+ "mcp__replen__replen_onboard_state",
69
+ "mcp__replen__replen_set_tags",
70
+ "mcp__replen__replen_set_capabilities",
71
+ "mcp__replen__replen_set_versions",
72
+ "mcp__replen__replen_set_product",
71
73
  "mcp__replen__replen_help",
72
74
  ];
73
75
  // ============================================================================
@@ -99,7 +101,7 @@ export async function setupMcp(token, base) {
99
101
  installSkills();
100
102
  // CLAUDE.md / AGENTS.md / GEMINI.md inject is the proactive-surfacing
101
103
  // mechanism for each host. Without it, the agent doesn't know to
102
- // call replen_check_new at session start. Idempotent + versioned.
104
+ // call replen_match at session start. Idempotent + versioned.
103
105
  console.log("");
104
106
  const { injectInstructions, summariseOutcome } = await import("./inject-instruction.js");
105
107
  const outcome = await injectInstructions();
@@ -25,12 +25,11 @@ Total length target: 200-500 words, bullet points over paragraphs.
25
25
 
26
26
  Also append a short "## Replen integration" section with this exact guidance:
27
27
 
28
- At the start of every session, if the \`replen_check_new\` tool is
29
- available, call it once before asking the user what to work on.
30
- If \`hasNew\` is true, summarise the count + repos in 1-2 lines and
31
- ask if the user wants the full writeups (which they get via
32
- \`replen_today\`). If \`hasNew\` is false, say nothing silence is
33
- the correct response, not "no new matches found".
28
+ At the start of every session, if the \`replen_match\` tool is
29
+ available, call it once (no repo arg it defaults to the cwd repo)
30
+ before asking the user what to work on. Relay the USER-FACING MESSAGE
31
+ block it returns VERBATIM if it's non-empty; if it's empty, say
32
+ nothing silence is the correct response, not "no new matches found".
34
33
 
35
34
  This instruction is a fallback for AI tools that don't run Claude Code's SessionStart hooks (e.g. Codex, Cursor, Aider). For Claude Code users the hook calls \`replen check-new\` automatically and Claude Code injects the result into the opening context — but the CLAUDE.md guidance is durable across tools and survives hook misconfiguration.`;
36
35
  export function runProjectInit() {
@@ -297,6 +297,12 @@ typed properties, computed properties as rows", never the entity names).
297
297
  `military-drones`, `counter-uas`). The COLLECTIVE pins the meaning: a
298
298
  candidate that hits one term but none of its neighbours is a different
299
299
  world and scores low.
300
+ - QUALIFY AMBIGUOUS HEAD-NOUNS. If a tag's core noun is ambiguous ACROSS
301
+ fields (`agent`, `carry`, `model`, `pipeline`, `driver`, `mission`),
302
+ prefix it with the domain so the compound carries the meaning —
303
+ `estate-agent-matching` NOT `agent-matching`, `funding-carry` NOT `carry`.
304
+ A bare head-noun like `agent-matching` decomposes in embedding space toward
305
+ the wrong field (AI agents) and drags the whole project's centroid with it.
300
306
  - GROUNDED ONLY — every tag supported by code you actually read; never
301
307
  aspirational (don't add `scraping` if it doesn't scrape).
302
308
  - EXCLUDE: stack / framework / language (`next.js`, `react`, `firebase`,
@@ -329,10 +335,11 @@ If several repos are one product (e.g. `aegis-web`/`aegis-api`/`aegis-cv`), grou
329
335
  them with `replen_set_product` so Replen unions the whole product's capabilities
330
336
  when the user is in any one of them.
331
337
 
332
- ## Step 4 — Warm + close out
338
+ ## Step 4 — Close out
333
339
 
334
- 1. Trigger an embedding/inventory pass so everything's ready: `replen_run` (it's
335
- async; the per-project facets you set are already live regardless).
340
+ 1. Nothing to trigger the per-project facets, capabilities, and versions you
341
+ set are live immediately, and the next scheduled run refreshes the candidate
342
+ inventory automatically.
336
343
  2. Summarise what you did, calmly:
337
344
 
338
345
  ```
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "replen",
3
- "version": "1.0.39",
3
+ "version": "1.1.0",
4
4
  "description": "Make your AI coding tools smarter. One command, no API keys, free. Replen watches what your projects actually do and surfaces a few things worth bringing in each month. Use one as is, port a piece of another, cherry pick an idea, or build it clean room. The match happens inside your AI tool's session. A few actionable matches a month, by design.",
5
5
  "type": "module",
6
6
  "bin": {