recallium 1.2.6 → 2.0.8
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/.claude-plugin/plugin.json +20 -0
- package/LICENSE +56 -0
- package/README.md +36 -52
- package/bin/manifest.json +8 -0
- package/bin/opencode-plugin-manifest.json +8 -0
- package/bin/recallium-hooks.cjs +111 -0
- package/bin/recallium-opencode-plugin.cjs +1 -0
- package/bin/skills/antigravity/capture/SKILL.md +61 -0
- package/bin/skills/antigravity/curate/SKILL.md +64 -0
- package/bin/skills/antigravity/decide/SKILL.md +62 -0
- package/bin/skills/antigravity/design/SKILL.md +61 -0
- package/bin/skills/antigravity/finish/SKILL.md +82 -0
- package/bin/skills/antigravity/handoff/SKILL.md +63 -0
- package/bin/skills/antigravity/investigate/SKILL.md +84 -0
- package/bin/skills/antigravity/project/SKILL.md +60 -0
- package/bin/skills/antigravity/recall/SKILL.md +107 -0
- package/bin/skills/antigravity/recallium-guidance/SKILL.md +141 -0
- package/bin/skills/antigravity/recallium-guidance/reference.md +117 -0
- package/bin/skills/antigravity/recallium-tools/SKILL.md +64 -0
- package/bin/skills/antigravity/resume/SKILL.md +64 -0
- package/bin/skills/antigravity/rule/SKILL.md +64 -0
- package/bin/skills/antigravity/start-work/SKILL.md +78 -0
- package/bin/skills/antigravity/team/SKILL.md +57 -0
- package/bin/skills/antigravity/verdict/SKILL.md +63 -0
- package/bin/skills/claude-code/capture/SKILL.md +61 -0
- package/bin/skills/claude-code/curate/SKILL.md +64 -0
- package/bin/skills/claude-code/decide/SKILL.md +62 -0
- package/bin/skills/claude-code/design/SKILL.md +61 -0
- package/bin/skills/claude-code/finish/SKILL.md +82 -0
- package/bin/skills/claude-code/handoff/SKILL.md +63 -0
- package/bin/skills/claude-code/investigate/SKILL.md +84 -0
- package/bin/skills/claude-code/project/SKILL.md +60 -0
- package/bin/skills/claude-code/recall/SKILL.md +107 -0
- package/bin/skills/claude-code/recallium-guidance/SKILL.md +141 -0
- package/bin/skills/claude-code/recallium-guidance/reference.md +117 -0
- package/bin/skills/claude-code/recallium-tools/SKILL.md +64 -0
- package/bin/skills/claude-code/resume/SKILL.md +64 -0
- package/bin/skills/claude-code/rule/SKILL.md +64 -0
- package/bin/skills/claude-code/start-work/SKILL.md +78 -0
- package/bin/skills/claude-code/team/SKILL.md +57 -0
- package/bin/skills/claude-code/verdict/SKILL.md +63 -0
- package/bin/skills/codex/capture/SKILL.md +61 -0
- package/bin/skills/codex/curate/SKILL.md +64 -0
- package/bin/skills/codex/decide/SKILL.md +62 -0
- package/bin/skills/codex/design/SKILL.md +61 -0
- package/bin/skills/codex/finish/SKILL.md +82 -0
- package/bin/skills/codex/handoff/SKILL.md +63 -0
- package/bin/skills/codex/investigate/SKILL.md +84 -0
- package/bin/skills/codex/project/SKILL.md +60 -0
- package/bin/skills/codex/recall/SKILL.md +107 -0
- package/bin/skills/codex/recallium-guidance/SKILL.md +141 -0
- package/bin/skills/codex/recallium-guidance/reference.md +117 -0
- package/bin/skills/codex/recallium-tools/SKILL.md +64 -0
- package/bin/skills/codex/resume/SKILL.md +64 -0
- package/bin/skills/codex/rule/SKILL.md +64 -0
- package/bin/skills/codex/start-work/SKILL.md +78 -0
- package/bin/skills/codex/team/SKILL.md +57 -0
- package/bin/skills/codex/verdict/SKILL.md +63 -0
- package/bin/skills/cursor/capture/SKILL.md +61 -0
- package/bin/skills/cursor/curate/SKILL.md +64 -0
- package/bin/skills/cursor/decide/SKILL.md +62 -0
- package/bin/skills/cursor/design/SKILL.md +61 -0
- package/bin/skills/cursor/finish/SKILL.md +82 -0
- package/bin/skills/cursor/handoff/SKILL.md +63 -0
- package/bin/skills/cursor/investigate/SKILL.md +84 -0
- package/bin/skills/cursor/project/SKILL.md +60 -0
- package/bin/skills/cursor/recall/SKILL.md +107 -0
- package/bin/skills/cursor/recallium-guidance/SKILL.md +141 -0
- package/bin/skills/cursor/recallium-guidance/reference.md +117 -0
- package/bin/skills/cursor/recallium-tools/SKILL.md +64 -0
- package/bin/skills/cursor/resume/SKILL.md +64 -0
- package/bin/skills/cursor/rule/SKILL.md +64 -0
- package/bin/skills/cursor/start-work/SKILL.md +78 -0
- package/bin/skills/cursor/team/SKILL.md +57 -0
- package/bin/skills/cursor/verdict/SKILL.md +63 -0
- package/commands/doctor.md +15 -0
- package/commands/login.md +17 -0
- package/commands/status.md +11 -0
- package/hooks/hooks.json +88 -0
- package/package.json +26 -29
- package/plugin-manifest.json +128 -0
- package/skills/capture/SKILL.md +61 -0
- package/skills/curate/SKILL.md +64 -0
- package/skills/decide/SKILL.md +62 -0
- package/skills/design/SKILL.md +61 -0
- package/skills/finish/SKILL.md +82 -0
- package/skills/handoff/SKILL.md +63 -0
- package/skills/investigate/SKILL.md +84 -0
- package/skills/project/SKILL.md +60 -0
- package/skills/recall/SKILL.md +107 -0
- package/skills/recallium-guidance/SKILL.md +141 -0
- package/skills/recallium-guidance/reference.md +117 -0
- package/skills/recallium-tools/SKILL.md +64 -0
- package/skills/resume/SKILL.md +64 -0
- package/skills/rule/SKILL.md +64 -0
- package/skills/start-work/SKILL.md +78 -0
- package/skills/team/SKILL.md +57 -0
- package/skills/verdict/SKILL.md +63 -0
- package/bin/recallium +0 -2
- package/src/index.js +0 -179
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: team
|
|
3
|
+
description: Answers questions about the people and the shared work on an enterprise Recallium deployment - who is on which team, what the team has been doing across the projects it owns, what is pending there, and which teammate wrote what. Use when the user asks "who's on my team", "what has the team been working on", "what's pending across our projects", "what did a teammate do last week", or before filtering a search by author; on a community deployment these tools are absent by design, not broken.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Team
|
|
7
|
+
|
|
8
|
+
## Quick start
|
|
9
|
+
|
|
10
|
+
```
|
|
11
|
+
list_team_members() # every team you belong to; team_name="core" narrows
|
|
12
|
+
team_recap(days_back=7) # all projects your team owns; project_name="my-api" narrows
|
|
13
|
+
team_recap(project_name="my-api", include_tasks=True)
|
|
14
|
+
search_memories(query="...", project_name="__all__", author_email="<exact email from list_team_members>")
|
|
15
|
+
```
|
|
16
|
+
|
|
17
|
+
## Why
|
|
18
|
+
|
|
19
|
+
Team tools are the only view that crosses projects and people. `team_recap`
|
|
20
|
+
aggregates recent memories and pending tasks over the projects the team OWNS
|
|
21
|
+
and carries no per-user working state; `session_recap` is the personal view.
|
|
22
|
+
The author filter on `search_memories` is an exact match, so the email must
|
|
23
|
+
come from `list_team_members`, never from recollection.
|
|
24
|
+
|
|
25
|
+
## Workflow
|
|
26
|
+
|
|
27
|
+
1. **Gate:** enterprise. If the tool is not in the tool list, say so and fall
|
|
28
|
+
back to `session_recap` / `search_memories`; do not report it as broken.
|
|
29
|
+
2. "Who is on the team" -> `list_team_members`. Takes no `project_name`;
|
|
30
|
+
`team_name` is a case-insensitive substring filter.
|
|
31
|
+
3. "What has the team done" -> `team_recap`, 1-30 days back; narrow with
|
|
32
|
+
`project_name` when one project is meant.
|
|
33
|
+
4. "What did X do" -> `list_team_members` for the exact email, then
|
|
34
|
+
`search_memories(author_email=..., project_name="__all__")`, because a
|
|
35
|
+
teammate's memories span projects.
|
|
36
|
+
5. Patterns rather than activity ("what keeps going wrong across the team")
|
|
37
|
+
-> `get_insights` (see `resume`).
|
|
38
|
+
6. **Gate:** report; store nothing. Someone's activity is not a new finding.
|
|
39
|
+
|
|
40
|
+
## Anti-patterns
|
|
41
|
+
|
|
42
|
+
WRONG: guessing a teammate's email for `author_email`.
|
|
43
|
+
RIGHT: `list_team_members` first; the filter is exact.
|
|
44
|
+
|
|
45
|
+
WRONG: `team_recap` for "where did I leave off".
|
|
46
|
+
RIGHT: `resume`; the team view has no working state.
|
|
47
|
+
|
|
48
|
+
## Checklist
|
|
49
|
+
|
|
50
|
+
- [ ] Enterprise confirmed, or the fallback used
|
|
51
|
+
- [ ] Right scope: every team project, or one
|
|
52
|
+
- [ ] Author email taken from the tool, not recalled
|
|
53
|
+
|
|
54
|
+
## See also
|
|
55
|
+
|
|
56
|
+
`resume` (the personal view), `recall` (search by author), `project` (links
|
|
57
|
+
between projects), `recallium-tools` (edition gates).
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: verdict
|
|
3
|
+
description: Records one agent's judgment of another agent's output - a design, decision, answer, or memory - as a Recallium verdict on that target, so a parent agent can trust it without re-verifying. Use when you are acting as reviewer, critic, or judge of a specific memory and have reached a position on it; a verdict always names its target and is never stored as progress or a note.
|
|
4
|
+
user-invocable: false
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# Verdict
|
|
8
|
+
|
|
9
|
+
## Quick start
|
|
10
|
+
|
|
11
|
+
```
|
|
12
|
+
expand_memories(memory_ids=["<target-uuid>"])
|
|
13
|
+
store_verdict(target_memory_id="<target-uuid>",
|
|
14
|
+
decision="accept", # accept | refute | revise
|
|
15
|
+
confidence=0.8, # your certainty IN THIS JUDGMENT
|
|
16
|
+
reasoning="<self-contained evidence>",
|
|
17
|
+
project_name="my-api", workstream_slug="auth-hardening")
|
|
18
|
+
```
|
|
19
|
+
|
|
20
|
+
## Why
|
|
21
|
+
|
|
22
|
+
A verdict is the convergence primitive: it is how a subtree of agents collapses
|
|
23
|
+
to one trusted result. A false `accept` propagates unverified up the tree and
|
|
24
|
+
poisons every ancestor that trusts it; a false `refute` costs one more round.
|
|
25
|
+
So when in doubt, prefer a low-confidence `refute`. `confidence` is your
|
|
26
|
+
certainty in the judgment, not the quality of the target: a confident refute is
|
|
27
|
+
confidence 0.9 with decision `refute`.
|
|
28
|
+
|
|
29
|
+
## Workflow
|
|
30
|
+
|
|
31
|
+
1. **Gate:** `target_memory_id` is required and must be a real memory you can
|
|
32
|
+
see. Expand it first; judge what it says, not what you remember of it.
|
|
33
|
+
2. Reach a position: `accept` (stands, build on it), `refute` (wrong or
|
|
34
|
+
unsound, do not build on it), `revise` (close; the changes are named in
|
|
35
|
+
your reasoning).
|
|
36
|
+
3. Put the full evidence in `reasoning`. A parent may act on it without
|
|
37
|
+
re-checking, so it must be self-contained and must not present unverified
|
|
38
|
+
claims as established.
|
|
39
|
+
4. One verdict per (you, target). A changed position is a new verdict that
|
|
40
|
+
supersedes your earlier reasoning; never edit the old one.
|
|
41
|
+
5. Anchor it to the same `workstream_slug` as the target.
|
|
42
|
+
|
|
43
|
+
## Anti-patterns
|
|
44
|
+
|
|
45
|
+
WRONG: a review stored as `progress` or `note`.
|
|
46
|
+
RIGHT: `store_verdict`; progress is a state timeline, not a judgment.
|
|
47
|
+
|
|
48
|
+
WRONG: a verdict with no target, "the approach is fine".
|
|
49
|
+
RIGHT: a verdict OF a specific memory UUID.
|
|
50
|
+
|
|
51
|
+
WRONG: `accept` at confidence 0.5 because nothing looked wrong.
|
|
52
|
+
RIGHT: if you are not sure, a low-confidence `refute` and the reason.
|
|
53
|
+
|
|
54
|
+
## Checklist
|
|
55
|
+
|
|
56
|
+
- [ ] Target UUID real and expanded
|
|
57
|
+
- [ ] Decision and confidence set independently
|
|
58
|
+
- [ ] Reasoning self-contained; no unverified claims as fact
|
|
59
|
+
- [ ] Anchored to the target's workstream
|
|
60
|
+
|
|
61
|
+
## See also
|
|
62
|
+
|
|
63
|
+
`design` (what usually gets judged), `decide`, `capture`.
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: Diagnose a Recallium install — credentials, home directory, hook binary, MCP registration
|
|
3
|
+
disable-model-invocation: true
|
|
4
|
+
allowed-tools: Bash(node:*)
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
Run the doctor and report every failing check with its exact message, then the single most likely fix.
|
|
8
|
+
|
|
9
|
+
A non-zero exit is expected whenever a check fails — that is the result, not a
|
|
10
|
+
tool error. The full report is on stdout either way: summarise it, and never
|
|
11
|
+
report the command as broken or retry it.
|
|
12
|
+
|
|
13
|
+
```bash
|
|
14
|
+
node "${CLAUDE_PLUGIN_ROOT}/scripts/recallium-hooks.cjs" doctor
|
|
15
|
+
```
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: Sign in to Recallium and enrol this machine's session sensor (browser sign-in, or a device code when no browser is available)
|
|
3
|
+
disable-model-invocation: true
|
|
4
|
+
allowed-tools: Bash(node:*)
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
Run the Recallium login flow with the plugin's bundled binary and relay its output to the user verbatim. If it prints a URL and a device code, show both and wait for the user to confirm they have finished in the browser before checking status.
|
|
8
|
+
|
|
9
|
+
```bash
|
|
10
|
+
node "${CLAUDE_PLUGIN_ROOT}/scripts/recallium-hooks.cjs" login
|
|
11
|
+
```
|
|
12
|
+
|
|
13
|
+
When it exits, run the status check and summarise in one line whether the MCP server is reachable and whether the sensor is enrolled:
|
|
14
|
+
|
|
15
|
+
```bash
|
|
16
|
+
node "${CLAUDE_PLUGIN_ROOT}/scripts/recallium-hooks.cjs" status
|
|
17
|
+
```
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: Show Recallium status for this machine — MCP reachability, sensor enrolment, hook health
|
|
3
|
+
disable-model-invocation: true
|
|
4
|
+
allowed-tools: Bash(node:*)
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
Run the status check and present the result as a short table. Do not paraphrase error text; quote it.
|
|
8
|
+
|
|
9
|
+
```bash
|
|
10
|
+
node "${CLAUDE_PLUGIN_ROOT}/scripts/recallium-hooks.cjs" status
|
|
11
|
+
```
|
package/hooks/hooks.json
ADDED
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
{
|
|
2
|
+
"description": "Recallium session sensor — counts, paths and ids only; no prompt or file content leaves the machine. Injects working state at SessionStart and a recall nudge at UserPromptSubmit.",
|
|
3
|
+
"hooks": {
|
|
4
|
+
"SessionStart": [
|
|
5
|
+
{
|
|
6
|
+
"matcher": "startup|resume|compact|fork|clear",
|
|
7
|
+
"hooks": [
|
|
8
|
+
{ "type": "command", "command": "node \"${CLAUDE_PLUGIN_ROOT}/bin/recallium-hooks.cjs\" --event session_start", "timeout": 10 }
|
|
9
|
+
]
|
|
10
|
+
}
|
|
11
|
+
],
|
|
12
|
+
"PreToolUse": [
|
|
13
|
+
{
|
|
14
|
+
"matcher": "Write|Edit|MultiEdit",
|
|
15
|
+
"hooks": [
|
|
16
|
+
{ "type": "command", "command": "node \"${CLAUDE_PLUGIN_ROOT}/bin/recallium-hooks.cjs\" --event pre_tool_use_edit", "timeout": 10 }
|
|
17
|
+
]
|
|
18
|
+
},
|
|
19
|
+
{
|
|
20
|
+
"matcher": "mcp__recallium[a-z0-9-]*__store_memory",
|
|
21
|
+
"hooks": [
|
|
22
|
+
{ "type": "command", "command": "node \"${CLAUDE_PLUGIN_ROOT}/bin/recallium-hooks.cjs\" --event pre_tool_use_store", "timeout": 10 }
|
|
23
|
+
]
|
|
24
|
+
}
|
|
25
|
+
],
|
|
26
|
+
"PostToolUse": [
|
|
27
|
+
{
|
|
28
|
+
"matcher": "Write|Edit|MultiEdit",
|
|
29
|
+
"hooks": [
|
|
30
|
+
{ "type": "command", "command": "node \"${CLAUDE_PLUGIN_ROOT}/bin/recallium-hooks.cjs\" --event post_tool_use", "timeout": 10 }
|
|
31
|
+
]
|
|
32
|
+
},
|
|
33
|
+
{
|
|
34
|
+
"matcher": "mcp__recallium[a-z0-9-]*__store_memory|mcp__recallium[a-z0-9-]*__create_workstream|mcp__recallium[a-z0-9-]*__create_task|mcp__recallium[a-z0-9-]*__update_task|mcp__recallium[a-z0-9-]*__search_memories|mcp__recallium[a-z0-9-]*__set_working_state|mcp__recallium[a-z0-9-]*__start_thinking|mcp__recallium[a-z0-9-]*__add_thought",
|
|
35
|
+
"hooks": [
|
|
36
|
+
{ "type": "command", "command": "node \"${CLAUDE_PLUGIN_ROOT}/bin/recallium-hooks.cjs\" --event post_tool_use_recallium", "timeout": 10 }
|
|
37
|
+
]
|
|
38
|
+
},
|
|
39
|
+
{
|
|
40
|
+
"matcher": "Bash",
|
|
41
|
+
"hooks": [
|
|
42
|
+
{ "type": "command", "command": "node \"${CLAUDE_PLUGIN_ROOT}/bin/recallium-hooks.cjs\" --event post_tool_use_command", "timeout": 10 }
|
|
43
|
+
]
|
|
44
|
+
},
|
|
45
|
+
{
|
|
46
|
+
"matcher": "Read",
|
|
47
|
+
"hooks": [
|
|
48
|
+
{ "type": "command", "command": "node \"${CLAUDE_PLUGIN_ROOT}/bin/recallium-hooks.cjs\" --event post_tool_use_read", "timeout": 10 }
|
|
49
|
+
]
|
|
50
|
+
}
|
|
51
|
+
],
|
|
52
|
+
"UserPromptSubmit": [
|
|
53
|
+
{
|
|
54
|
+
"hooks": [
|
|
55
|
+
{ "type": "command", "command": "node \"${CLAUDE_PLUGIN_ROOT}/bin/recallium-hooks.cjs\" --event user_prompt_submit", "timeout": 10 }
|
|
56
|
+
]
|
|
57
|
+
}
|
|
58
|
+
],
|
|
59
|
+
"Stop": [
|
|
60
|
+
{
|
|
61
|
+
"hooks": [
|
|
62
|
+
{ "type": "command", "command": "node \"${CLAUDE_PLUGIN_ROOT}/bin/recallium-hooks.cjs\" --event stop", "timeout": 10 }
|
|
63
|
+
]
|
|
64
|
+
}
|
|
65
|
+
],
|
|
66
|
+
"SubagentStop": [
|
|
67
|
+
{
|
|
68
|
+
"hooks": [
|
|
69
|
+
{ "type": "command", "command": "node \"${CLAUDE_PLUGIN_ROOT}/bin/recallium-hooks.cjs\" --event subagent_stop", "timeout": 10 }
|
|
70
|
+
]
|
|
71
|
+
}
|
|
72
|
+
],
|
|
73
|
+
"PreCompact": [
|
|
74
|
+
{
|
|
75
|
+
"hooks": [
|
|
76
|
+
{ "type": "command", "command": "node \"${CLAUDE_PLUGIN_ROOT}/bin/recallium-hooks.cjs\" --event pre_compact", "timeout": 10 }
|
|
77
|
+
]
|
|
78
|
+
}
|
|
79
|
+
],
|
|
80
|
+
"SessionEnd": [
|
|
81
|
+
{
|
|
82
|
+
"hooks": [
|
|
83
|
+
{ "type": "command", "command": "node \"${CLAUDE_PLUGIN_ROOT}/bin/recallium-hooks.cjs\" --event session_end", "timeout": 10 }
|
|
84
|
+
]
|
|
85
|
+
}
|
|
86
|
+
]
|
|
87
|
+
}
|
|
88
|
+
}
|
package/package.json
CHANGED
|
@@ -1,43 +1,40 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "recallium",
|
|
3
|
-
"version": "
|
|
4
|
-
"description": "
|
|
5
|
-
"
|
|
6
|
-
"
|
|
3
|
+
"version": "2.0.8",
|
|
4
|
+
"description": "Recallium client for coding agents: wires Claude Code, Codex, Cursor and other agents to your team's Recallium memory with hooks, skills and the MCP connector, and keeps your Recallium server in sync. Zero dependencies, never blocks the agent.",
|
|
5
|
+
"license": "SEE LICENSE IN LICENSE",
|
|
6
|
+
"homepage": "https://recallium.ai",
|
|
7
|
+
"keywords": [
|
|
8
|
+
"recallium",
|
|
9
|
+
"memory",
|
|
10
|
+
"team-memory",
|
|
11
|
+
"mcp",
|
|
12
|
+
"coding-agent",
|
|
13
|
+
"claude-code",
|
|
14
|
+
"codex",
|
|
15
|
+
"cursor",
|
|
16
|
+
"copilot",
|
|
17
|
+
"hooks"
|
|
18
|
+
],
|
|
7
19
|
"type": "module",
|
|
8
20
|
"bin": {
|
|
9
|
-
"recallium": "./bin/recallium"
|
|
21
|
+
"recallium": "./bin/recallium-hooks.cjs"
|
|
10
22
|
},
|
|
11
|
-
"main": "src/index.js",
|
|
12
23
|
"files": [
|
|
13
24
|
"bin/",
|
|
14
|
-
"
|
|
25
|
+
".claude-plugin/",
|
|
26
|
+
"hooks/",
|
|
27
|
+
"commands/",
|
|
28
|
+
"skills/",
|
|
29
|
+
"plugin-manifest.json",
|
|
30
|
+
"LICENSE",
|
|
15
31
|
"README.md"
|
|
16
32
|
],
|
|
17
|
-
"scripts": {
|
|
18
|
-
"test": "node src/index.js"
|
|
19
|
-
},
|
|
20
|
-
"dependencies": {
|
|
21
|
-
"@modelcontextprotocol/sdk": "^1.13.0"
|
|
22
|
-
},
|
|
23
33
|
"engines": {
|
|
24
|
-
"node": ">=
|
|
34
|
+
"node": ">=22"
|
|
25
35
|
},
|
|
26
|
-
"
|
|
27
|
-
"
|
|
28
|
-
"cursor",
|
|
29
|
-
"ai",
|
|
30
|
-
"memory",
|
|
31
|
-
"recallium",
|
|
32
|
-
"model-context-protocol"
|
|
33
|
-
],
|
|
34
|
-
"repository": {
|
|
35
|
-
"type": "git",
|
|
36
|
-
"url": "git+https://github.com/recallium-ai/recallium.git"
|
|
37
|
-
},
|
|
38
|
-
"homepage": "https://recallium.ai",
|
|
39
|
-
"bugs": {
|
|
40
|
-
"url": "https://github.com/recallium-ai/recallium/issues"
|
|
36
|
+
"optionalDependencies": {
|
|
37
|
+
"@napi-rs/keyring": "2.0.0"
|
|
41
38
|
},
|
|
42
39
|
"publishConfig": {
|
|
43
40
|
"access": "public"
|
|
@@ -0,0 +1,128 @@
|
|
|
1
|
+
{
|
|
2
|
+
"v": 1,
|
|
3
|
+
"tree": "recallium-claude-plugin",
|
|
4
|
+
"version": "2.0.8",
|
|
5
|
+
"built_at": "2026-09-28T21:04:44.328Z",
|
|
6
|
+
"files": [
|
|
7
|
+
{
|
|
8
|
+
"path": ".claude-plugin/plugin.json",
|
|
9
|
+
"sha256": "c20164fc3e566f93b9f85cc48b7451baca294d0d9cfc9e998bd5f41fda46500f",
|
|
10
|
+
"bytes": 539
|
|
11
|
+
},
|
|
12
|
+
{
|
|
13
|
+
"path": "bin/manifest.json",
|
|
14
|
+
"sha256": "5a24f2d8598b44ba4ad53afa64a5c5d91864e9adeba8aff92b401091c0e993f1",
|
|
15
|
+
"bytes": 228
|
|
16
|
+
},
|
|
17
|
+
{
|
|
18
|
+
"path": "bin/recallium-hooks.cjs",
|
|
19
|
+
"sha256": "5c97cfa65d61bf194c6f34f4a0abadde8d9b4146ff1345268aaa9c017495a78b",
|
|
20
|
+
"bytes": 1910828
|
|
21
|
+
},
|
|
22
|
+
{
|
|
23
|
+
"path": "commands/doctor.md",
|
|
24
|
+
"sha256": "17cf9a1f9da3742c9eac1c21d87e82e77f8a3e12710c0c8a507d3a8a6914d86f",
|
|
25
|
+
"bytes": 554
|
|
26
|
+
},
|
|
27
|
+
{
|
|
28
|
+
"path": "commands/login.md",
|
|
29
|
+
"sha256": "fcef4630c1be7e424b5ae0b1a9147a532e1e5eb88ed4a633827ee9ad79a937bc",
|
|
30
|
+
"bytes": 739
|
|
31
|
+
},
|
|
32
|
+
{
|
|
33
|
+
"path": "commands/status.md",
|
|
34
|
+
"sha256": "4656dcb41345d549b4210d78786f6a32b2bd49f7e1d50f98462fb902ead32b92",
|
|
35
|
+
"bytes": 351
|
|
36
|
+
},
|
|
37
|
+
{
|
|
38
|
+
"path": "hooks/hooks.json",
|
|
39
|
+
"sha256": "94724c7f9fcab3e93acaf0c6b980824594970e4c1ea33617656d58b3f837a069",
|
|
40
|
+
"bytes": 3269
|
|
41
|
+
},
|
|
42
|
+
{
|
|
43
|
+
"path": "skills/capture/SKILL.md",
|
|
44
|
+
"sha256": "6b9b5bc22b901454d860b7a83c962e043948f36c687903548e806ad88b7a8430",
|
|
45
|
+
"bytes": 3068
|
|
46
|
+
},
|
|
47
|
+
{
|
|
48
|
+
"path": "skills/curate/SKILL.md",
|
|
49
|
+
"sha256": "768aad551c30dd359187e7fc02696ebb7d667d5448ee213a29d0f46c80de88b8",
|
|
50
|
+
"bytes": 3129
|
|
51
|
+
},
|
|
52
|
+
{
|
|
53
|
+
"path": "skills/decide/SKILL.md",
|
|
54
|
+
"sha256": "a885477c10cea231919e919f6e0fde93a13ca4cb5f4bd9459ead76dc30b86fa9",
|
|
55
|
+
"bytes": 3076
|
|
56
|
+
},
|
|
57
|
+
{
|
|
58
|
+
"path": "skills/design/SKILL.md",
|
|
59
|
+
"sha256": "9292b87af9305bdf68722aa9348646f4eaeaba4e19000df81222bd13661b9d3e",
|
|
60
|
+
"bytes": 3169
|
|
61
|
+
},
|
|
62
|
+
{
|
|
63
|
+
"path": "skills/finish/SKILL.md",
|
|
64
|
+
"sha256": "a383dd5853868dbcfad1fb51cc52ce162f8a723f204b5af2e3261c75f660ca70",
|
|
65
|
+
"bytes": 4564
|
|
66
|
+
},
|
|
67
|
+
{
|
|
68
|
+
"path": "skills/handoff/SKILL.md",
|
|
69
|
+
"sha256": "c756de71bad0dd6249afc2f34e5212d108f8d236e2e6b2aa412046d466448d12",
|
|
70
|
+
"bytes": 3078
|
|
71
|
+
},
|
|
72
|
+
{
|
|
73
|
+
"path": "skills/investigate/SKILL.md",
|
|
74
|
+
"sha256": "a01f9e8a7200df3dc91993d9efac10238327817a4e888dcb8ff242a107d77842",
|
|
75
|
+
"bytes": 4872
|
|
76
|
+
},
|
|
77
|
+
{
|
|
78
|
+
"path": "skills/project/SKILL.md",
|
|
79
|
+
"sha256": "40ad791f3966b37280b07bc393ac13bf0250142e0f6209e310a99bb874c397e5",
|
|
80
|
+
"bytes": 2962
|
|
81
|
+
},
|
|
82
|
+
{
|
|
83
|
+
"path": "skills/recall/SKILL.md",
|
|
84
|
+
"sha256": "edb4635630e1882d90bb706e908ea673dabe715b2219e447a62f25887ae8e609",
|
|
85
|
+
"bytes": 5278
|
|
86
|
+
},
|
|
87
|
+
{
|
|
88
|
+
"path": "skills/recallium-guidance/SKILL.md",
|
|
89
|
+
"sha256": "5fc11247ace5f4e8e9e545abbe2c7e854f2560ae7ffad6dafbe9813130c828d3",
|
|
90
|
+
"bytes": 17720
|
|
91
|
+
},
|
|
92
|
+
{
|
|
93
|
+
"path": "skills/recallium-guidance/reference.md",
|
|
94
|
+
"sha256": "69823d5d42244fddf36290ffc836f2a0d2d0f3e6b2c525831e016156bca7d6f9",
|
|
95
|
+
"bytes": 6109
|
|
96
|
+
},
|
|
97
|
+
{
|
|
98
|
+
"path": "skills/recallium-tools/SKILL.md",
|
|
99
|
+
"sha256": "f651cda91b645b29e320ec1849701be99d794f8a15631b263bc36b3b31ae7670",
|
|
100
|
+
"bytes": 2940
|
|
101
|
+
},
|
|
102
|
+
{
|
|
103
|
+
"path": "skills/resume/SKILL.md",
|
|
104
|
+
"sha256": "78e6b63f0fbaa07d37c19f1198f0c615e043257bf652279cdcf1d121f20a3c93",
|
|
105
|
+
"bytes": 3342
|
|
106
|
+
},
|
|
107
|
+
{
|
|
108
|
+
"path": "skills/rule/SKILL.md",
|
|
109
|
+
"sha256": "8c706e84f2fd0edaf07d66a80510daa5135f4064100d8022cdbf1a52c157554c",
|
|
110
|
+
"bytes": 2644
|
|
111
|
+
},
|
|
112
|
+
{
|
|
113
|
+
"path": "skills/start-work/SKILL.md",
|
|
114
|
+
"sha256": "6ff2952c9bc835e175c27b57fe07edd8dd62b6f5e95487454356b9abd7f28b56",
|
|
115
|
+
"bytes": 4523
|
|
116
|
+
},
|
|
117
|
+
{
|
|
118
|
+
"path": "skills/team/SKILL.md",
|
|
119
|
+
"sha256": "afde621571af67f437d470b2c65c8ecfadc8025fa697f13ade0840c53220d055",
|
|
120
|
+
"bytes": 2636
|
|
121
|
+
},
|
|
122
|
+
{
|
|
123
|
+
"path": "skills/verdict/SKILL.md",
|
|
124
|
+
"sha256": "712dc4a7c5a495e0527b7bfa30ae8bd6c08410cee5cd7f2f007a517f15c9ed14",
|
|
125
|
+
"bytes": 2624
|
|
126
|
+
}
|
|
127
|
+
]
|
|
128
|
+
}
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: capture
|
|
3
|
+
description: Stores one durable why in Recallium - a learning from research or from a user correction, a constraint you hit, an experiment's numbers, a reusable snippet or runbook - behind the value gate, with its files and edges. Use when you found something out that a teammate could not reconstruct from the code and git log alone, or the user corrected you on how the system works; and use it to decide NOT to store when nothing new is being added - zero writes in a turn is valid.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Capture
|
|
7
|
+
|
|
8
|
+
## Quick start
|
|
9
|
+
|
|
10
|
+
```
|
|
11
|
+
store_memory(content="## Learned: <title>\n**Claim:** ...\n**Evidence:** ...\n**Consequence:** what to do differently",
|
|
12
|
+
project_name="my-api", workstream_slug="auth-hardening",
|
|
13
|
+
memory_type="learning", related_files=["src/auth/token-manager.ts"],
|
|
14
|
+
relationships=[{"target": "<design-uuid it bears on>", "type": "related"}])
|
|
15
|
+
```
|
|
16
|
+
|
|
17
|
+
## Why
|
|
18
|
+
|
|
19
|
+
Two questions get confused, so separate them. **Cadence** asks when a real
|
|
20
|
+
finding is written: one memory per finding as it lands, never batched. **The
|
|
21
|
+
value gate** asks whether there is a finding at all: what NEW durable
|
|
22
|
+
information does this add beyond the workstream already loaded? If none, skip.
|
|
23
|
+
A second copy of the same state competes with the first in every future search,
|
|
24
|
+
so storing it twice makes the original harder to find.
|
|
25
|
+
|
|
26
|
+
## Workflow
|
|
27
|
+
|
|
28
|
+
1. Gate it. Restated state, anything reproducible from a command, a paraphrase
|
|
29
|
+
of the diff, what you are about to do next: not a memory. The last one is
|
|
30
|
+
`set_working_state`.
|
|
31
|
+
2. Type, first match wins: chose X over Y -> `decision` (`decide`) | imposed
|
|
32
|
+
bound -> `constraint` | ran a method, have numbers -> `experiment` | defect
|
|
33
|
+
-> `bugfix` (`investigate`) | architecture -> `design` (`design`) | reusable
|
|
34
|
+
code or command -> `code-snippet` | how to operate or roll back -> `runbook`
|
|
35
|
+
| durable claim about behaviour, incl. a user correction -> `learning` |
|
|
36
|
+
else -> `note`. `task`, `rule`, `verdict` have their own tools.
|
|
37
|
+
3. **Gate:** `workstream_slug` is mandatory; none yet -> `start-work`.
|
|
38
|
+
4. Search the workstream for what this builds on, replaces, bounds or
|
|
39
|
+
contradicts; attach those UUIDs. `supersedes` means the target is now WRONG.
|
|
40
|
+
`expand_memories` a hit before you cite it: an edge to a memory you have
|
|
41
|
+
not read is a guess.
|
|
42
|
+
5. `related_files`: every file read or written. In a chat with no repository,
|
|
43
|
+
leave it empty; never invent paths.
|
|
44
|
+
6. Read the store response: "unanchored" -> repair now with `modify_memory`;
|
|
45
|
+
a suggested file or edge -> take it.
|
|
46
|
+
7. `importance_score` 0.9 / 0.7 / 0.5 / 0.3, auto-scored if omitted.
|
|
47
|
+
|
|
48
|
+
## Anti-patterns
|
|
49
|
+
|
|
50
|
+
WRONG: a code-related memory with empty `related_files`.
|
|
51
|
+
RIGHT: every file touched, so `search_memories(file_path=...)` finds it later.
|
|
52
|
+
|
|
53
|
+
## Checklist
|
|
54
|
+
|
|
55
|
+
- [ ] Value gate applied; could this have been zero writes?
|
|
56
|
+
- [ ] Canonical type, slug, files, at least one edge
|
|
57
|
+
- [ ] Store response read; anchor and suggestions acted on
|
|
58
|
+
|
|
59
|
+
## See also
|
|
60
|
+
|
|
61
|
+
`investigate`, `finish` (the checkpoint half), `decide`, `design`, `curate`, `rule`.
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: curate
|
|
3
|
+
description: Corrects, retires, or closes what Recallium already holds - a wrong memory superseded, a duplicate or mistaken memory inactivated, a stale task inactivated, a workstream marked shipped or abandoned when the effort ends. Use when the user says "that's wrong", "forget that", "we dropped that approach", when a PR merges or a branch is abandoned, or when a search returns two memories saying the same thing; never delete, and store nothing new unless the correction itself is a finding.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Curate
|
|
7
|
+
|
|
8
|
+
## Quick start
|
|
9
|
+
|
|
10
|
+
```
|
|
11
|
+
expand_memories(memory_ids=["<uuid>"]) # read before touching
|
|
12
|
+
modify_memory(memory_id="<uuid>", action="update", content="...", related_files=[...])
|
|
13
|
+
modify_memory(memory_id="<uuid>", action="inactivate", reason="duplicate of <uuid>")
|
|
14
|
+
modify_memory(memory_id="<workstream-uuid>", action="update", status="shipped") # or "abandoned"
|
|
15
|
+
```
|
|
16
|
+
|
|
17
|
+
A content edit gives the memory a new id; use the id the response names.
|
|
18
|
+
|
|
19
|
+
## Why
|
|
20
|
+
|
|
21
|
+
The value gate has two halves. Storing only new durable information is one; keeping
|
|
22
|
+
what is stored true is the other. A wrong memory that stays visible is worse than
|
|
23
|
+
none: the next agent acts on it. A duplicate competes with the original in every
|
|
24
|
+
future search, so cleanup restores findability the gate was protecting. Nothing is
|
|
25
|
+
ever deleted: `inactivate` keeps the row for undo, `supersedes` keeps the chain,
|
|
26
|
+
and an abandoned workstream is information about a dead end.
|
|
27
|
+
|
|
28
|
+
## Workflow
|
|
29
|
+
|
|
30
|
+
1. `expand_memories` the target first; judge what it says.
|
|
31
|
+
2. Pick the operation by what is wrong:
|
|
32
|
+
- factually wrong, but the shape is right -> `modify_memory(action="update")`
|
|
33
|
+
with new `content`; additive for `tags`, `related_files`, `relationships`.
|
|
34
|
+
- superseded by a better decision, design, learning or runbook -> a NEW
|
|
35
|
+
memory with a `supersedes` edge; the old one drops out of search and
|
|
36
|
+
stays in the chain. **Gate:** never supersede `progress`.
|
|
37
|
+
- duplicate or mistaken -> `modify_memory(action="inactivate", reason=...)`.
|
|
38
|
+
`reason` is required. `reactivate` undoes it.
|
|
39
|
+
- unanchored -> `modify_memory(..., workstream_slug=...)`.
|
|
40
|
+
3. Effort over: `modify_memory(memory_id="<workstream-uuid>", action="update",
|
|
41
|
+
status="shipped")` on merge, `"abandoned"` on a dead end. Close its tasks:
|
|
42
|
+
`update_task(status="completed")` for done, `update_task(status="inactive",
|
|
43
|
+
reason=...)` for stale or duplicate; `task_id` takes a list.
|
|
44
|
+
4. A user correction is a `rule` (preference) or a `learning` (fact); either
|
|
45
|
+
may also mean a wrong memory to fix here.
|
|
46
|
+
|
|
47
|
+
## Anti-patterns
|
|
48
|
+
|
|
49
|
+
WRONG: editing a decision in place when the choice changed.
|
|
50
|
+
RIGHT: a new decision with `supersedes`; the chain is the history.
|
|
51
|
+
|
|
52
|
+
WRONG: leaving a shipped effort `active`.
|
|
53
|
+
RIGHT: status `shipped` at merge; the roster stays honest.
|
|
54
|
+
|
|
55
|
+
## Checklist
|
|
56
|
+
|
|
57
|
+
- [ ] Target expanded before any change
|
|
58
|
+
- [ ] Right operation: update, supersede, inactivate, re-anchor
|
|
59
|
+
- [ ] Nothing deleted; every inactivation has a reason
|
|
60
|
+
- [ ] Workstream status and its tasks closed when the effort ended
|
|
61
|
+
|
|
62
|
+
## See also
|
|
63
|
+
|
|
64
|
+
`capture`, `decide`, `finish`, `rule`, `recall`.
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: decide
|
|
3
|
+
description: "Compare implementation alternatives and recommend a choice with its rationale. Use when the user asks which option to choose, including a small or previously settled choice; the workflow determines whether new reasoning or storage is needed. Use design to form an architecture or approach, and recall to retrieve an earlier decision without reconsidering it."
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Decide
|
|
7
|
+
|
|
8
|
+
## Quick start
|
|
9
|
+
|
|
10
|
+
```
|
|
11
|
+
r = start_thinking(goal="Choose the auth strategy for the mobile app",
|
|
12
|
+
project_name="my-api", workstream_slug="auth-hardening")
|
|
13
|
+
add_thought(sequence_id=r.sequence_id, thought="...", thought_type="hypothesis")
|
|
14
|
+
add_thought(sequence_id=r.sequence_id, thought="...", thought_type="reasoning")
|
|
15
|
+
add_thought(sequence_id=r.sequence_id, thought="...", thought_type="conclusion")
|
|
16
|
+
```
|
|
17
|
+
|
|
18
|
+
## Why
|
|
19
|
+
|
|
20
|
+
A `conclusion` thought auto-stores a `decision` memory, born anchored to the
|
|
21
|
+
workstream passed at `start_thinking`, so the rationale is captured with the
|
|
22
|
+
choice instead of reconstructed from the diff later. The sequence is the audit
|
|
23
|
+
trail: the rejected options and why they lost are the reusable half. A sequence
|
|
24
|
+
left open stores nothing; the Stop hook will say so.
|
|
25
|
+
|
|
26
|
+
## Workflow
|
|
27
|
+
|
|
28
|
+
1. **Gate:** is there a real alternative? No trade-off -> not a decision; use
|
|
29
|
+
`capture` with the right type, or store nothing.
|
|
30
|
+
2. Retrieve prior decisions and constraints. If an applicable decision already settles the request, explain it and stop without starting a sequence or storing a duplicate. A constraint may have removed an option.
|
|
31
|
+
For a routine choice with no durable project consequence, answer with the relevant trade-off and store nothing. Use a thinking sequence for a new consequential choice.
|
|
32
|
+
3. `start_thinking(goal=..., project_name=..., workstream_slug=...)`.
|
|
33
|
+
**Gate:** pass `workstream_slug` here; the auto-stored decision inherits
|
|
34
|
+
it. The server warns if you omit it; pass it now rather than backfilling.
|
|
35
|
+
4. `add_thought` per step: `observation`, `hypothesis` (the options),
|
|
36
|
+
`question`, `reasoning` (what rules options out), `analysis`, `branch`,
|
|
37
|
+
`conclusion` (closes and stores; nothing can be added afterwards).
|
|
38
|
+
5. The conclusion states Context / Options / Chosen and why / Consequences.
|
|
39
|
+
6. Take its UUID. Edge it to the constraint that bounded it; put it in the
|
|
40
|
+
`Recallium-Memory:` trailer of the commit that implements it (`finish`).
|
|
41
|
+
7. A later, better choice does not edit this one: a new `decision` with
|
|
42
|
+
`supersedes` pointing at it.
|
|
43
|
+
|
|
44
|
+
## Anti-patterns
|
|
45
|
+
|
|
46
|
+
WRONG: `start_thinking` without `workstream_slug`, then backfilling.
|
|
47
|
+
RIGHT: pass the slug at `start_thinking`; the conclusion is born anchored.
|
|
48
|
+
|
|
49
|
+
WRONG: recording only the option you picked.
|
|
50
|
+
RIGHT: the rejected options and why they lost.
|
|
51
|
+
|
|
52
|
+
## Checklist
|
|
53
|
+
|
|
54
|
+
- [ ] A real alternative existed
|
|
55
|
+
- [ ] Prior decisions and constraints searched
|
|
56
|
+
- [ ] `workstream_slug` passed at `start_thinking`
|
|
57
|
+
- [ ] Conclusion names options, choice, rationale, consequences
|
|
58
|
+
- [ ] UUID captured for edges and the commit trailer
|
|
59
|
+
|
|
60
|
+
## See also
|
|
61
|
+
|
|
62
|
+
`recall`, `design`, `capture`, `finish`, `verdict`.
|