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 +1 -1
- package/dist/commands.js +1 -1
- package/dist/inject-instruction.js +0 -5
- package/dist/mcp-setup.js +13 -11
- package/dist/project-init.js +5 -6
- package/extras/skills/replen-onboard/SKILL.md +10 -3
- package/package.json +1 -1
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** `
|
|
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("
|
|
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
|
|
59
|
-
//
|
|
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
|
-
"
|
|
68
|
-
"
|
|
69
|
-
"
|
|
70
|
-
"
|
|
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
|
|
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();
|
package/dist/project-init.js
CHANGED
|
@@ -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 \`
|
|
29
|
-
available, call it once
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
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 —
|
|
338
|
+
## Step 4 — Close out
|
|
333
339
|
|
|
334
|
-
1.
|
|
335
|
-
|
|
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
|
|
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": {
|