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.
Files changed (73) hide show
  1. package/ARCHITECTURE.md +2 -2
  2. package/CHANGELOG.md +37 -1
  3. package/README.md +28 -15
  4. package/dist/cli.d.ts.map +1 -1
  5. package/dist/cli.js +311 -70
  6. package/dist/cli.js.map +1 -1
  7. package/dist/client.d.ts +96 -17
  8. package/dist/client.d.ts.map +1 -1
  9. package/dist/client.js +333 -76
  10. package/dist/client.js.map +1 -1
  11. package/dist/config.d.ts +2 -2
  12. package/dist/config.js +8 -8
  13. package/dist/import.d.ts +207 -13
  14. package/dist/import.d.ts.map +1 -1
  15. package/dist/index.d.ts +2 -2
  16. package/dist/index.d.ts.map +1 -1
  17. package/dist/index.js +2 -2
  18. package/dist/index.js.map +1 -1
  19. package/dist/mcp/index.d.ts.map +1 -1
  20. package/dist/mcp/index.js +156 -31
  21. package/dist/mcp/index.js.map +1 -1
  22. package/dist/mcp-server.js +54 -8
  23. package/dist/mcp-server.js.map +1 -1
  24. package/dist/ports/repository.d.ts +18 -1
  25. package/dist/ports/repository.d.ts.map +1 -1
  26. package/dist/projections.d.ts +18 -1
  27. package/dist/projections.d.ts.map +1 -1
  28. package/dist/projections.js +137 -44
  29. package/dist/projections.js.map +1 -1
  30. package/dist/remote.d.ts +57 -9
  31. package/dist/remote.d.ts.map +1 -1
  32. package/dist/remote.js +43 -2
  33. package/dist/remote.js.map +1 -1
  34. package/dist/schemas.d.ts +302 -21
  35. package/dist/schemas.d.ts.map +1 -1
  36. package/dist/schemas.js +142 -26
  37. package/dist/schemas.js.map +1 -1
  38. package/dist/service.d.ts +57 -10
  39. package/dist/service.d.ts.map +1 -1
  40. package/dist/skill-install.d.ts +8 -2
  41. package/dist/skill-install.d.ts.map +1 -1
  42. package/dist/skill-install.js +6 -11
  43. package/dist/skill-install.js.map +1 -1
  44. package/dist/storage.d.ts +41 -1
  45. package/dist/storage.d.ts.map +1 -1
  46. package/dist/storage.js +254 -36
  47. package/dist/storage.js.map +1 -1
  48. package/dist/types.d.ts +213 -38
  49. package/dist/types.d.ts.map +1 -1
  50. package/docs/cli.md +53 -20
  51. package/docs/examples.md +4 -4
  52. package/docs/mcp.md +12 -4
  53. package/docs/skill.md +10 -7
  54. package/docs/storage-format.md +4 -4
  55. package/openapi/synomem-v1.yaml +24 -24
  56. package/package.json +1 -1
  57. package/skills/synomem/SKILL.md +24 -8
  58. package/skills/synomem/agents/openai.yaml +1 -1
  59. package/skills/synomem/references/examples.md +1 -1
  60. package/src/cli.ts +572 -173
  61. package/src/client.ts +391 -79
  62. package/src/config.ts +8 -8
  63. package/src/index.ts +11 -1
  64. package/src/mcp/index.ts +189 -30
  65. package/src/mcp-server.ts +58 -8
  66. package/src/ports/repository.ts +16 -0
  67. package/src/projections.ts +139 -44
  68. package/src/remote.ts +118 -8
  69. package/src/schemas.ts +147 -26
  70. package/src/service.ts +59 -7
  71. package/src/skill-install.ts +14 -17
  72. package/src/storage.ts +326 -34
  73. 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 and aliases use lowercase ASCII letters, digits, and internal hyphens. Aliases never silently
27
- merge established identities.
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
- ## Todos
130
+ ## Tasks
118
131
 
119
132
  ```bash
120
- synomem todo create codex --from gracie --title "Review migration" --due-date 2026-09-15
121
- synomem todo create codex --from gracie --title "Join review" \
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 todo list --assignee codex --status open
124
- synomem todo show <todo-id>
125
- synomem todo accept <todo-id> --as codex
126
- synomem todo reject <todo-id> --as codex --reason "Outside current scope."
127
- synomem todo update <todo-id> --as codex --expected-version 2 --priority 2
128
- synomem todo complete <todo-id> --as codex
129
- synomem todo reopen <todo-id> --as codex
130
- synomem todo cancel <todo-id> --as codex --reason "Superseded."
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
- Todos assigned by another actor begin `assigned` and cannot be worked or completed until the
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
- todos begin open. Date-only deadlines do not invent a time; timed deadlines require both an RFC 3339
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 todo --participant codex --limit 10
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 `todo show` command.
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 --actor-id codex --actor-kind agent --actor-name "Codex"
159
- synomem skill install --runtime codex --actor-id codex --actor-name "Codex" --yes
160
- synomem skill install --runtime hermes --actor-id mycroft --actor-name "Mycroft" --yes
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 todo create beacon --from atlas --actor-kind agent \
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 todo begins as `assigned`. Beacon must explicitly accept or reject it:
40
+ The cross-agent task begins as `assigned`. Beacon must explicitly accept or reject it:
41
41
 
42
42
  ```bash
43
- synomem todo accept <todo-id> --as beacon --actor-kind agent
43
+ synomem task accept <task-id> --as beacon --actor-kind agent
44
44
  # or
45
- synomem todo reject <todo-id> --as beacon --actor-kind agent --reason "Wrong owner"
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
- synomem_todo_accept synomem_todo_reject synomem_todo_reopen
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 todo assignment is enabled; ownership and
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 todos they created or received. System actors have no implicit authority. The
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
- Add identity options to print a ready-to-review actor-bound MCP command for Codex, Claude Code,
57
- Hermes, OpenClaw, or Grok Build:
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 --actor-id codex --actor-name "Codex"
61
- synomem skill install --runtime claude --actor-id claude --actor-name "Claude"
62
- synomem skill install --runtime openclaw --actor-id mycroft --actor-name "Mycroft"
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 `--actor-id`, `--actor-kind agent`, and
68
- `--actor-name` as arguments. The installer deliberately does not rewrite shared JSON configuration.
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
 
@@ -18,8 +18,8 @@ title: Storage format
18
18
  ├── profile.json
19
19
  ├── WINS.md
20
20
  ├── MEMORY.md
21
- ├── TODOS.md
22
- ├── inbox/{kudos,memos,todos}/<item-id>.md
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 todos. Actor-scoped idempotency keys protect
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`, `TODOS.md`, and inbox entries are generated. Normal mutations
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
 
@@ -15,7 +15,7 @@ tags:
15
15
  - name: kudos
16
16
  - name: memos
17
17
  - name: notes
18
- - name: todos
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}/todos:
262
+ /v1/workspaces/{workspaceId}/tasks:
263
263
  parameters: [{ $ref: '#/components/parameters/WorkspaceId' }]
264
264
  get:
265
- tags: [todos]
266
- operationId: listTodos
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: [todos]
274
- operationId: createTodo
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/CreateTodo' } } }
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}/todos/{itemId}:
282
+ /v1/workspaces/{workspaceId}/tasks/{itemId}:
283
283
  get:
284
- tags: [todos]
285
- operationId: getTodo
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}/todos/{itemId}/revisions:
294
+ /v1/workspaces/{workspaceId}/tasks/{itemId}/revisions:
295
295
  post:
296
- tags: [todos]
297
- operationId: updateTodo
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/UpdateTodo' } } }
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}/todos/{itemId}/{transition}:
308
+ /v1/workspaces/{workspaceId}/tasks/{itemId}/{transition}:
309
309
  post:
310
- tags: [todos]
311
- operationId: transitionTodo
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/TodoTransition' } } }
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
- TodoDue:
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
- CreateTodo:
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/TodoDue' }
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
- UpdateTodo:
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/TodoDue' }, { type: 'null' }]
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
- TodoTransition:
669
+ TaskTransition:
670
670
  type: object
671
671
  additionalProperties: false
672
672
  properties:
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "synomem",
3
- "version": "0.1.0",
3
+ "version": "0.2.0",
4
4
  "description": "Shared memory, durable communication, recognition, and task coordination for AI agents",
5
5
  "type": "module",
6
6
  "license": "MIT",
@@ -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
- - **Todo:** a concrete action assigned to an agent, optionally with a due date or time.
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 todos for information with no requested action.
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 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 todo assigned by another
61
- actor must be accepted or rejected by the assignee before work begins. Read before update and pass
62
- the current version. Complete, reopen, or cancel through the matching lifecycle tool.
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 todos. Use
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 todo.'
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 todo to review the migration by September 15” maps to `synomem_todo_create` with 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