synomem 0.1.0 → 0.2.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/ARCHITECTURE.md +2 -2
- package/CHANGELOG.md +37 -1
- package/README.md +28 -15
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +311 -70
- package/dist/cli.js.map +1 -1
- package/dist/client.d.ts +96 -17
- package/dist/client.d.ts.map +1 -1
- package/dist/client.js +333 -76
- package/dist/client.js.map +1 -1
- package/dist/config.d.ts +2 -2
- package/dist/config.js +8 -8
- package/dist/import.d.ts +207 -13
- package/dist/import.d.ts.map +1 -1
- package/dist/index.d.ts +2 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -2
- package/dist/index.js.map +1 -1
- package/dist/mcp/index.d.ts.map +1 -1
- package/dist/mcp/index.js +156 -31
- package/dist/mcp/index.js.map +1 -1
- package/dist/mcp-server.js +54 -8
- package/dist/mcp-server.js.map +1 -1
- package/dist/ports/repository.d.ts +18 -1
- package/dist/ports/repository.d.ts.map +1 -1
- package/dist/projections.d.ts +18 -1
- package/dist/projections.d.ts.map +1 -1
- package/dist/projections.js +137 -44
- package/dist/projections.js.map +1 -1
- package/dist/remote.d.ts +57 -9
- package/dist/remote.d.ts.map +1 -1
- package/dist/remote.js +43 -2
- package/dist/remote.js.map +1 -1
- package/dist/schemas.d.ts +302 -21
- package/dist/schemas.d.ts.map +1 -1
- package/dist/schemas.js +142 -26
- package/dist/schemas.js.map +1 -1
- package/dist/service.d.ts +57 -10
- package/dist/service.d.ts.map +1 -1
- package/dist/skill-install.d.ts +8 -2
- package/dist/skill-install.d.ts.map +1 -1
- package/dist/skill-install.js +6 -11
- package/dist/skill-install.js.map +1 -1
- package/dist/storage.d.ts +41 -1
- package/dist/storage.d.ts.map +1 -1
- package/dist/storage.js +254 -36
- package/dist/storage.js.map +1 -1
- package/dist/types.d.ts +213 -38
- package/dist/types.d.ts.map +1 -1
- package/docs/cli.md +53 -20
- package/docs/examples.md +4 -4
- package/docs/mcp.md +12 -4
- package/docs/skill.md +10 -7
- package/docs/storage-format.md +4 -4
- package/openapi/synomem-v1.yaml +24 -24
- package/package.json +1 -1
- package/skills/synomem/SKILL.md +24 -8
- package/skills/synomem/agents/openai.yaml +1 -1
- package/skills/synomem/references/examples.md +1 -1
- package/src/cli.ts +572 -173
- package/src/client.ts +391 -79
- package/src/config.ts +8 -8
- package/src/index.ts +11 -1
- package/src/mcp/index.ts +189 -30
- package/src/mcp-server.ts +58 -8
- package/src/ports/repository.ts +16 -0
- package/src/projections.ts +139 -44
- package/src/remote.ts +118 -8
- package/src/schemas.ts +147 -26
- package/src/service.ts +59 -7
- package/src/skill-install.ts +14 -17
- package/src/storage.ts +326 -34
- package/src/types.ts +228 -39
package/docs/cli.md
CHANGED
|
@@ -21,10 +21,23 @@ synomem agent create codex --name "Codex" --alias reviewer
|
|
|
21
21
|
synomem agent list
|
|
22
22
|
synomem agent show reviewer
|
|
23
23
|
synomem agent update codex --description "Careful reviewer"
|
|
24
|
+
synomem agent resolve Reviewer
|
|
25
|
+
synomem agent directory
|
|
26
|
+
synomem agent runtime bind codex --runtime claude-code --profile clinic
|
|
27
|
+
synomem agent runtime list codex
|
|
28
|
+
synomem agent runtime unbind <binding-id>
|
|
24
29
|
```
|
|
25
30
|
|
|
26
|
-
IDs
|
|
27
|
-
|
|
31
|
+
IDs use lowercase ASCII letters, digits, and internal hyphens. Aliases accept any casing and are
|
|
32
|
+
stored folded to lowercase, so `Reviewer` and `reviewer` are one claim rather than two. An alias is
|
|
33
|
+
rejected when another agent already answers to it, whether as its alias or as its canonical ID.
|
|
34
|
+
|
|
35
|
+
`agent resolve` returns a match only when exactly one agent answers to the name. When several do, it
|
|
36
|
+
exits successfully with the candidates listed and no match, so a caller asks which was meant instead
|
|
37
|
+
of acting on a guess.
|
|
38
|
+
|
|
39
|
+
Runtime bindings record where an agent was registered to run. They are advisory: `last seen` reports
|
|
40
|
+
when Synomem last observed that binding act, never that the agent is reachable now.
|
|
28
41
|
|
|
29
42
|
## Backend and authentication
|
|
30
43
|
|
|
@@ -114,39 +127,51 @@ synomem note archive <note-id> --as codex
|
|
|
114
127
|
Agents may mutate only their own notes. Revisions require the last-read version and fail with
|
|
115
128
|
`REVISION_CONFLICT` if state changed concurrently.
|
|
116
129
|
|
|
117
|
-
##
|
|
130
|
+
## Tasks
|
|
118
131
|
|
|
119
132
|
```bash
|
|
120
|
-
synomem
|
|
121
|
-
synomem
|
|
133
|
+
synomem task create codex --from gracie --title "Review migration" --due-date 2026-09-15
|
|
134
|
+
synomem task create codex --from gracie --title "Join review" \
|
|
122
135
|
--due-at 2026-09-15T14:00:00-05:00 --time-zone America/Chicago
|
|
123
|
-
synomem
|
|
124
|
-
synomem
|
|
125
|
-
synomem
|
|
126
|
-
synomem
|
|
127
|
-
synomem
|
|
128
|
-
synomem
|
|
129
|
-
synomem
|
|
130
|
-
synomem
|
|
136
|
+
synomem task list --assignee codex --status open
|
|
137
|
+
synomem task show <task-id>
|
|
138
|
+
synomem task accept <task-id> --as codex
|
|
139
|
+
synomem task reject <task-id> --as codex --reason "Outside current scope."
|
|
140
|
+
synomem task update <task-id> --as codex --expected-version 2 --priority 2
|
|
141
|
+
synomem task complete <task-id> --as codex
|
|
142
|
+
synomem task reopen <task-id> --as codex
|
|
143
|
+
synomem task cancel <task-id> --as codex --reason "Superseded."
|
|
131
144
|
```
|
|
132
145
|
|
|
133
|
-
|
|
146
|
+
Tasks assigned by another actor begin `assigned` and cannot be worked or completed until the
|
|
134
147
|
assignee explicitly accepts them. Rejection is preserved as a lifecycle event. Self-created agent
|
|
135
|
-
|
|
148
|
+
tasks begin open. Date-only deadlines do not invent a time; timed deadlines require both an RFC 3339
|
|
136
149
|
offset datetime and an IANA time zone.
|
|
137
150
|
|
|
151
|
+
## Todos
|
|
152
|
+
|
|
153
|
+
```bash
|
|
154
|
+
synomem todo create --as codex --title "Re-read the migration notes" --due-date 2026-09-15
|
|
155
|
+
synomem todo list --as codex
|
|
156
|
+
synomem todo complete <todo-id> --as codex
|
|
157
|
+
```
|
|
158
|
+
|
|
159
|
+
A todo belongs to the agent that created it and is visible to no one else, including administrators
|
|
160
|
+
reading through the shared database. Nobody can assign one: work meant for another agent is a task,
|
|
161
|
+
which that agent may accept or reject.
|
|
162
|
+
|
|
138
163
|
## Unified discovery and inbox
|
|
139
164
|
|
|
140
165
|
```bash
|
|
141
166
|
synomem inbox codex
|
|
142
|
-
synomem list --kind memo --kind
|
|
167
|
+
synomem list --kind memo --kind task --participant codex --limit 10
|
|
143
168
|
synomem changes --after <opaque-watermark>
|
|
144
169
|
```
|
|
145
170
|
|
|
146
171
|
List results are compact, default to 10, allow at most 50, and omit full detail fields. Changes
|
|
147
172
|
default to 20 and allow at most 100. Both apply an approximate 24 KiB budget and return opaque
|
|
148
173
|
continuation state. Fetch full detail with the appropriate `kudos show`, `memo show`, `note show`,
|
|
149
|
-
or `
|
|
174
|
+
or `task show` command.
|
|
150
175
|
|
|
151
176
|
## Administration
|
|
152
177
|
|
|
@@ -155,12 +180,20 @@ synomem doctor
|
|
|
155
180
|
synomem rebuild
|
|
156
181
|
synomem backup ./synomem-backup.sqlite3
|
|
157
182
|
synomem export --format json|jsonl|markdown
|
|
158
|
-
synomem mcp --
|
|
159
|
-
synomem skill install --runtime codex --
|
|
160
|
-
synomem skill install --runtime hermes --
|
|
183
|
+
synomem mcp --agent-id codex
|
|
184
|
+
synomem skill install --runtime codex --agent codex --yes
|
|
185
|
+
synomem skill install --runtime hermes --agent mycroft --yes
|
|
161
186
|
synomem skill status
|
|
162
187
|
```
|
|
163
188
|
|
|
189
|
+
`--agent` accepts an ID or an alias and is resolved before anything is written, so an ambiguous or
|
|
190
|
+
unknown name stops the command instead of installing a skill pointed at an agent that does not
|
|
191
|
+
exist. Applying an install also records a runtime binding for each runtime that was installed.
|
|
192
|
+
|
|
193
|
+
The generated MCP registration carries only `--agent-id`. Display name and actor kind are read from
|
|
194
|
+
the agent's profile when the server starts, so renaming an agent does not require re-registering it
|
|
195
|
+
with every harness, and a harness cannot sign another agent's name to work it did.
|
|
196
|
+
|
|
164
197
|
Skill runtime names are `claude`, `codex`, `hermes`, `openclaw`, `cursor`, and `grok`;
|
|
165
198
|
`grokbot` is accepted as an alias for local Grok Build. Omit `--runtime` to inspect every detected
|
|
166
199
|
runtime. Install and uninstall remain dry runs unless `--yes` is present.
|
package/docs/examples.md
CHANGED
|
@@ -33,16 +33,16 @@ synomem note create --as atlas --actor-kind agent \
|
|
|
33
33
|
--title "Repository convention" \
|
|
34
34
|
--body "All timestamps retain an explicit offset."
|
|
35
35
|
|
|
36
|
-
synomem
|
|
36
|
+
synomem task create beacon --from atlas --actor-kind agent \
|
|
37
37
|
--title "Review ADR-17" --priority 2 --due-date 2026-09-15
|
|
38
38
|
```
|
|
39
39
|
|
|
40
|
-
The cross-agent
|
|
40
|
+
The cross-agent task begins as `assigned`. Beacon must explicitly accept or reject it:
|
|
41
41
|
|
|
42
42
|
```bash
|
|
43
|
-
synomem
|
|
43
|
+
synomem task accept <task-id> --as beacon --actor-kind agent
|
|
44
44
|
# or
|
|
45
|
-
synomem
|
|
45
|
+
synomem task reject <task-id> --as beacon --actor-kind agent --reason "Wrong owner"
|
|
46
46
|
```
|
|
47
47
|
|
|
48
48
|
## Unified bounded reads
|
package/docs/mcp.md
CHANGED
|
@@ -51,9 +51,11 @@ Purpose-specific writes:
|
|
|
51
51
|
synomem_kudos_give synomem_kudos_acknowledge synomem_kudos_revoke
|
|
52
52
|
synomem_memo_send synomem_memo_read synomem_memo_archive
|
|
53
53
|
synomem_note_create synomem_note_revise synomem_note_archive
|
|
54
|
+
synomem_task_create synomem_task_update synomem_task_complete
|
|
55
|
+
synomem_task_accept synomem_task_reject synomem_task_reopen
|
|
56
|
+
synomem_task_cancel
|
|
54
57
|
synomem_todo_create synomem_todo_update synomem_todo_complete
|
|
55
|
-
|
|
56
|
-
synomem_todo_cancel
|
|
58
|
+
synomem_todo_reopen synomem_todo_cancel synomem_todo_archive
|
|
57
59
|
```
|
|
58
60
|
|
|
59
61
|
Focused kudos reads and administration remain available:
|
|
@@ -61,6 +63,7 @@ Focused kudos reads and administration remain available:
|
|
|
61
63
|
```text
|
|
62
64
|
synomem_kudos_list synomem_kudos_get synomem_kudos_changes
|
|
63
65
|
synomem_kudos_stats synomem_agent_list synomem_agent_create
|
|
66
|
+
synomem_agent_resolve synomem_agent_directory
|
|
64
67
|
synomem_doctor synomem_rebuild
|
|
65
68
|
```
|
|
66
69
|
|
|
@@ -71,6 +74,11 @@ errors, structured and concise text content, the bound actor, and MCP behavior a
|
|
|
71
74
|
changes by default and at most 100. Both stop around a 24 KiB item-data budget. Bodies, reasons,
|
|
72
75
|
evidence, descriptions, source, and metadata require one explicit `synomem_get`.
|
|
73
76
|
|
|
77
|
+
`synomem_agent_resolve` resolves a name or alias, ignoring case. It returns a match only when
|
|
78
|
+
exactly one agent answers; otherwise it returns the candidates so the caller asks rather than picks.
|
|
79
|
+
`synomem_agent_directory` lists agents with their aliases and runtime bindings. Runtime bindings are
|
|
80
|
+
advisory records of where an agent was registered to run, never a claim that it is reachable now.
|
|
81
|
+
|
|
74
82
|
## Resources
|
|
75
83
|
|
|
76
84
|
```text
|
|
@@ -88,9 +96,9 @@ inbox resource. Canonical event resources authorize against their aggregate befo
|
|
|
88
96
|
## Policy
|
|
89
97
|
|
|
90
98
|
Edit `<home>/synomem/config.json` while writers are stopped. Safe defaults deny self-kudos, MCP
|
|
91
|
-
identity creation, and MCP rebuild. Notes are unconditionally owner-private in V1. Cross-agent
|
|
99
|
+
identity creation, and MCP rebuild. Notes are unconditionally owner-private in V1. Cross-agent task assignment is enabled; ownership and
|
|
92
100
|
participant rules still apply.
|
|
93
101
|
|
|
94
102
|
Human actors have local administrative authority. Agent actors manage only their own note, recipient
|
|
95
|
-
memo state, and
|
|
103
|
+
memo state, and tasks they created or received. System actors have no implicit authority. The
|
|
96
104
|
filesystem owner remains the ultimate local authority.
|
package/docs/skill.md
CHANGED
|
@@ -53,19 +53,22 @@ Skill content is operational guidance rather than confidential Synomem data and
|
|
|
53
53
|
database and projection file-mode policy. The Synomem ownership/version stamp is restricted to the
|
|
54
54
|
local user where POSIX modes are available.
|
|
55
55
|
|
|
56
|
-
|
|
57
|
-
|
|
56
|
+
Name an agent to print a ready-to-review agent-bound MCP command for Codex, Claude Code, Hermes,
|
|
57
|
+
OpenClaw, or Grok Build. `--agent` takes an ID or an alias and is resolved before anything is
|
|
58
|
+
written:
|
|
58
59
|
|
|
59
60
|
```bash
|
|
60
|
-
synomem skill install --runtime codex --
|
|
61
|
-
synomem skill install --runtime claude --
|
|
62
|
-
synomem skill install --runtime openclaw --
|
|
61
|
+
synomem skill install --runtime codex --agent codex
|
|
62
|
+
synomem skill install --runtime claude --agent claude
|
|
63
|
+
synomem skill install --runtime openclaw --agent mycroft
|
|
63
64
|
```
|
|
64
65
|
|
|
65
66
|
Cursor discovers skills automatically but currently requires MCP definitions in its global
|
|
66
67
|
`~/.cursor/mcp.json` or project `.cursor/mcp.json`. Merge a `synomem` entry without replacing other
|
|
67
|
-
servers. Use `synomem-mcp` as the command and pass `--
|
|
68
|
-
|
|
68
|
+
servers. Use `synomem-mcp` as the command and pass `--agent-id <agent-id>` as its only argument:
|
|
69
|
+
the display name and actor kind are read from the agent's profile at startup, so nothing in a shared
|
|
70
|
+
configuration file asserts an identity. The installer deliberately does not rewrite shared JSON
|
|
71
|
+
configuration.
|
|
69
72
|
|
|
70
73
|
Global skill installation changes agent configuration and is always an explicit user action. Synomem has no postinstall script and never modifies those directories implicitly.
|
|
71
74
|
|
package/docs/storage-format.md
CHANGED
|
@@ -18,8 +18,8 @@ title: Storage format
|
|
|
18
18
|
├── profile.json
|
|
19
19
|
├── WINS.md
|
|
20
20
|
├── MEMORY.md
|
|
21
|
-
├──
|
|
22
|
-
├── inbox/{kudos,memos,
|
|
21
|
+
├── TASKS.md
|
|
22
|
+
├── inbox/{kudos,memos,tasks}/<item-id>.md
|
|
23
23
|
└── NOTES.md
|
|
24
24
|
```
|
|
25
25
|
|
|
@@ -58,7 +58,7 @@ Schema version 3 contains:
|
|
|
58
58
|
- `schema_migrations`: applied database migrations.
|
|
59
59
|
|
|
60
60
|
Events use transactionally assigned ingestion sequences for cursors and watermarks. Aggregate
|
|
61
|
-
versions provide optimistic concurrency for notes and
|
|
61
|
+
versions provide optimistic concurrency for notes and tasks. Actor-scoped idempotency keys protect
|
|
62
62
|
all retryable mutations.
|
|
63
63
|
|
|
64
64
|
Current tables and files are rebuildable. Full bodies, reasons, evidence, descriptions, source, and
|
|
@@ -66,7 +66,7 @@ metadata remain in canonical events and require detail reads. Machine APIs never
|
|
|
66
66
|
|
|
67
67
|
## Generated and owned files
|
|
68
68
|
|
|
69
|
-
`profile.json`, `WINS.md`, `MEMORY.md`, `
|
|
69
|
+
`profile.json`, `WINS.md`, `MEMORY.md`, `TASKS.md`, and inbox entries are generated. Normal mutations
|
|
70
70
|
synchronize only affected agents; `synomem rebuild` performs full deterministic regeneration.
|
|
71
71
|
Cleanup removes only manifest-listed regular files and never follows symlinks.
|
|
72
72
|
|
package/openapi/synomem-v1.yaml
CHANGED
|
@@ -15,7 +15,7 @@ tags:
|
|
|
15
15
|
- name: kudos
|
|
16
16
|
- name: memos
|
|
17
17
|
- name: notes
|
|
18
|
-
- name:
|
|
18
|
+
- name: tasks
|
|
19
19
|
- name: items
|
|
20
20
|
- name: administration
|
|
21
21
|
paths:
|
|
@@ -259,30 +259,30 @@ paths:
|
|
|
259
259
|
responses:
|
|
260
260
|
'200': { $ref: '#/components/responses/Success' }
|
|
261
261
|
default: { $ref: '#/components/responses/Error' }
|
|
262
|
-
/v1/workspaces/{workspaceId}/
|
|
262
|
+
/v1/workspaces/{workspaceId}/tasks:
|
|
263
263
|
parameters: [{ $ref: '#/components/parameters/WorkspaceId' }]
|
|
264
264
|
get:
|
|
265
|
-
tags: [
|
|
266
|
-
operationId:
|
|
265
|
+
tags: [tasks]
|
|
266
|
+
operationId: listTasks
|
|
267
267
|
parameters:
|
|
268
268
|
[{ $ref: '#/components/parameters/ListLimit' }, { $ref: '#/components/parameters/Cursor' }]
|
|
269
269
|
responses:
|
|
270
270
|
'200': { $ref: '#/components/responses/Success' }
|
|
271
271
|
default: { $ref: '#/components/responses/Error' }
|
|
272
272
|
post:
|
|
273
|
-
tags: [
|
|
274
|
-
operationId:
|
|
273
|
+
tags: [tasks]
|
|
274
|
+
operationId: createTask
|
|
275
275
|
parameters: [{ $ref: '#/components/parameters/IdempotencyKey' }]
|
|
276
276
|
requestBody:
|
|
277
277
|
required: true
|
|
278
|
-
content: { application/json: { schema: { $ref: '#/components/schemas/
|
|
278
|
+
content: { application/json: { schema: { $ref: '#/components/schemas/CreateTask' } } }
|
|
279
279
|
responses:
|
|
280
280
|
'200': { $ref: '#/components/responses/Success' }
|
|
281
281
|
default: { $ref: '#/components/responses/Error' }
|
|
282
|
-
/v1/workspaces/{workspaceId}/
|
|
282
|
+
/v1/workspaces/{workspaceId}/tasks/{itemId}:
|
|
283
283
|
get:
|
|
284
|
-
tags: [
|
|
285
|
-
operationId:
|
|
284
|
+
tags: [tasks]
|
|
285
|
+
operationId: getTask
|
|
286
286
|
parameters:
|
|
287
287
|
[
|
|
288
288
|
{ $ref: '#/components/parameters/WorkspaceId' },
|
|
@@ -291,24 +291,24 @@ paths:
|
|
|
291
291
|
responses:
|
|
292
292
|
'200': { $ref: '#/components/responses/Success' }
|
|
293
293
|
default: { $ref: '#/components/responses/Error' }
|
|
294
|
-
/v1/workspaces/{workspaceId}/
|
|
294
|
+
/v1/workspaces/{workspaceId}/tasks/{itemId}/revisions:
|
|
295
295
|
post:
|
|
296
|
-
tags: [
|
|
297
|
-
operationId:
|
|
296
|
+
tags: [tasks]
|
|
297
|
+
operationId: updateTask
|
|
298
298
|
parameters:
|
|
299
299
|
- { $ref: '#/components/parameters/WorkspaceId' }
|
|
300
300
|
- { $ref: '#/components/parameters/ItemId' }
|
|
301
301
|
- { $ref: '#/components/parameters/IdempotencyKey' }
|
|
302
302
|
requestBody:
|
|
303
303
|
required: true
|
|
304
|
-
content: { application/json: { schema: { $ref: '#/components/schemas/
|
|
304
|
+
content: { application/json: { schema: { $ref: '#/components/schemas/UpdateTask' } } }
|
|
305
305
|
responses:
|
|
306
306
|
'200': { $ref: '#/components/responses/Success' }
|
|
307
307
|
default: { $ref: '#/components/responses/Error' }
|
|
308
|
-
/v1/workspaces/{workspaceId}/
|
|
308
|
+
/v1/workspaces/{workspaceId}/tasks/{itemId}/{transition}:
|
|
309
309
|
post:
|
|
310
|
-
tags: [
|
|
311
|
-
operationId:
|
|
310
|
+
tags: [tasks]
|
|
311
|
+
operationId: transitionTask
|
|
312
312
|
parameters:
|
|
313
313
|
- { $ref: '#/components/parameters/WorkspaceId' }
|
|
314
314
|
- { $ref: '#/components/parameters/ItemId' }
|
|
@@ -318,7 +318,7 @@ paths:
|
|
|
318
318
|
schema: { type: string, enum: [accept, reject, complete, reopen, cancel] }
|
|
319
319
|
- { $ref: '#/components/parameters/IdempotencyKey' }
|
|
320
320
|
requestBody:
|
|
321
|
-
content: { application/json: { schema: { $ref: '#/components/schemas/
|
|
321
|
+
content: { application/json: { schema: { $ref: '#/components/schemas/TaskTransition' } } }
|
|
322
322
|
responses:
|
|
323
323
|
'200': { $ref: '#/components/responses/Success' }
|
|
324
324
|
default: { $ref: '#/components/responses/Error' }
|
|
@@ -622,7 +622,7 @@ components:
|
|
|
622
622
|
tags: { $ref: '#/components/schemas/Tags' }
|
|
623
623
|
source: { type: object }
|
|
624
624
|
metadata: { type: object }
|
|
625
|
-
|
|
625
|
+
TaskDue:
|
|
626
626
|
oneOf:
|
|
627
627
|
- type: object
|
|
628
628
|
additionalProperties: false
|
|
@@ -637,7 +637,7 @@ components:
|
|
|
637
637
|
kind: { const: datetime }
|
|
638
638
|
datetime: { type: string, format: date-time }
|
|
639
639
|
timeZone: { type: string }
|
|
640
|
-
|
|
640
|
+
CreateTask:
|
|
641
641
|
type: object
|
|
642
642
|
additionalProperties: false
|
|
643
643
|
required: [title]
|
|
@@ -646,12 +646,12 @@ components:
|
|
|
646
646
|
title: { type: string }
|
|
647
647
|
description: { type: string }
|
|
648
648
|
priority: { type: integer, minimum: 1, maximum: 4 }
|
|
649
|
-
due: { $ref: '#/components/schemas/
|
|
649
|
+
due: { $ref: '#/components/schemas/TaskDue' }
|
|
650
650
|
tags: { $ref: '#/components/schemas/Tags' }
|
|
651
651
|
visibility: { $ref: '#/components/schemas/Visibility' }
|
|
652
652
|
source: { type: object }
|
|
653
653
|
metadata: { type: object }
|
|
654
|
-
|
|
654
|
+
UpdateTask:
|
|
655
655
|
type: object
|
|
656
656
|
additionalProperties: false
|
|
657
657
|
required: [expectedVersion]
|
|
@@ -661,12 +661,12 @@ components:
|
|
|
661
661
|
description: { type: string }
|
|
662
662
|
priority: { type: integer, minimum: 1, maximum: 4 }
|
|
663
663
|
due:
|
|
664
|
-
oneOf: [{ $ref: '#/components/schemas/
|
|
664
|
+
oneOf: [{ $ref: '#/components/schemas/TaskDue' }, { type: 'null' }]
|
|
665
665
|
tags: { $ref: '#/components/schemas/Tags' }
|
|
666
666
|
visibility: { $ref: '#/components/schemas/Visibility' }
|
|
667
667
|
source: { type: object }
|
|
668
668
|
metadata: { type: object }
|
|
669
|
-
|
|
669
|
+
TaskTransition:
|
|
670
670
|
type: object
|
|
671
671
|
additionalProperties: false
|
|
672
672
|
properties:
|
package/package.json
CHANGED
package/skills/synomem/SKILL.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: synomem
|
|
3
|
-
description: Use durable local-first kudos, memos, notes, and todos for stable AI-agent identities when users request recognition, inter-agent communication, memory capture, inbox review, or task tracking.
|
|
3
|
+
description: Use durable local-first kudos, memos, notes, assigned tasks, and private todos for stable AI-agent identities when users request recognition, inter-agent communication, memory capture, inbox review, agent lookup, or task tracking.
|
|
4
4
|
---
|
|
5
5
|
|
|
6
6
|
# Synomem
|
|
@@ -14,10 +14,10 @@ edit the SQLite event store or generated Markdown directly.
|
|
|
14
14
|
- **Kudos:** specific recognition for an observed contribution and its consequence.
|
|
15
15
|
- **Memo:** a durable message delivered to another agent or to your future self.
|
|
16
16
|
- **Note:** knowledge owned by this agent and deliberately retrieved later.
|
|
17
|
-
- **
|
|
17
|
+
- **Task:** a concrete action assigned to an agent, optionally with a due date or time.
|
|
18
18
|
|
|
19
19
|
A self-memo belongs in the inbox and can be marked read. A note belongs in memory and is revised
|
|
20
|
-
with version checks. Do not use
|
|
20
|
+
with version checks. Do not use tasks for information with no requested action.
|
|
21
21
|
|
|
22
22
|
## Safety and quality
|
|
23
23
|
|
|
@@ -54,16 +54,32 @@ Use `synomem_note_create` for concise reusable knowledge owned by the configured
|
|
|
54
54
|
current item before `synomem_note_revise` and pass its exact current version. On
|
|
55
55
|
`REVISION_CONFLICT`, fetch the item and reconcile deliberately. Archive instead of deleting.
|
|
56
56
|
|
|
57
|
+
## Tasks
|
|
58
|
+
|
|
59
|
+
Use `synomem_task_create` for a specific action with an assignee. Preserve date-only deadlines as
|
|
60
|
+
dates; use an RFC 3339 datetime plus IANA time zone for timed deadlines. A task assigned by another
|
|
61
|
+
actor must be accepted or rejected by the assignee before work begins. Give a reason when rejecting;
|
|
62
|
+
it is required, because a refusal the assigner cannot act on wastes both sides. Read before update
|
|
63
|
+
and pass the current version. Complete, reopen, or cancel through the matching lifecycle tool.
|
|
64
|
+
|
|
57
65
|
## Todos
|
|
58
66
|
|
|
59
|
-
Use `synomem_todo_create` for
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
67
|
+
Use `synomem_todo_create` for the configured agent's own reminders. A todo has no assignee and is
|
|
68
|
+
visible to no one else, so never use one to ask another agent for work: that is a task. Do not copy
|
|
69
|
+
another agent's todo into your own.
|
|
70
|
+
|
|
71
|
+
## Agent identity
|
|
72
|
+
|
|
73
|
+
Use `synomem_agent_resolve` before acting on a name a user typed. Matching ignores case, and the
|
|
74
|
+
tool returns a match only when exactly one agent answers to the name. When it returns candidates
|
|
75
|
+
instead, ask which agent was meant rather than picking one. Use `synomem_agent_directory` to see
|
|
76
|
+
known agents with their aliases and runtime bindings. A runtime binding records where an agent was
|
|
77
|
+
registered to run and when Synomem last observed it act; it never means the agent is reachable now,
|
|
78
|
+
so do not report an agent as online or offline.
|
|
63
79
|
|
|
64
80
|
## Discovery
|
|
65
81
|
|
|
66
|
-
Use `synomem_inbox` for the configured agent's pending kudos, unread memos, and open
|
|
82
|
+
Use `synomem_inbox` for the configured agent's pending kudos, unread memos, and open tasks. Use
|
|
67
83
|
`synomem_list` for compact cross-type discovery, `synomem_get` for one selected full record, and
|
|
68
84
|
`synomem_changes` with a saved watermark for incremental polling. Do not drain history
|
|
69
85
|
speculatively.
|
|
@@ -2,7 +2,7 @@ interface:
|
|
|
2
2
|
display_name: 'Synomem'
|
|
3
3
|
short_description: 'Durable agent kudos, messages, memory, and tasks'
|
|
4
4
|
brand_color: '#8B5CF6'
|
|
5
|
-
default_prompt: 'Use $synomem to choose and manage the appropriate durable kudos, memo, note, or
|
|
5
|
+
default_prompt: 'Use $synomem to choose and manage the appropriate durable kudos, memo, note, or task.'
|
|
6
6
|
|
|
7
7
|
policy:
|
|
8
8
|
allow_implicit_invocation: true
|
|
@@ -19,7 +19,7 @@ version.
|
|
|
19
19
|
|
|
20
20
|
## Action
|
|
21
21
|
|
|
22
|
-
“Assign Codex a
|
|
22
|
+
“Assign Codex a task to review the migration by September 15” maps to `synomem_task_create` with a
|
|
23
23
|
date-only due value. Do not invent a time of day.
|
|
24
24
|
|
|
25
25
|
## Inbox and retries
|