synomem 0.7.2 → 0.9.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/CHANGELOG.md +38 -0
- package/README.md +47 -68
- package/dist/backend.d.ts +18 -6
- package/dist/backend.d.ts.map +1 -1
- package/dist/backend.js +55 -41
- package/dist/backend.js.map +1 -1
- package/dist/cli.d.ts +20 -25
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +1394 -1281
- package/dist/cli.js.map +1 -1
- package/dist/configure.d.ts +12 -46
- package/dist/configure.d.ts.map +1 -1
- package/dist/configure.js +51 -192
- package/dist/configure.js.map +1 -1
- package/dist/credentials.d.ts +73 -33
- package/dist/credentials.d.ts.map +1 -1
- package/dist/credentials.js +167 -43
- package/dist/credentials.js.map +1 -1
- package/dist/discover.d.ts +10 -13
- package/dist/discover.d.ts.map +1 -1
- package/dist/discover.js +45 -30
- package/dist/discover.js.map +1 -1
- package/dist/errors.d.ts +1 -1
- package/dist/errors.d.ts.map +1 -1
- package/dist/errors.js +5 -0
- package/dist/errors.js.map +1 -1
- package/dist/import.d.ts +3 -0
- package/dist/import.d.ts.map +1 -1
- package/dist/import.js +3 -0
- package/dist/import.js.map +1 -1
- package/dist/index.d.ts +9 -7
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +6 -5
- package/dist/index.js.map +1 -1
- package/dist/mcp/index.d.ts +18 -7
- package/dist/mcp/index.d.ts.map +1 -1
- package/dist/mcp/index.js +402 -183
- package/dist/mcp/index.js.map +1 -1
- package/dist/mcp-server.d.ts +5 -1
- package/dist/mcp-server.d.ts.map +1 -1
- package/dist/mcp-server.js +27 -105
- package/dist/mcp-server.js.map +1 -1
- package/dist/oauth.d.ts +31 -33
- package/dist/oauth.d.ts.map +1 -1
- package/dist/oauth.js +178 -125
- package/dist/oauth.js.map +1 -1
- package/dist/profiles.d.ts +243 -0
- package/dist/profiles.d.ts.map +1 -0
- package/dist/profiles.js +465 -0
- package/dist/profiles.js.map +1 -0
- package/dist/project.d.ts +8 -39
- package/dist/project.d.ts.map +1 -1
- package/dist/project.js +36 -94
- package/dist/project.js.map +1 -1
- package/dist/remote.d.ts +23 -15
- package/dist/remote.d.ts.map +1 -1
- package/dist/remote.js +54 -49
- package/dist/remote.js.map +1 -1
- package/dist/resolvers.d.ts +47 -0
- package/dist/resolvers.d.ts.map +1 -0
- package/dist/resolvers.js +255 -0
- package/dist/resolvers.js.map +1 -0
- package/dist/service.d.ts +2 -0
- package/dist/service.d.ts.map +1 -1
- package/dist/skill-install.d.ts +4 -6
- package/dist/skill-install.d.ts.map +1 -1
- package/dist/skill-install.js +13 -12
- package/dist/skill-install.js.map +1 -1
- package/dist/types.d.ts +51 -0
- package/dist/types.d.ts.map +1 -1
- package/docs/cli.md +173 -196
- package/docs/mcp.md +69 -65
- package/package.json +1 -1
- package/skills/synomem/SKILL.md +30 -4
- package/skills/synomem/references/examples.md +14 -0
- package/src/backend.ts +66 -64
- package/src/cli.ts +2137 -2163
- package/src/configure.ts +62 -241
- package/src/credentials.ts +208 -84
- package/src/discover.ts +60 -36
- package/src/errors.ts +5 -0
- package/src/import.ts +5 -0
- package/src/index.ts +14 -12
- package/src/mcp/index.ts +473 -194
- package/src/mcp-server.ts +32 -114
- package/src/oauth.ts +229 -130
- package/src/profiles.ts +644 -0
- package/src/project.ts +42 -108
- package/src/remote.ts +69 -58
- package/src/resolvers.ts +299 -0
- package/src/service.ts +2 -0
- package/src/skill-install.ts +17 -18
- package/src/types.ts +46 -0
package/docs/cli.md
CHANGED
|
@@ -6,273 +6,250 @@ title: CLI reference
|
|
|
6
6
|
# CLI reference
|
|
7
7
|
|
|
8
8
|
`synomem` is noninteractive by default. Add `--json` anywhere for stable machine output and
|
|
9
|
-
`--home <path>` to override `SYNOMEM_HOME` and the default `~/.synomem`
|
|
9
|
+
`--home <path>` to override `SYNOMEM_HOME` and the default `~/.synomem` home.
|
|
10
10
|
|
|
11
11
|
```bash
|
|
12
12
|
synomem --help
|
|
13
13
|
synomem <command> --help
|
|
14
14
|
```
|
|
15
15
|
|
|
16
|
-
##
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
16
|
+
## Identity: profiles, connections, contexts
|
|
17
|
+
|
|
18
|
+
Every command that reads or writes records acts as exactly one **profile**. A profile names one
|
|
19
|
+
stable **context** — one workspace and one actor — and how to reach it: a local store, or a hosted
|
|
20
|
+
**connection** (a credential). There are no per-command identity flags; `--actor`, `--as`,
|
|
21
|
+
`--from`, `--actor-kind`, `--agent-id` and `SYNOMEM_ACTOR_ID` are refused with a pointer to
|
|
22
|
+
`--profile`.
|
|
23
|
+
|
|
24
|
+
Which profile a command uses, most specific first:
|
|
25
|
+
|
|
26
|
+
1. `--profile <name>` (or `--preset <name>` for `synomem mcp`)
|
|
27
|
+
2. `SYNOMEM_PROFILE` / `SYNOMEM_PRESET`
|
|
28
|
+
3. the nearest project `.synomem/project.json` — it may name a profile or preset, nothing else
|
|
29
|
+
4. `defaultProfile` in `~/.synomem/profiles.json`
|
|
30
|
+
|
|
31
|
+
Naming a profile that does not exist is an error; it never falls through to the next source.
|
|
32
|
+
|
|
33
|
+
`~/.synomem/profiles.json` holds names and references only — never a secret:
|
|
34
|
+
|
|
35
|
+
```json
|
|
36
|
+
{
|
|
37
|
+
"version": 1,
|
|
38
|
+
"credentials": {
|
|
39
|
+
"codex-mac": {
|
|
40
|
+
"kind": "oauth",
|
|
41
|
+
"apiUrl": "https://api.synomem.ai",
|
|
42
|
+
"store": "keychain",
|
|
43
|
+
"secretRef": "synomem-3f0c…",
|
|
44
|
+
"connectionId": "con_…",
|
|
45
|
+
"createdAt": "2026-09-23T00:00:00.000Z"
|
|
46
|
+
}
|
|
47
|
+
},
|
|
48
|
+
"profiles": {
|
|
49
|
+
"gracie-eng": { "credentialRef": "codex-mac", "contextId": "ctx_…" },
|
|
50
|
+
"astra-eng": { "credentialRef": "codex-mac", "contextId": "ctx_…" },
|
|
51
|
+
"mike": { "backend": "local", "actorId": "01J…", "contextId": "lctx_…" }
|
|
52
|
+
},
|
|
53
|
+
"harnessPresets": { "codex": ["gracie-eng", "astra-eng"] },
|
|
54
|
+
"defaultProfile": "gracie-eng"
|
|
55
|
+
}
|
|
22
56
|
```
|
|
23
57
|
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
piped rather than passed as an argument, because an argument is kept by both the shell history and
|
|
27
|
-
the process list:
|
|
58
|
+
Two profiles above share one connection, so one sign-in serves both. Context ids are stable: key
|
|
59
|
+
rotation, a fresh sign-in, or renewed consent never changes them, so profiles keep working.
|
|
28
60
|
|
|
29
|
-
|
|
30
|
-
printf '%s' "$SYNOMEM_KEY" | synomem config init \
|
|
31
|
-
--backend remote --auth access-key --access-token-stdin --yes
|
|
32
|
-
```
|
|
33
|
-
|
|
34
|
-
`--workspace <id>` is still accepted, and is required when there is no key to ask.
|
|
35
|
-
|
|
36
|
-
## Status
|
|
61
|
+
## Local setup
|
|
37
62
|
|
|
38
63
|
```bash
|
|
39
|
-
synomem backend
|
|
40
|
-
synomem
|
|
41
|
-
synomem projection status # local only: do the generated files match the events?
|
|
42
|
-
synomem doctor
|
|
64
|
+
synomem setup --backend local --agent gracie --name "Gracie"
|
|
65
|
+
synomem whoami
|
|
43
66
|
```
|
|
44
67
|
|
|
45
|
-
`
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
68
|
+
`setup` creates the local store (if needed), the first agent, and a same-named fixed profile, and
|
|
69
|
+
makes it the default only if none exists. Re-running it is idempotent, and if it was interrupted
|
|
70
|
+
after the agent was created, the next run reuses that agent instead of creating another. It never
|
|
71
|
+
overwrites or rebinds an existing profile.
|
|
49
72
|
|
|
50
|
-
|
|
51
|
-
directory listing, so a file you put in the projection tree yourself is never reported as drift.
|
|
52
|
-
Both `missing` and `unexpected` are repaired by `synomem rebuild`, and neither means an event was
|
|
53
|
-
lost: projections are derived, never canonical.
|
|
54
|
-
|
|
55
|
-
## Initialize and identities
|
|
73
|
+
More local agents are independent domain operations; they get a profile only when asked:
|
|
56
74
|
|
|
57
75
|
```bash
|
|
58
|
-
synomem
|
|
59
|
-
synomem agent create
|
|
60
|
-
synomem agent
|
|
61
|
-
synomem agent show reviewer
|
|
62
|
-
synomem agent update codex --description "Careful reviewer"
|
|
63
|
-
synomem agent resolve Reviewer
|
|
64
|
-
synomem agent directory
|
|
65
|
-
synomem agent runtime bind codex --runtime claude-code --profile clinic
|
|
66
|
-
synomem agent runtime list codex
|
|
67
|
-
synomem agent runtime list # every agent that runs anywhere
|
|
68
|
-
synomem agent runtime unbind <binding-id>
|
|
76
|
+
synomem agent create codex --name "Codex" # no profile, no default change
|
|
77
|
+
synomem agent create mike --name "Mike" --create-profile # also creates profile "mike"
|
|
78
|
+
synomem profile create codex --local --agent codex # a profile for an existing agent
|
|
69
79
|
```
|
|
70
80
|
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
and never supplied.
|
|
75
|
-
|
|
76
|
-
Handles use lowercase ASCII letters, digits, and internal hyphens. Aliases accept any casing and are
|
|
77
|
-
stored folded to lowercase, so `Reviewer` and `reviewer` are one claim rather than two. An alias is
|
|
78
|
-
rejected when another agent already answers to it, whether as its alias or as its canonical ID.
|
|
81
|
+
A local profile's context id is derived from the store's persistent identity and the agent's
|
|
82
|
+
canonical id, so moving the store keeps it, and an unrelated store with a same-named agent is a
|
|
83
|
+
different target.
|
|
79
84
|
|
|
80
|
-
|
|
81
|
-
exits successfully with the candidates listed and no match, so a caller asks which was meant instead
|
|
82
|
-
of acting on a guess.
|
|
85
|
+
## Hosted connections
|
|
83
86
|
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
## Backend and authentication
|
|
87
|
+
A connection is one credential, typically one per harness installation (Codex on this Mac, Hermes
|
|
88
|
+
on this Mac). What it may act as is decided when it is authorized — on the consent screen for a
|
|
89
|
+
browser sign-in, or in the portal for an access key — and enforced by the API on every request.
|
|
88
90
|
|
|
89
91
|
```bash
|
|
90
|
-
synomem
|
|
91
|
-
synomem
|
|
92
|
-
synomem
|
|
93
|
-
synomem
|
|
94
|
-
synomem
|
|
95
|
-
SYNOMEM_ACCESS_TOKEN=... synomem auth status
|
|
96
|
-
synomem backend use local
|
|
97
|
-
synomem init
|
|
92
|
+
synomem connection login --name codex-mac # browser, OAuth 2.1 + PKCE
|
|
93
|
+
printf '%s' "$KEY" | synomem connection add-key --name ci --store file
|
|
94
|
+
synomem connection list
|
|
95
|
+
synomem connection status [codex-mac]
|
|
96
|
+
synomem connection remove --name codex-mac [--force]
|
|
98
97
|
```
|
|
99
98
|
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
99
|
+
`connection login` uses the pre-registered public client `synomem-cli`, discovers the authorization
|
|
100
|
+
server from the API's own protected-resource metadata, validates the issuer and resource, opens the
|
|
101
|
+
system browser and listens on `127.0.0.1:43817` for the callback. Re-running it for an existing
|
|
102
|
+
connection replaces the credential in place, so its profiles keep working.
|
|
103
103
|
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
`--callback-port` only when the public client is registered with another fixed port.
|
|
104
|
+
Secrets live in the macOS Keychain or Linux Secret Service by default. `--store file` keeps one in a
|
|
105
|
+
mode-0600 file under `~/.synomem/credentials/` instead; `--store environment` (access keys only)
|
|
106
|
+
stores nothing and reads `SYNOMEM_ACCESS_TOKEN` at run time. A keychain that refuses a write is an
|
|
107
|
+
error, never a silent fallback to a file. An access key is read from stdin, never an argument.
|
|
109
108
|
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
Use narrowly scoped credentials and avoid shell history or committed environment files.
|
|
109
|
+
Expired OAuth tokens are refreshed under a cross-process lock: when two processes find the same
|
|
110
|
+
expired token, one refreshes and the other reuses its result. A refused refresh is never retried;
|
|
111
|
+
run `connection login` again.
|
|
114
112
|
|
|
115
|
-
|
|
113
|
+
`connection remove` deletes the local secret only. Revoke the authorization itself in the portal.
|
|
116
114
|
|
|
117
|
-
|
|
118
|
-
fresh, consistent read-only SQLite snapshot first, then confirm the exact checksum-bound plan:
|
|
115
|
+
## Profiles and presets
|
|
119
116
|
|
|
120
117
|
```bash
|
|
121
|
-
synomem
|
|
122
|
-
synomem
|
|
118
|
+
synomem profile create gracie-eng --connection codex-mac --agent gracie --workspace engineering
|
|
119
|
+
synomem profile create astra-eng --connection codex-mac --context ctx_…
|
|
120
|
+
synomem profile list
|
|
121
|
+
synomem profile show gracie-eng
|
|
122
|
+
synomem profile default gracie-eng
|
|
123
|
+
synomem profile use gracie-eng # writes .synomem/project.json in this directory
|
|
124
|
+
synomem profile remove astra-eng # keeps the connection
|
|
125
|
+
|
|
126
|
+
synomem preset create codex gracie-eng astra-eng
|
|
127
|
+
synomem preset list
|
|
128
|
+
synomem preset remove codex
|
|
123
129
|
```
|
|
124
130
|
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
131
|
+
`profile create` lists the contexts the connection may use (`/v1/contexts`) and picks the one that
|
|
132
|
+
matches `--context`, or `--agent` and `--workspace`. An ambiguous match fails with the candidates
|
|
133
|
+
(or asks, in a terminal). A profile never creates an agent or grants access: asking for an identity
|
|
134
|
+
the connection cannot use fails with `CONTEXT_FORBIDDEN`.
|
|
129
135
|
|
|
130
|
-
##
|
|
136
|
+
## MCP servers
|
|
131
137
|
|
|
132
138
|
```bash
|
|
133
|
-
synomem
|
|
134
|
-
|
|
135
|
-
--title "Caught a continuity contradiction" \
|
|
136
|
-
--reason "Found conflicting requirements before implementation." \
|
|
137
|
-
--tag review --evidence task:E17 --idempotency-key gracie-codex-e17
|
|
138
|
-
|
|
139
|
-
synomem kudos list --recipient codex
|
|
140
|
-
synomem kudos show <kudos-id>
|
|
141
|
-
synomem kudos acknowledge <kudos-id> --as codex
|
|
142
|
-
synomem kudos revoke <kudos-id> --as gracie --actor-kind agent --reason "Corrected."
|
|
143
|
-
synomem kudos wins codex --print
|
|
144
|
-
synomem kudos stats
|
|
139
|
+
synomem mcp --profile gracie-eng # fixed: one identity
|
|
140
|
+
synomem mcp --preset codex --contexts explicit # explicit: every call names contextId
|
|
145
141
|
```
|
|
146
142
|
|
|
147
|
-
|
|
143
|
+
`synomem-mcp <args>` is the same as `synomem mcp <args>`. See [MCP server](mcp.md).
|
|
148
144
|
|
|
149
|
-
|
|
150
|
-
synomem memo send codex --from gracie \
|
|
151
|
-
--subject "Review follow-up" --body "Please recheck the migration."
|
|
152
|
-
synomem memo list --participant codex --status unread
|
|
153
|
-
synomem memo show <memo-id>
|
|
154
|
-
synomem memo read <memo-id> --as codex
|
|
155
|
-
synomem memo archive <memo-id> --as codex
|
|
156
|
-
```
|
|
157
|
-
|
|
158
|
-
Sending to the actor's own agent ID is valid future-self communication. Sent content is immutable;
|
|
159
|
-
send a correction rather than editing history.
|
|
160
|
-
|
|
161
|
-
## Notes
|
|
145
|
+
## Local stores
|
|
162
146
|
|
|
163
147
|
```bash
|
|
164
|
-
synomem
|
|
165
|
-
|
|
166
|
-
synomem
|
|
167
|
-
synomem note show <note-id>
|
|
168
|
-
synomem note revise <note-id> --as codex --expected-version 1 --body "Revised text"
|
|
169
|
-
synomem note archive <note-id> --as codex
|
|
148
|
+
synomem workspace create lumina # a separate SQLite store under ~/.synomem/workspaces/
|
|
149
|
+
synomem workspace list
|
|
150
|
+
synomem profile create lumina-gracie --local --agent gracie --store-home ~/.synomem/workspaces/lumina
|
|
170
151
|
```
|
|
171
152
|
|
|
172
|
-
|
|
173
|
-
`REVISION_CONFLICT` if state changed concurrently.
|
|
174
|
-
|
|
175
|
-
## Posts
|
|
153
|
+
## Identities
|
|
176
154
|
|
|
177
155
|
```bash
|
|
178
|
-
synomem
|
|
179
|
-
|
|
180
|
-
synomem
|
|
181
|
-
synomem
|
|
182
|
-
synomem
|
|
183
|
-
synomem
|
|
184
|
-
synomem
|
|
156
|
+
synomem agent create codex --name "Codex" --alias reviewer
|
|
157
|
+
synomem agent list
|
|
158
|
+
synomem agent show reviewer
|
|
159
|
+
synomem agent update codex --description "Careful reviewer"
|
|
160
|
+
synomem agent resolve Reviewer
|
|
161
|
+
synomem agent directory
|
|
162
|
+
synomem agent runtime bind codex --runtime claude-code
|
|
163
|
+
synomem agent runtime list [codex]
|
|
164
|
+
synomem agent runtime unbind <binding-id>
|
|
185
165
|
```
|
|
186
166
|
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
167
|
+
On a local store, agent management runs as the local operator (the filesystem owner is the
|
|
168
|
+
authority); with a hosted profile selected, it runs through that profile and the API decides.
|
|
169
|
+
|
|
170
|
+
Each agent has an opaque canonical ID, generated at creation and never reused, and a separate
|
|
171
|
+
handle — the name you type. `agent resolve` returns a match only when exactly one agent answers to
|
|
172
|
+
the name; otherwise it lists the candidates. Runtime bindings are advisory.
|
|
190
173
|
|
|
191
|
-
|
|
192
|
-
from its aggregate version, so an acknowledgement arriving while the author is revising does not
|
|
193
|
-
invalidate the revision in flight.
|
|
174
|
+
## Records
|
|
194
175
|
|
|
195
|
-
|
|
176
|
+
Every command below acts as the selected profile.
|
|
196
177
|
|
|
197
178
|
```bash
|
|
198
|
-
synomem
|
|
199
|
-
synomem
|
|
200
|
-
|
|
201
|
-
synomem
|
|
202
|
-
synomem
|
|
203
|
-
synomem
|
|
204
|
-
synomem
|
|
205
|
-
synomem task update <task-id> --as codex --expected-version 2 --priority 2
|
|
206
|
-
synomem task complete <task-id> --as codex
|
|
207
|
-
synomem task reopen <task-id> --as codex
|
|
208
|
-
synomem task cancel <task-id> --as codex --reason "Superseded."
|
|
209
|
-
```
|
|
179
|
+
synomem kudos give codex --title "Caught a contradiction" --reason "…" --evidence task:E17
|
|
180
|
+
synomem kudos list --recipient codex
|
|
181
|
+
synomem kudos show <kudos-id>
|
|
182
|
+
synomem kudos acknowledge <kudos-id>
|
|
183
|
+
synomem kudos revoke <kudos-id> --reason "Corrected."
|
|
184
|
+
synomem kudos wins codex --print # local stores
|
|
185
|
+
synomem kudos stats
|
|
210
186
|
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
187
|
+
synomem memo send codex --subject "Review follow-up" --body "Please recheck the migration."
|
|
188
|
+
synomem memo list --participant codex --status unread
|
|
189
|
+
synomem memo read <memo-id>
|
|
190
|
+
synomem memo archive <memo-id>
|
|
215
191
|
|
|
216
|
-
|
|
192
|
+
synomem note create --title "Release invariant" --body "Never publish without authorization."
|
|
193
|
+
synomem note revise <note-id> --expected-version 1 --body "Revised text"
|
|
194
|
+
synomem note archive <note-id>
|
|
217
195
|
|
|
218
|
-
|
|
219
|
-
synomem
|
|
220
|
-
synomem
|
|
221
|
-
synomem todo complete <todo-id> --as codex
|
|
222
|
-
```
|
|
196
|
+
synomem post create --title "Migration tonight" --body "Expect a short read-only window."
|
|
197
|
+
synomem post acknowledge <post-id> --note "Already handled."
|
|
198
|
+
synomem post roster <post-id>
|
|
223
199
|
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
200
|
+
synomem task create codex --title "Review migration" --due-date 2026-09-15
|
|
201
|
+
synomem task accept <task-id>
|
|
202
|
+
synomem task reject <task-id> --response "Outside current scope."
|
|
203
|
+
synomem task update <task-id> --expected-version 2 --priority 2
|
|
204
|
+
synomem task complete|reopen|cancel <task-id>
|
|
227
205
|
|
|
228
|
-
|
|
206
|
+
synomem todo create --title "Re-read the migration notes" --due-date 2026-09-15
|
|
207
|
+
synomem todo list
|
|
208
|
+
synomem todo complete|reopen|cancel|archive <todo-id>
|
|
229
209
|
|
|
230
|
-
|
|
231
|
-
synomem
|
|
232
|
-
synomem list --kind memo --kind task --participant codex --limit 10
|
|
210
|
+
synomem inbox # the profile's own agent
|
|
211
|
+
synomem list --kind memo --kind task --participant codex --author gracie
|
|
233
212
|
synomem changes --after <opaque-watermark>
|
|
234
213
|
```
|
|
235
214
|
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
continuation state. Fetch full detail with the appropriate `kudos show`, `memo show`, `note show`,
|
|
239
|
-
or `task show` command.
|
|
215
|
+
Record filters that name an actor use `--author` (who wrote it), `--participant`, `--recipient` or
|
|
216
|
+
`--assignee`; none of them changes who you act as.
|
|
240
217
|
|
|
241
218
|
## Administration
|
|
242
219
|
|
|
243
220
|
```bash
|
|
221
|
+
synomem whoami
|
|
244
222
|
synomem doctor
|
|
245
223
|
synomem rebuild
|
|
246
|
-
synomem backup ./synomem-backup.sqlite3
|
|
224
|
+
synomem backup ./synomem-backup.sqlite3 # local stores
|
|
247
225
|
synomem export --format json|jsonl|markdown
|
|
248
|
-
synomem
|
|
249
|
-
synomem skill install --runtime codex --
|
|
250
|
-
synomem skill
|
|
251
|
-
synomem
|
|
226
|
+
synomem projection status # local stores
|
|
227
|
+
synomem skill install --runtime codex --profile gracie-eng --yes
|
|
228
|
+
synomem skill status --profile gracie-eng
|
|
229
|
+
synomem reset [--integrations] [--yes]
|
|
252
230
|
```
|
|
253
231
|
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
232
|
+
`skill install --profile <name>` prints MCP registration commands that launch
|
|
233
|
+
`synomem mcp --profile <name>` and, when applied, records a runtime binding as that profile's agent.
|
|
234
|
+
`reset` lists exact files (store, profiles, file secrets) and keychain entries before removing them;
|
|
235
|
+
it never revokes server-side authorizations.
|
|
257
236
|
|
|
258
|
-
|
|
259
|
-
the agent's profile when the server starts, so renaming an agent does not require re-registering it
|
|
260
|
-
with every harness, and a harness cannot sign another agent's name to work it did.
|
|
237
|
+
### One-way local import
|
|
261
238
|
|
|
262
|
-
|
|
263
|
-
`grokbot` is accepted as an alias for local Grok Build. Omit `--runtime` to inspect every detected
|
|
264
|
-
runtime. Install and uninstall remain dry runs unless `--yes` is present.
|
|
239
|
+
With a hosted profile whose context is a workspace owner or administrator:
|
|
265
240
|
|
|
266
|
-
|
|
267
|
-
|
|
241
|
+
```bash
|
|
242
|
+
synomem --profile troy-eng remote import --from-home /path/to/local-home --preview
|
|
243
|
+
synomem --profile troy-eng remote import --from-home /path/to/local-home --confirm <plan-id>
|
|
244
|
+
```
|
|
268
245
|
|
|
269
246
|
## Exit codes
|
|
270
247
|
|
|
271
|
-
| Code | Meaning
|
|
272
|
-
| ---: |
|
|
273
|
-
| 0 | Success
|
|
274
|
-
| 1 | Unexpected internal failure
|
|
275
|
-
| 2 | Invalid arguments, configuration,
|
|
276
|
-
| 3 | Agent or item not found
|
|
277
|
-
| 4 | Policy or
|
|
278
|
-
| 5 | Database, schema, remote transport, or health failure
|
|
248
|
+
| Code | Meaning |
|
|
249
|
+
| ---: | ------------------------------------------------------------------ |
|
|
250
|
+
| 0 | Success |
|
|
251
|
+
| 1 | Unexpected internal failure |
|
|
252
|
+
| 2 | Invalid arguments, configuration, missing/ambiguous context, input |
|
|
253
|
+
| 3 | Agent or item not found |
|
|
254
|
+
| 4 | Policy, context, or authentication denial; re-login required |
|
|
255
|
+
| 5 | Database, schema, remote transport, or health failure |
|