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,117 @@
|
|
|
1
|
+
# Recallium reference
|
|
2
|
+
|
|
3
|
+
Shapes, not rules. `SKILL.md` beside this file is the rulebook and carries the call shape needed to obey each rule it states; this file carries the worked `store_memory` examples, the footguns a tool schema does not tell you, and a six-row index. Parameter names themselves come from the tools' own input schemas — they are not repeated here.
|
|
4
|
+
|
|
5
|
+
## Worked shapes
|
|
6
|
+
|
|
7
|
+
### A bugfix
|
|
8
|
+
|
|
9
|
+
```python
|
|
10
|
+
store_memory(
|
|
11
|
+
content="""
|
|
12
|
+
## Fixed: <short title>
|
|
13
|
+
**Problem:** <what was broken / why>
|
|
14
|
+
**Solution:** <what changed and why this approach>
|
|
15
|
+
**Files:** <key files + what changed in each>
|
|
16
|
+
**Testing:** <how verified>
|
|
17
|
+
""",
|
|
18
|
+
project_name="my-api",
|
|
19
|
+
workstream_slug="auth-hardening",
|
|
20
|
+
memory_type="bugfix",
|
|
21
|
+
related_files=["src/auth/token-manager.ts", "src/api/client.ts"],
|
|
22
|
+
tags=["authentication", "race-condition"],
|
|
23
|
+
relationships=[{"target": "<design-uuid the defect lived under>", "type": "related"}],
|
|
24
|
+
importance_score=0.8,
|
|
25
|
+
)
|
|
26
|
+
```
|
|
27
|
+
|
|
28
|
+
### A decision
|
|
29
|
+
|
|
30
|
+
```python
|
|
31
|
+
store_memory(
|
|
32
|
+
content="""
|
|
33
|
+
## Decided: recognition stays server-name-prefixed
|
|
34
|
+
**Context:** hook matcher must decide whether a tool call is recallium's store_memory.
|
|
35
|
+
**Options:** (a) match any mcp__*__store_memory; (b) keep mcp__recallium(-edition)?__ prefix; (c) thread a --server-name flag.
|
|
36
|
+
**Chosen:** (b). Installer owns the name; a generic match would capture other memory MCPs' stores.
|
|
37
|
+
**Consequences:** hand-renamed servers unsupported; (c) parked if custom names are ever needed.
|
|
38
|
+
""",
|
|
39
|
+
project_name="recallium-client",
|
|
40
|
+
workstream_slug="restructure-community",
|
|
41
|
+
memory_type="decision",
|
|
42
|
+
related_files=["src/cli/installer.ts", "src/adapter/canonical-events.ts"],
|
|
43
|
+
tags=["hooks", "server-naming"],
|
|
44
|
+
relationships=[
|
|
45
|
+
{"target": "<design uuid for the hook capture pipeline>", "type": "constrains"},
|
|
46
|
+
{"target": "<bugfix uuid for the 'nothing captured' defect>", "type": "related"},
|
|
47
|
+
],
|
|
48
|
+
importance_score=0.8,
|
|
49
|
+
)
|
|
50
|
+
```
|
|
51
|
+
|
|
52
|
+
### A commit checkpoint
|
|
53
|
+
|
|
54
|
+
```python
|
|
55
|
+
store_memory(
|
|
56
|
+
content="""
|
|
57
|
+
## Landed: fix(hooks) match edition-suffixed server names
|
|
58
|
+
**SHA:** e436e0a4c1b2d3e4f5a6b7c8d9e0f1a2b3c4d5e6
|
|
59
|
+
**Branch:** feature/restructure-community
|
|
60
|
+
**What it achieved:** settings.json matcher now fires for recallium-<edition> names; plain recallium still matches.
|
|
61
|
+
**Verified by:** vitest 1607/1607; regenerated matcher checked against recallium-saas-local; live capture in a fresh session.
|
|
62
|
+
**Next:** nothing on this branch; bin/ still parked.
|
|
63
|
+
""",
|
|
64
|
+
project_name="recallium-client",
|
|
65
|
+
workstream_slug="restructure-community",
|
|
66
|
+
memory_type="progress",
|
|
67
|
+
related_files=["src/cli/installer.ts", "src/adapter/canonical-events.ts", "test/installer.test.ts"],
|
|
68
|
+
tags=["hooks", "installer", "commit:e436e0a4"],
|
|
69
|
+
relationships=[
|
|
70
|
+
{"target": "01a06f00-4bdc-7158-b4ff-b43268b74e56", "type": "related"},
|
|
71
|
+
{"target": "01a06ee2-8c1d-7a90-b2e4-1f3a9c7d5e21", "type": "related"},
|
|
72
|
+
],
|
|
73
|
+
importance_score=0.6,
|
|
74
|
+
)
|
|
75
|
+
```
|
|
76
|
+
|
|
77
|
+
Net effect: `git log` → trailer → why. `search_memories(query="commit:e436e0a4", project_name="x")` → the checkpoint → what, how, files, and the why-edges. `get_workstream` → the whole journey.
|
|
78
|
+
|
|
79
|
+
## Footguns
|
|
80
|
+
|
|
81
|
+
Things the input schema will not warn you about:
|
|
82
|
+
|
|
83
|
+
- `update_task(task_id=…, status="completed")` closes a task; `task_id` takes one UUID or a list, so several close in one call. Closing goes through the status field, never a separate tool.
|
|
84
|
+
- `list_tasks` returns open tasks only; pass `include_completed=True` for history.
|
|
85
|
+
- `update_task(status="inactive", reason=…)` and `modify_memory(action="inactivate")` are soft deletes. Nothing in Recallium is ever deleted.
|
|
86
|
+
- `expand_memories` takes at most 10 memory ids per call.
|
|
87
|
+
- `relationships` supersedes the deprecated `related_memory_ids`; keep using `relationships`.
|
|
88
|
+
- `get_workstream` with an unknown slug returns fuzzy-matched candidates, not an empty result — read them before creating a second workstream.
|
|
89
|
+
- `search_memories`: `recent_only=True` is a fixed last-30-days window while `days_back=N` is the last N days, and `file_path` takes ILIKE wildcards (`"%installer.ts%"`, `"src/auth/%"`).
|
|
90
|
+
- `create_project` is idempotent and metadata-only; there is no delete, so `update_project(status="inactive")` retires a project and `status="active"` restores it.
|
|
91
|
+
- `list_team_members` takes NO `project_name`; `team_recap` takes an optional one.
|
|
92
|
+
- `get_insights(analysis_type=…)` accepts `comprehensive`, `patterns`, `quality`, `technical_debt`, `learning`, `productivity`, `progress`.
|
|
93
|
+
|
|
94
|
+
### Rules
|
|
95
|
+
|
|
96
|
+
The one signature worth writing out, because `scope` and `priority` are not reconstructable:
|
|
97
|
+
|
|
98
|
+
```python
|
|
99
|
+
store_rule(
|
|
100
|
+
body="Always use uv instead of pip", # the rule text is `body`, not `content`
|
|
101
|
+
scope="project", # project | user | team (SaaS); project | install (community); global -> install
|
|
102
|
+
project_name="my-project", # REQUIRED when scope="project"
|
|
103
|
+
priority="important", # critical | important | normal (a 0.0-1.0 float also works)
|
|
104
|
+
)
|
|
105
|
+
store_rule(rule_id="<id>", action="deactivate") # remove; get the id from get_rules
|
|
106
|
+
```
|
|
107
|
+
|
|
108
|
+
## Index
|
|
109
|
+
|
|
110
|
+
| Goal | Sequence |
|
|
111
|
+
|------|----------|
|
|
112
|
+
| Start a session | `recallium(project_name)` → `get_working_state` → `get_workstream` for the roster → `get_workstream(slug=…)` on the one you are resuming |
|
|
113
|
+
| Record a checkpoint | a `progress` memory; tag it `commit:<short-sha>` if a commit landed; `update_task(task_id=…, memory_ids=[…])` if it sits inside a task |
|
|
114
|
+
| Link a commit to its why | the `Recallium-Memory:` trailer on the commit, carrying the why-memory UUIDs |
|
|
115
|
+
| Link a why back to its commit | the progress memory: `commit:<short-sha>` tag, the commit's files, and `related` edges to the same UUIDs |
|
|
116
|
+
| Connect new work to old | search the workstream first, then `relationships=[{"target": "<uuid>", "type": "related" \| "constrains" \| "contradicts"}]` |
|
|
117
|
+
| Replace something now wrong | `relationships=[{"target": "<uuid>", "type": "supersedes"}]` on the memory that replaces it |
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: recallium-tools
|
|
3
|
+
description: Maps the Recallium MCP tool surface — every tool name, the handler that owns it, whether it reads or writes, and which ones are enterprise-only. Use when you need an exact tool name or its arguments, when a call fails as an unknown tool, when deciding whether a capability exists in this edition, or before reaching for a Recallium tool you have not used in this project.
|
|
4
|
+
user-invocable: false
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
<!-- GENERATED by scripts/gen-tool-skill.mjs from packages/core/src/recallium_core/mcp/registry.py
|
|
8
|
+
and its handlers/ package. Do not edit by hand — run `npm run gen:tools`
|
|
9
|
+
(`npm run check:tools` fails CI on drift). -->
|
|
10
|
+
|
|
11
|
+
# Recallium MCP tools
|
|
12
|
+
|
|
13
|
+
## Quick start
|
|
14
|
+
|
|
15
|
+
28 tools across 12 handlers. `R` reads · `W` writes · `E` enterprise-only.
|
|
16
|
+
Argument schemas come from the live tool descriptions, not from here.
|
|
17
|
+
|
|
18
|
+
- **Insights** — `get_insights` RE
|
|
19
|
+
- **Memory** — `store_memory` W · `create_workstream` W · `get_workstream` R · `search_memories` R · `expand_memories` R · `modify_memory` W
|
|
20
|
+
- **Project** — `create_project` W · `list_projects` R · `get_project` R · `update_project` W · `link_projects` W · `unlink_projects` W
|
|
21
|
+
- **Rules** — `get_rules` R · `store_rule` W
|
|
22
|
+
- **Session recap** — `session_recap` R
|
|
23
|
+
- **Task** — `create_task` W · `list_tasks` R · `get_task` R · `update_task` W
|
|
24
|
+
- **Team recap** — `team_recap` RE
|
|
25
|
+
- **Teams** — `list_team_members` RE
|
|
26
|
+
- **Thinking** — `start_thinking` W · `add_thought` W
|
|
27
|
+
- **Validation** — `recallium` R
|
|
28
|
+
- **Verdict** — `store_verdict` W
|
|
29
|
+
- **Working state** — `set_working_state` W · `get_working_state` R
|
|
30
|
+
|
|
31
|
+
## Why
|
|
32
|
+
|
|
33
|
+
The surface is discovered, not declared: `HandlerRegistry.discover_handlers()`
|
|
34
|
+
imports every `BaseHandler` subclass under `handlers/` and registers its
|
|
35
|
+
`@mcp_tool` methods, skipping any handler whose `EDITION_REQUIRED` does not
|
|
36
|
+
match the running edition. The list moves with the server, so it is generated
|
|
37
|
+
from it rather than hand-maintained.
|
|
38
|
+
|
|
39
|
+
## Workflow
|
|
40
|
+
|
|
41
|
+
1. Find the tool by group above, then call it — its live description carries the
|
|
42
|
+
argument schema, always newer than any copy.
|
|
43
|
+
2. **Gate:** `project_name` is required on nearly every tool.
|
|
44
|
+
3. An `E` tool on a community server is not missing, it is gated; do not retry.
|
|
45
|
+
4. **Gate:** `task`, `rule`, and `verdict` are not `store_memory` types —
|
|
46
|
+
they have their own tools above and soft-land as a `note` if you try.
|
|
47
|
+
|
|
48
|
+
## Anti-patterns
|
|
49
|
+
|
|
50
|
+
WRONG: guessing a tool name from a memory of the API.
|
|
51
|
+
RIGHT: read it off this list; the generator keeps it true to the server.
|
|
52
|
+
|
|
53
|
+
WRONG: editing this file when a tool is added.
|
|
54
|
+
RIGHT: `npm run gen:tools` — hand edits are reverted by the next drift check.
|
|
55
|
+
|
|
56
|
+
## Checklist
|
|
57
|
+
|
|
58
|
+
- [ ] Tool name taken from this list, not recalled
|
|
59
|
+
- [ ] `project_name` supplied
|
|
60
|
+
- [ ] Edition gate considered before treating a tool as broken
|
|
61
|
+
|
|
62
|
+
## See also
|
|
63
|
+
|
|
64
|
+
`recallium-guidance` (the rules), `recall`, `capture`, `start-work`.
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: resume
|
|
3
|
+
description: Rebuilds where the work stands from Recallium rather than from scrollback - working state, the workstream journey, open tasks, this session's recap, a timeline of recent sessions, or patterns across them. Use when the user asks "where did we leave off", "what did we do", "what's still open", "what have we been doing this week", "what keeps going wrong", when switching to another project, after days away, and after a compaction or /clear.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Resume
|
|
7
|
+
|
|
8
|
+
## Quick start
|
|
9
|
+
|
|
10
|
+
```
|
|
11
|
+
get_working_state(project_name="my-api") # the raw note from last time
|
|
12
|
+
get_workstream(project_name="my-api") # roster; "__all__" across projects
|
|
13
|
+
get_workstream(slug="auth-hardening", project_name="my-api")
|
|
14
|
+
list_tasks(project_name="my-api") # open only by default
|
|
15
|
+
session_recap(project_name="my-api") # this session, or days_back=N
|
|
16
|
+
search_memories(query=None, project_name="my-api", memory_type="progress", days_back=7)
|
|
17
|
+
```
|
|
18
|
+
|
|
19
|
+
## Why
|
|
20
|
+
|
|
21
|
+
Scrollback vanishes at compaction. What Recallium holds is what was actually
|
|
22
|
+
stored, so resuming from it is also a check: a recap thinner than the work means
|
|
23
|
+
memories were never written. Progress memories are a timeline, so reading them
|
|
24
|
+
in date order reconstructs how the work moved.
|
|
25
|
+
|
|
26
|
+
## Workflow
|
|
27
|
+
|
|
28
|
+
1. **Gate:** the `recallium` summon has returned this conversation; rules,
|
|
29
|
+
working state and open tasks arrive only with it. Switching project? Call it
|
|
30
|
+
again with the new `project_name`. No workspace and no project named?
|
|
31
|
+
Ask, else `"default"`.
|
|
32
|
+
If the resume buffer is a preview, tell the user what it holds, as a part of the note and not the whole state. End by saying, without character counts, that more context is available that gives the full picture, and offer to load it; when the user says "resume", call get_working_state first.
|
|
33
|
+
2. Read `get_working_state`: branch, slug, in flight, parked, next action.
|
|
34
|
+
3. Roster, then the slug you are continuing; constraints and decisions come
|
|
35
|
+
first and bound what you may do. `expand_memories` the ones that bound
|
|
36
|
+
this work and read them; a one-line title is not the decision.
|
|
37
|
+
**Gate:** slug loaded, and those read, before code.
|
|
38
|
+
4. Triage `list_tasks`; `get_task` shows one task's linked memories. Pick up,
|
|
39
|
+
or hand stale ones to `curate`.
|
|
40
|
+
5. Pick the window the question asks for: "this session" -> `session_recap`;
|
|
41
|
+
"this week" -> browse `progress` with `days_back` or `date_from`/`date_to`,
|
|
42
|
+
oldest first, `commit:<sha>` tags as the landed commits; "what keeps
|
|
43
|
+
recurring / what tech debt" -> `get_insights` (enterprise; an absent tool
|
|
44
|
+
is gated, not broken). Team-wide questions belong to `team`.
|
|
45
|
+
6. **Gate:** report; store nothing. Reconstructing history is not new.
|
|
46
|
+
|
|
47
|
+
## Anti-patterns
|
|
48
|
+
|
|
49
|
+
WRONG: summarising from the conversation.
|
|
50
|
+
RIGHT: `session_recap` first, then narrate what it returned.
|
|
51
|
+
|
|
52
|
+
WRONG: `git log` as the history.
|
|
53
|
+
RIGHT: the progress timeline has the why and the evidence; git confirms SHAs.
|
|
54
|
+
|
|
55
|
+
## Checklist
|
|
56
|
+
|
|
57
|
+
- [ ] Summon returned for the right project; working state read
|
|
58
|
+
- [ ] Slug loaded before code; open tasks triaged
|
|
59
|
+
- [ ] Right window and tool for the question
|
|
60
|
+
- [ ] Any `<fun-lines>...</fun-lines>` in a result opened the reply verbatim
|
|
61
|
+
|
|
62
|
+
## See also
|
|
63
|
+
|
|
64
|
+
`start-work`, `recall`, `team`, `curate`, `handoff` (the other end), `recallium-guidance`.
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: rule
|
|
3
|
+
description: Stores or retires a standing behavioural rule in Recallium's tiered rule store - never as a memory - and only when the user asks for one. Use when the user says "always do X from now on", "remember this rule", "add a rule that", "stop doing Y", or corrects you in a way they want kept across sessions; check get_rules first so an existing rule is never stored twice, and never author a rule on your own initiative.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Rule
|
|
7
|
+
|
|
8
|
+
## Quick start
|
|
9
|
+
|
|
10
|
+
```
|
|
11
|
+
get_rules(project_name="my-api") # above-project tiers + this project's
|
|
12
|
+
store_rule(body="Always use uv instead of pip", scope="project",
|
|
13
|
+
project_name="my-api", priority="important")
|
|
14
|
+
store_rule(rule_id="<id>", action="deactivate")
|
|
15
|
+
```
|
|
16
|
+
|
|
17
|
+
## Why
|
|
18
|
+
|
|
19
|
+
Rules load with every `recallium` summon and are enforced as rules, not
|
|
20
|
+
suggestions. A rule the agent invented is the agent legislating for the user.
|
|
21
|
+
A duplicate is two guardrails that drift apart. And `store_memory(memory_type=
|
|
22
|
+
"rule")` does not create a rule; it silently lands a `note`, so you will think
|
|
23
|
+
a rule exists and it will not.
|
|
24
|
+
|
|
25
|
+
## Workflow
|
|
26
|
+
|
|
27
|
+
1. **Gate:** the user asked, in words: "always", "never", "from now on",
|
|
28
|
+
"remember this rule". A one-off instruction for this task is not a rule.
|
|
29
|
+
2. `get_rules(project_name=...)`. The tiers above the project are always
|
|
30
|
+
returned unfiltered. If the rule is already there, say so; do not re-store.
|
|
31
|
+
Never re-store a rule the summon returned.
|
|
32
|
+
3. Scope: `project` when a project is named (requires `project_name`);
|
|
33
|
+
`user`/`team` on SaaS; `install` on community. Omit and it defaults to the
|
|
34
|
+
narrowest safe tier.
|
|
35
|
+
4. Priority: `critical` | `important` | `normal` (a 0.0-1.0 float also works).
|
|
36
|
+
The rule text is `body`.
|
|
37
|
+
5. Removing one: `store_rule(rule_id=..., action="deactivate")`. There is no
|
|
38
|
+
delete.
|
|
39
|
+
6. A correction the user wants kept but that is project-specific behaviour
|
|
40
|
+
rather than a guardrail is often a `learning` (see `capture`) plus a rule,
|
|
41
|
+
not a rule alone.
|
|
42
|
+
|
|
43
|
+
## Anti-patterns
|
|
44
|
+
|
|
45
|
+
WRONG: turning "use the other endpoint this time" into a rule.
|
|
46
|
+
RIGHT: follow it; rules are for "from now on".
|
|
47
|
+
|
|
48
|
+
WRONG: `store_memory(memory_type="rule", ...)`.
|
|
49
|
+
RIGHT: `store_rule(body=...)`.
|
|
50
|
+
|
|
51
|
+
WRONG: storing the fun-line rule again because it appeared in a result.
|
|
52
|
+
RIGHT: the summon says which rules already exist; those are never re-stored.
|
|
53
|
+
|
|
54
|
+
## Checklist
|
|
55
|
+
|
|
56
|
+
- [ ] User asked explicitly
|
|
57
|
+
- [ ] `get_rules` checked; nothing duplicated
|
|
58
|
+
- [ ] Scope and priority chosen; `body` is the text
|
|
59
|
+
- [ ] Nothing the summon returned was re-stored
|
|
60
|
+
|
|
61
|
+
## See also
|
|
62
|
+
|
|
63
|
+
`capture` (a learning, not a rule), `resume` (rules arrive with the summon),
|
|
64
|
+
`recallium-guidance`.
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: start-work
|
|
3
|
+
description: "Set up a new named feature or effort before implementation: retrieve settled context, establish its workstream and continuation plan, offer tasks when the work has two or more units, and write working state. Use for an explicit kickoff or when a body of work needs that setup. A bounded mechanical edit alone does not start a new effort. Create persistent tasks only when the user asks or says yes to the offer."
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Start work
|
|
7
|
+
|
|
8
|
+
## Quick start
|
|
9
|
+
|
|
10
|
+
```
|
|
11
|
+
search_memories(query="<what this work is about>", project_name="my-api",
|
|
12
|
+
file_path="src/auth/%")
|
|
13
|
+
get_workstream(project_name="my-api") # roster
|
|
14
|
+
create_workstream(project_name="my-api", title="Auth hardening",
|
|
15
|
+
status="active", attach=["<orphan-memory-uuid>"])
|
|
16
|
+
# two or more units? ask once: "This is 3 units — rotate tokens, revoke on logout,
|
|
17
|
+
# audit log. Track them as tasks?" → on yes, one task per unit:
|
|
18
|
+
create_task(project_name="my-api", task_description="Rotate refresh tokens",
|
|
19
|
+
workstream_slug="auth-hardening", memory_ids=["<design-uuid>"])
|
|
20
|
+
set_working_state(project_name="my-api", content="branch / slug / in flight / next")
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
## Why
|
|
24
|
+
|
|
25
|
+
Three traps live at the start of work. Re-deriving something a past session
|
|
26
|
+
settled produces a second, conflicting answer. A store with no workstream does
|
|
27
|
+
not fail; it lands where no `get_workstream` will replay it, so the next session
|
|
28
|
+
re-derives what you just settled. A Recallium task persists, links to the
|
|
29
|
+
memories that explain it, and resurfaces at the next summon - which is exactly
|
|
30
|
+
why tasks are created only when the user chose to track the work; unchosen
|
|
31
|
+
agent plans go in working state, where they expire harmlessly. But a task is
|
|
32
|
+
also the best checkpoint for multi-part work: closing it on the commit that
|
|
33
|
+
finishes it IS the checkpoint (see `finish`), so when the effort has several
|
|
34
|
+
units the user must at least be offered them — one question, their answer.
|
|
35
|
+
|
|
36
|
+
## Workflow
|
|
37
|
+
|
|
38
|
+
1. Confirm a new effort needs setup. A self-contained edit with a specified result can be completed directly; its required memory lookup does not by itself require this workflow or a new workstream.
|
|
39
|
+
For an effort, search by intent and file. A prior decision or constraint may settle part of it. `expand_memories` the hits and read them before opening the files they name: a summary line is not the memory. Keep the UUIDs for edges.
|
|
40
|
+
2. `get_workstream(project_name=...)` for the roster. Continuing something?
|
|
41
|
+
Open its slug. Nothing fits? `create_workstream(..., status="active")`.
|
|
42
|
+
**Gate:** the workstream exists before the first store, never after.
|
|
43
|
+
`attach` takes MEMORY UUIDs (never task ids) to adopt earlier orphans.
|
|
44
|
+
3. Tasks. Did the user ask to create or track tasks? Then `create_task` per
|
|
45
|
+
requested piece, within the request's scope, slug at creation time
|
|
46
|
+
(`update_task` ignores `workstream_slug`). No request, but the effort
|
|
47
|
+
resolves into TWO OR MORE units (PRs, phases, deliverables)? **Gate:** offer
|
|
48
|
+
them once, naming the units — "This is N units: A, B, C. Track them as
|
|
49
|
+
tasks?" — and create one task per unit only on a yes, linked to the design
|
|
50
|
+
memory when one exists. A single unit, a no, or silence: the plan stays in
|
|
51
|
+
`set_working_state`. Never create tasks the user did not ask for or agree to.
|
|
52
|
+
4. Work spans two repos? Link them once via `project`; a link is full
|
|
53
|
+
one-hop search visibility both ways.
|
|
54
|
+
5. If a plan or design formed, store it now: see `design`. If not, store
|
|
55
|
+
nothing; setup is not a finding.
|
|
56
|
+
6. `set_working_state`: branch, slug, in flight, parked, next action.
|
|
57
|
+
|
|
58
|
+
## Anti-patterns
|
|
59
|
+
|
|
60
|
+
WRONG: storing three memories, then creating the workstream.
|
|
61
|
+
RIGHT: `create_workstream` first; every store carries the slug.
|
|
62
|
+
|
|
63
|
+
WRONG: silently creating tasks from an ordinary implementation request.
|
|
64
|
+
RIGHT: tasks only for what the user asked to track or said yes to; findings as
|
|
65
|
+
memories; the rest in working state.
|
|
66
|
+
|
|
67
|
+
WRONG: a three-PR plan kept only in working state because nobody said "track".
|
|
68
|
+
RIGHT: "This is 3 units: … Track them as tasks?" — asked once, then their call.
|
|
69
|
+
|
|
70
|
+
## Checklist
|
|
71
|
+
|
|
72
|
+
- [ ] Topic and file-scoped search run; hits read in full before the code; UUIDs kept
|
|
73
|
+
- [ ] Slug loaded or workstream created before any store
|
|
74
|
+
- [ ] Two or more units → tasks offered once by name; created only on a yes, with the slug, linked to the design if one exists
|
|
75
|
+
|
|
76
|
+
## See also
|
|
77
|
+
|
|
78
|
+
`resume`, `recall`, `project`, `design`, `investigate`, `capture`, `finish`, `recallium-tools`.
|
|
@@ -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`.
|
package/bin/recallium
DELETED