agentel 0.2.0 → 0.2.3

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/README.md CHANGED
@@ -18,8 +18,8 @@ Core capabilities:
18
18
  coding agents
19
19
  - local web viewer for full conversation history inspection
20
20
  - device-scoped S3-compatible upload sync for backup and future multi-device recall
21
- - lifecycle, config, autostart, and MCP config helper commands
22
- - local reset command for starting init from a clean archive/config state
21
+ - lifecycle, config, watcher login, and MCP config helper commands
22
+ - local update/reset commands for rebuilding archives after package changes
23
23
 
24
24
  The local HTTP OTLP collector, S3-compatible remote sync, and team deployment
25
25
  surfaces are configurable extension points for environments that install those
@@ -31,7 +31,7 @@ Install the CLI globally so agent-facing recall commands can call `agentlog`
31
31
  from PATH:
32
32
 
33
33
  ```sh
34
- npm install -g agentlogs
34
+ npm install -g agentel
35
35
  agentlog init
36
36
  ```
37
37
 
@@ -41,21 +41,21 @@ ref for repeatable installs:
41
41
  ```sh
42
42
  npm install -g brianlzhou/agentlog
43
43
  # or
44
- npm install -g brianlzhou/agentlog#v0.2.0
44
+ npm install -g brianlzhou/agentlog#v0.2.3
45
45
  agentlog init
46
46
  ```
47
47
 
48
48
  You can also install it into a project and run it through npm/npx:
49
49
 
50
50
  ```sh
51
- npm install agentlogs
52
- npx agentlogs init
51
+ npm install agentel
52
+ npx agentel init
53
53
  ```
54
54
 
55
55
  Or run the published package without keeping a local install:
56
56
 
57
57
  ```sh
58
- npx agentlogs init
58
+ npx agentel init
59
59
  ```
60
60
 
61
61
  Requirements:
@@ -124,21 +124,21 @@ npm run smoke:pack
124
124
  ## Recall
125
125
 
126
126
  ```sh
127
- agentlog recall add-to codex
128
- agentlog recall add-to claude
129
- agentlog recall add-to gemini
130
- agentlog recall add-to antigravity
131
- agentlog recall add-to devin
132
- agentlog recall add-to cursor
133
- agentlog recall add-to cline
134
- agentlog recall add-to opencode
135
- agentlog recall add-to aider
127
+ agentlog integrations add-to codex
128
+ agentlog integrations add-to claude
129
+ agentlog integrations add-to gemini
130
+ agentlog integrations add-to antigravity
131
+ agentlog integrations add-to devin
132
+ agentlog integrations add-to cursor
133
+ agentlog integrations add-to cline
134
+ agentlog integrations add-to opencode
135
+ agentlog integrations add-to aider
136
136
  ```
137
137
 
138
- `recall add-to codex` installs the MCP server plus a Codex recall skill.
139
- `recall add-to claude` installs the MCP server plus a Claude `/recall`
138
+ `integrations add-to codex` installs the MCP server plus a Codex recall skill.
139
+ `integrations add-to claude` installs the MCP server plus a Claude `/recall`
140
140
  command plus a Claude skill under `~/.claude/skills/agentlog-recall/SKILL.md`.
141
- `recall add-to gemini` installs the MCP server plus a Gemini `/recall` command
141
+ `integrations add-to gemini` installs the MCP server plus a Gemini `/recall` command
142
142
  under `~/.gemini/commands/recall.toml`.
143
143
 
144
144
  Additional native surfaces are installed where the client exposes one:
@@ -183,7 +183,7 @@ agentlog-recall
183
183
  ## Daily CLI
184
184
 
185
185
  `agentlog status`, `agentlog history`, `agentlog show`, `agentlog import`, `agentlog index`, and
186
- `agentlog autostart` use styled human-readable output by default. Use `--json`
186
+ `agentlog watcher login` use styled human-readable output by default. Use `--json`
187
187
  on `status`, `history`, and import status/results for script-friendly
188
188
  structured output. `agentlog status` includes the most recently archived
189
189
  conversation threads and the sources currently monitored by the supervisor;
@@ -197,17 +197,23 @@ agentlog history "codebase explanation" --provider codex-cli --limit 10
197
197
  agentlog history --repo github.com/acme/widgets --since 90d
198
198
  agentlog show <session-id>
199
199
  agentlog show <session-id> --path
200
- agentlog history --web
201
- agentlog history --web --no-open
200
+ agentlog web
201
+ agentlog web --no-open
202
202
  ```
203
203
 
204
- `agentlog history --web` starts the local conversation viewer and opens it in
204
+ `agentlog web` starts the local conversation viewer and opens it in
205
205
  your default browser. Use `--no-open` when you only want to print the local URL
206
206
  and keep the server running. The left rail is a
207
207
  repo tree sorted by the latest updated session, each folder pages through
208
208
  sessions with a load-more control, search results reuse the same session
209
209
  reader, and the transcript pane can switch between readable chat bubbles and
210
- the raw markdown archive. The static viewer uses shadcn/ui-style design tokens
210
+ the raw markdown archive. Readable chat bubbles load from pre-baked
211
+ `*.view.json` payloads; raw markdown is fetched only when source view is
212
+ opened. Search runs as you type with a short debounce. The web endpoint uses a
213
+ warm compatible index when available, but it will not synchronously parse or
214
+ rebuild an obsolete index during an interactive query or scan every rendered
215
+ conversation as a fallback; rebuilds are left to `agentlog index rebuild` or
216
+ the supervisor. The static viewer uses shadcn/ui-style design tokens
211
217
  and compact button/input/select/sidebar patterns without requiring a frontend
212
218
  build step. Archives still keep stable `path:<hash>` keys for folders without
213
219
  git identity, but the UI displays the local path.
@@ -218,11 +224,17 @@ Provider filters use one stable order: OpenAI (`codex-cli`, `codex-desktop`,
218
224
  (`devin-cli`), then other local tools (`cursor`, `cline`, `opencode`,
219
225
  `aider`).
220
226
 
221
- When running, the supervisor polls the watcher source list chosen during init
222
- every 30 seconds using the configured import window, defaulting to the last 30
223
- days. The default watcher choices are Codex CLI, Codex Desktop, Claude Code CLI,
224
- Claude Code Desktop, Claude Workspace, Gemini CLI, Antigravity, Devin CLI,
225
- Cursor, Cline, OpenCode, and Aider. New configs still support
227
+ The supervisor is agentlog's local background watcher. When it is running, it
228
+ polls the watcher source list chosen during init every 30 seconds using the
229
+ configured import window, defaulting to the last 30 days. If you opt out of
230
+ starting it at login, agentlog does not install a login item. During setup,
231
+ uncheck `Start watcher at login` or run `agentlog init --no-autostart`; you can
232
+ still run `agentlog import --source all` for a one-time catch-up,
233
+ `agentlog watcher start` to watch for the current session, or
234
+ `agentlog watcher login enable` later. The default
235
+ watcher choices are Codex CLI, Codex Desktop, Claude Code CLI, Claude Code
236
+ Desktop, Claude Workspace, Gemini CLI, Antigravity, Devin CLI, Cursor, Cline,
237
+ OpenCode, and Aider. New configs still support
226
238
  `imports.autoDiscoverSources=true`, but init records the chosen watcher list
227
239
  exactly by setting `imports.autoDiscoverSources=false`.
228
240
  Cursor raw SQLite recovery is intentionally left to explicit imports such as
@@ -233,20 +245,21 @@ multi-session stores such as Cursor SQLite and Devin `sessions.db`, lives in
233
245
  [`docs/history-source-handling.md`](docs/history-source-handling.md).
234
246
 
235
247
  Remote sync can be configured during init or from the CLI. Local storage remains
236
- canonical. Current sync is upload-only: this machine pushes changed archive
248
+ canonical. Normal sync is upload-only: this machine pushes changed archive
237
249
  objects to the remote target and never deletes objects from the bucket just
238
250
  because they are missing locally.
239
251
 
240
252
  ```sh
241
- agentlog sync \
242
- --endpoint https://<account-id>.r2.cloudflarestorage.com/<bucket> \
243
- --device-name "work-laptop" \
244
- --access-key-id <id> \
245
- --secret-access-key <key>
253
+ agentlog sync configure
254
+ agentlog sync
246
255
  ```
247
256
 
248
- If you prefer to split the values manually, use
249
- `--endpoint https://<account-id>.r2.cloudflarestorage.com --bucket <bucket>`.
257
+ `agentlog sync configure` opens a picker in a terminal. Choose an existing
258
+ configured/env remote, or choose the last option to configure a new R2, S3,
259
+ S3-compatible, or local-folder target. After a target is selected, the CLI asks
260
+ what to do next: sync now, create a snapshot, change autosync cadence, or exit.
261
+ Non-interactive scripts can still pass flags such as `--endpoint`, `--bucket`,
262
+ and `--access-key-id`.
250
263
 
251
264
  The same values can be supplied with `AGENTLOG_REMOTE_ENDPOINT`,
252
265
  `AGENTLOG_REMOTE_BUCKET`, `AGENTLOG_REMOTE_ACCESS_KEY_ID`, and
@@ -264,9 +277,9 @@ the bucket or `agentlog/` prefix with `ListBucket` and object read/write
264
277
  permissions.
265
278
 
266
279
  During `agentlog init`, a configured cloud destination is uploaded immediately
267
- after the initial backfill. If auto-start is enabled, init also asks for a cloud
268
- autosync cadence; the background supervisor then uploads new archive changes on
269
- that interval.
280
+ after the initial backfill. If the watcher is allowed to start at login, init
281
+ also asks for a cloud autosync cadence; the supervisor then uploads new archive
282
+ changes on that interval whenever it is running.
270
283
 
271
284
  Remote objects are namespaced by device so multiple machines can upload into
272
285
  one bucket without overwriting each other's archive roots:
@@ -284,13 +297,40 @@ s3://<bucket>/agentlog/
284
297
  sessions/...
285
298
  ```
286
299
 
287
- Use `agentlog snapshot` to upload a redundant point-in-time copy under
288
- `agentlog/snapshots/<timestamp>/<device>/...`:
300
+ In a terminal, `agentlog sync` asks you to choose the remote target, previews
301
+ the upload-only plan, and requires a confirmation phrase before writing. This is
302
+ intentional even when only one remote is configured, because multiple remotes
303
+ can exist in config/env and a normal sync can overwrite same-key objects for the
304
+ selected device namespace. Use `--dry-run` to preview in scripts, or `--yes` to
305
+ skip the guided confirmation.
306
+
307
+ Use `agentlog sync snapshot` to upload a redundant point-in-time copy under
308
+ `agentlog/snapshots/<timestamp>/<device>/...`. In a terminal it asks you to
309
+ choose the remote, lists existing snapshots, asks for the snapshot name, previews
310
+ the write, and then confirms before uploading:
311
+
312
+ ```sh
313
+ agentlog sync snapshot
314
+ ```
315
+
316
+ If the remote copy has stale objects after a local reset, cleanup, or full
317
+ reimport, use the explicit replace path. In a terminal it previews the selected
318
+ remote, shows how many remote objects will be deleted, and requires typed
319
+ confirmation before it deletes this device namespace under
320
+ `agentlog/devices/<device>/` and uploads the current local archive.
289
321
 
290
322
  ```sh
291
- agentlog snapshot --name before-reimport
323
+ agentlog sync replace
324
+ agentlog sync wipe
292
325
  ```
293
326
 
327
+ `agentlog sync wipe` is delete-only. It asks which remote to use, asks for the
328
+ scope (`device`, one `snapshot`, all `snapshots`, `prefix`, or `bucket`),
329
+ previews the exact target and prefix, then requires a two-step typed
330
+ confirmation. `device` leaves snapshots untouched; `snapshots` leaves normal
331
+ device uploads untouched. Run `agentlog sync` afterward to upload this device
332
+ again. Scripts can use `--dry-run` or `--yes`.
333
+
294
334
  Receive-only and two-way sync are intentionally not active yet. The intended v1
295
335
  shape is to read other device namespaces and merge normalized session metadata
296
336
  without treating absence on one machine as a deletion. Remote deletes should be
@@ -328,14 +368,25 @@ the same database into every session folder.
328
368
  `tool.completed`. Parser versions are stamped by source type so importer output
329
369
  changes can trigger reimport with a new fingerprint. Recall/search builds a
330
370
  keyword index over event text first and falls back to transcript/markdown for
331
- legacy archives without events.
371
+ legacy archives without events. The local search index stores compact term
372
+ postings for CLI compatibility plus a SQLite FTS5 sidecar for fast web
373
+ queries; when either index format changes, `agentlog history` and `agentlog
374
+ index` rebuild it from archived transcripts/events without a full source
375
+ reimport. The web viewer avoids doing that rebuild on a keystroke so a large
376
+ old index, or a full-archive Markdown fallback, cannot block interactive
377
+ search.
332
378
 
333
379
  Stats are import-time metadata, not viewer-time transcript repair. Archive
334
380
  metadata stores message counts, user-message counts, token usage, and models for
335
- each session, and the web stats view reads those fields directly. During pre-v1
336
- development, if those stats fields or parser semantics change, rebuild the local
337
- archive with `agentlog reset --yes`, `agentlog init`, and
338
- `agentlog import --source all --since all`.
381
+ each session, and the web stats view reads those fields directly. Cursor sessions
382
+ without provider-reported token usage can also carry separately labeled
383
+ `estimatedUsage`, which the stats view includes while reporting estimated token
384
+ coverage. ChatGPT and Claude.ai exports without provider usage get estimated
385
+ `metadata.usage` on their native chat messages, split into non-assistant input,
386
+ assistant output, and Claude thinking output where the export provides separate
387
+ parts. During pre-v1 development, if those stats fields or parser semantics
388
+ change, rebuild the local archive with
389
+ `agentlog update --yes --since all`.
339
390
 
340
391
  ChatGPT and Claude.ai web exports are imported manually from an official `.zip`,
341
392
  an unzipped export folder, or a direct JSON file. These imports are stored as
@@ -343,9 +394,11 @@ local scoped web-chat archives and displayed through virtual conversation roots
343
394
  such as `[chatgpt]conversations/<account-id>` and
344
395
  `[claude]conversations/<account-id>/<project>`. The importer records account
345
396
  metadata in `~/.agentlog/state/web-accounts.json`; use
346
- `agentlog accounts list` to inspect mappings and
347
- `agentlog accounts rename <provider> <account-id-or-username> --display-name <name>`
348
- to change the viewer display name. Repeated manual uploads are incremental:
397
+ `agentlog import accounts list` to inspect mappings and
398
+ `agentlog import accounts rename <provider> <account-id-or-username> --display-name <name>`
399
+ to change the viewer display name. Claude.ai exports preserve conversation
400
+ summaries and split structured thinking parts from visible assistant answers
401
+ when the export includes that detail. Repeated manual uploads are incremental:
349
402
  unchanged conversations are skipped, and updated conversations replace the
350
403
  stable session for that provider/account/conversation id. Existing malformed
351
404
  pre-v1 web-chat archives are not migrated automatically; reimport from the
@@ -364,11 +417,50 @@ local home, config, state, cache, logs, and archive objects. Source application
364
417
  histories and MCP configuration files are not changed. Add `--keep-autostart`
365
418
  to leave the login item in place.
366
419
 
420
+ Use `agentlog update` after installing a newer npm package when you want the new
421
+ importer/parser logic to rebuild the local archive without redoing setup:
422
+
423
+ ```sh
424
+ npm install -g agentel@latest
425
+ agentlog update --yes --since all
426
+ ```
427
+
428
+ `agentlog update` preserves `config.json`, redaction settings, web account
429
+ labels, source histories, and recall integrations. It removes derived local
430
+ archive, import, index, cache, and sync bookkeeping, then reimports configured
431
+ local sources from the stored preferences. It does not touch remote sync objects
432
+ by default; use `agentlog sync replace` when the remote should match the rebuilt
433
+ local archive. It also does not rediscover manual ChatGPT/Claude.ai export
434
+ files; reimport those web exports from the original ZIP/folder when needed.
435
+
436
+ Use `agentlog config` to change `~/.agentlog/config.json` without rerunning the
437
+ init wizard:
438
+
439
+ ```sh
440
+ agentlog config path
441
+ agentlog config setup
442
+ agentlog config setup --watch-sources codex-cli,cursor --default-since-days 90
443
+ agentlog config setup --sync-interval-minutes manual --no-autostart
444
+ agentlog config set imports.defaultSinceDays 90
445
+ agentlog config set sync.intervalMinutes manual
446
+ agentlog config sources edit
447
+ agentlog config sources set codex-cli,cursor,cline
448
+ agentlog config sources add gemini-cli
449
+ agentlog config sources remove claude-workspace
450
+ ```
451
+
452
+ `agentlog config setup` reopens the preferences parts of init, including what
453
+ the watcher polls, the rolling import window, autosync cadence, and login
454
+ startup. It does not run an import.
455
+ `agentlog config sources edit` opens just the watcher source picker from init,
456
+ with the current config preselected.
457
+
367
458
  ## Import Windows
368
459
 
369
460
  `agentlog init` starts with interactive setup: choose archive destinations,
370
- choose the full local archive/cache path, choose background service behavior and
371
- recall commands or skills, then discover sources and optionally backfill history.
461
+ choose the full local archive/cache path, choose whether the local watcher starts
462
+ at login, and install recall commands or skills, then discover sources and
463
+ optionally backfill history.
372
464
  After backfill, init asks which sources the background watcher should keep
373
465
  polling, then offers local OTel bridges for Claude Code, Gemini CLI, and Cline.
374
466
  Local archive storage is always enabled; R2, S3, and custom remote sync targets
@@ -376,10 +468,12 @@ can be added as upload-only optional destinations with a device name for the
376
468
  remote namespace. Discovery and import phases show progress bars while they scan
377
469
  local stores.
378
470
 
379
- After discovery, init offers a checkbox-style source picker. Claude SDK jobs
380
- are shown as a separate opt-in source because batch SDK traffic can exceed
381
- interactive sessions. The selected sources are saved in config and used by
382
- later `agentlog import --source all` runs unless `--sources` is provided
471
+ After discovery, init offers a checkbox-style source picker. Rows marked `[x]`
472
+ are selected; type one or more row numbers, such as `1 3 8`, to toggle sources
473
+ on or off, then press Enter with no input to accept the current selection.
474
+ Claude SDK jobs are shown as a separate opt-in source because batch SDK traffic
475
+ can exceed interactive sessions. The selected sources are saved in config and
476
+ used by later `agentlog import --source all` runs unless `--sources` is provided
383
477
  explicitly.
384
478
 
385
479
  Default init sources:
@@ -390,7 +484,7 @@ Default init sources:
390
484
  - Claude Code Desktop metadata and Claude Workspace/local-agent sessions from
391
485
  the Claude app data, shown as separate toggles
392
486
  - Gemini CLI saved chats/checkpoints under `~/.gemini/tmp`, plus session/export JSONL stores with tool, usage, and checkpoint metadata
393
- - Antigravity task/plan/walkthrough artifacts under `~/.gemini/antigravity/brain`
487
+ - Antigravity task/plan/walkthrough artifacts under `~/.gemini/antigravity/brain`, plus partial trajectory summaries from Antigravity app state when no readable artifacts exist
394
488
  - Devin for Terminal sessions from `~/.local/share/devin/cli/sessions.db`
395
489
  - Cursor chats from older workspace `state.vscdb` SQLite stores and global
396
490
  `cursorDiskKV` Composer/Agent rows, including `aiService` prompt/generation
@@ -408,9 +502,13 @@ standard Claude Code transcript, so agentlog imports the transcript when it exis
408
502
  and only imports Claude Workspace sessions that contain actual prompt
409
503
  content.
410
504
 
411
- Windsurf import is disabled for now. Current Cascade transcripts are encrypted
412
- binary stores, so agentlog can detect that a session exists but cannot archive
413
- readable conversation text from it yet.
505
+ Windsurf local cache scanning is disabled for now. Current Cascade transcripts
506
+ are encrypted binary stores, so agentlog can detect that a session exists but
507
+ cannot archive readable conversation text from that cache. Use Windsurf's
508
+ "Download trajectory" Markdown export with `agentlog import windsurf <path>` to
509
+ archive readable Cascade output. If you bulk-export multiple trajectories to a
510
+ folder, import the folder directly, for example
511
+ `agentlog import windsurf ~/windsurf-cascade-export`.
414
512
 
415
513
  For the full source-by-source implementation map, see
416
514
  [History Source Handling](docs/history-source-handling.md).
@@ -447,6 +545,6 @@ agentlog import --source cline --since all
447
545
  agentlog import --source opencode --since all
448
546
  agentlog import --source aider --since all
449
547
  agentlog import --source claude-sdk --since all
450
- agentlog accounts list
451
- agentlog accounts rename claude-web you --display-name "Personal Claude"
548
+ agentlog import accounts list
549
+ agentlog import accounts rename claude-web you --display-name "Personal Claude"
452
550
  ```
package/agentlog-spec.md CHANGED
@@ -1,6 +1,6 @@
1
1
  # agentlog — spec v0.2
2
2
 
3
- A weekend-buildable archive and recall layer for agent coding sessions across Codex, ChatGPT exports, Claude, Gemini, Antigravity, Devin, and Cursor. Local-first, optionally cloud-backed via any S3-compatible storage. Web chats from ChatGPT and Claude.ai are importable via their official export flows. Windsurf is disabled until Cascade exposes a readable local transcript path.
3
+ A weekend-buildable archive and recall layer for agent coding sessions across Codex, ChatGPT exports, Claude, Gemini, Antigravity, Devin, Cursor, and Windsurf trajectory exports. Local-first, optionally cloud-backed via any S3-compatible storage. Web chats from ChatGPT and Claude.ai are importable via their official export flows. Windsurf's encrypted local Cascade cache remains disabled, but downloaded trajectory Markdown is importable.
4
4
 
5
5
  ## What it does
6
6
 
@@ -78,18 +78,20 @@ Three layers, separable, in priority order:
78
78
 
79
79
  ## Auto-start at login
80
80
 
81
- `init` offers to install a platform-native login agent. Default: yes, with explicit opt-out.
81
+ `init` offers to install one platform-native login item for the local watcher. Default: yes, with explicit opt-out.
82
82
 
83
83
  **Prompt during init:**
84
84
 
85
85
  ```
86
- agentlog can start automatically when you log in.
86
+ Background Watcher
87
87
 
88
- This runs a small background service (~150MB RAM) that captures
89
- your agent conversations as they happen. You can stop it anytime
90
- with `agentlog stop` or remove auto-start with `agentlog uninstall`.
88
+ The supervisor is agentlog's local watcher: it imports new history,
89
+ refreshes indexes, and runs scheduled cloud sync.
90
+ Leave this checked to install one login item. Uncheck it for manual-only mode.
91
91
 
92
- Start agentlog automatically at login? [Y/n]
92
+ 1 [x] Start watcher at login
93
+ installs one user-level login item; unchecked means no continuous
94
+ watching until you run agentlog watcher start
93
95
  ```
94
96
 
95
97
  **Per-platform implementation:**
@@ -98,14 +100,14 @@ Start agentlog automatically at login? [Y/n]
98
100
  - **Linux:** systemd user unit at `~/.config/systemd/user/agentlog.service`. `Type=simple`, `Restart=on-failure`, `RestartSec=5`. Enabled with `systemctl --user enable --now`. Init detects whether `loginctl enable-linger` is needed and prompts separately: "Keep agentlog running when you're logged out? [y/N]" — default no.
99
101
  - **Windows:** Scheduled Task triggered at logon (`schtasks /create /tn "agentlog" /tr ... /sc onlogon`). Service-based install is a v1 enhancement.
100
102
 
101
- **Critical detail:** the launch agent runs `agentlog start --foreground`, not `agentlog start`. Foreground mode keeps the OS supervisor (launchd/systemd/Task Scheduler) as the parent — detaching breaks process tracking and crash restart.
103
+ **Critical detail:** the launch agent runs `agentlog watcher start --foreground`, not `agentlog watcher start`. Foreground mode keeps the OS supervisor (launchd/systemd/Task Scheduler) as the parent — detaching breaks process tracking and crash restart.
102
104
 
103
105
  **Lifecycle commands:**
104
106
 
105
107
  ```
106
- agentlog autostart enable # writes the launch agent/unit/task
107
- agentlog autostart disable # removes auto-start, keeps agentlog installed
108
- agentlog autostart status # shows current state
108
+ agentlog watcher login enable # writes the launch agent/unit/task
109
+ agentlog watcher login disable # removes auto-start, keeps agentlog installed
110
+ agentlog watcher login status # shows current state
109
111
  agentlog uninstall [--keep-data]
110
112
  ```
111
113
 
@@ -175,7 +177,7 @@ every source type. After release, when parser output changes for the same raw
175
177
  input, the source-type version must be bumped in the same change so stale
176
178
  archives can be replaced.
177
179
 
178
- **Migration:** `agentlog migrate --to <backend>` records the remote target; `agentlog sync` uploads the same markdown-primary object layout to any S3-compatible target under `agentlog/devices/<device-name>/...`. Local→R2 is a one-shot upload and then an incremental supervisor upload. Sync does not delete remote objects. Receive-only and two-way sync should read other device namespaces and merge normalized archive metadata without interpreting absence on one device as a delete. `agentlog snapshot` writes redundant point-in-time copies under `agentlog/snapshots/<timestamp>/<device-name>/...`.
180
+ **Migration:** `agentlog sync configure` records the remote target through an interactive picker in terminals, while non-interactive scripts can still pass `--target`, `--endpoint`, and credentials. Choosing an existing remote opens useful next actions instead of only echoing the current config. `agentlog sync` uploads the same markdown-primary object layout to any S3-compatible target under `agentlog/devices/<device-name>/...`; terminal runs pick a remote, preview the upload-only plan, and confirm before writing. Local→R2 is a one-shot upload and then an incremental supervisor upload. Normal sync does not delete remote objects. `agentlog sync replace` is the explicit repair path: it previews the selected remote, requires typed confirmation, deletes only the current device namespace, and then uploads the current local archive. `agentlog sync wipe` is delete-only, asks for remote and scope, previews the chosen target and prefix, requires typed confirmation, and is followed by `agentlog sync` when the user wants to rebuild a remote copy from local state. Wipe scopes include the current device namespace, one snapshot, all snapshots, the configured prefix, and the bucket/root. Receive-only and two-way sync should read other device namespaces and merge normalized archive metadata without interpreting absence on one device as a delete. `agentlog sync snapshot` lists existing snapshots, asks for a name, confirms, and writes redundant point-in-time copies under `agentlog/snapshots/<timestamp>/<device-name>/...`.
179
181
 
180
182
  ## Repo keying
181
183
 
@@ -219,7 +221,7 @@ allowlist_repos:
219
221
 
220
222
  Each session gets a `redaction_summary` span: counts by category, no content. Users can audit "did this leak anything" without seeing what leaked.
221
223
 
222
- `agentlog reveal <session-id>` re-renders un-redacted from local cache. Local-only — never works on remote/team archives.
224
+ `agentlog show <session-id> --unredacted` re-renders un-redacted from local cache. Local-only — never works on remote/team archives.
223
225
 
224
226
  **Honesty about limits:** pattern-based redaction catches credentials. It does not catch personal/sensitive content (medical, legal, financial conversations). This matters especially for web chat imports, which is why those default to local-only storage.
225
227
 
@@ -370,9 +372,9 @@ Web chats are excluded unless `include_web_chats=true`.
370
372
  **Adding to agents:**
371
373
 
372
374
  ```
373
- agentlog recall add-to claude # writes ~/.claude/mcp.json, /commands/recall.md, and /skills/agentlog-recall/SKILL.md
374
- agentlog recall add-to cursor # writes ~/.cursor/mcp.json
375
- agentlog recall add-to codex # writes ~/.codex/config.toml
375
+ agentlog integrations add-to claude # writes ~/.claude/mcp.json, /commands/recall.md, and /skills/agentlog-recall/SKILL.md
376
+ agentlog integrations add-to cursor # writes ~/.cursor/mcp.json
377
+ agentlog integrations add-to codex # writes ~/.codex/config.toml
376
378
  ```
377
379
 
378
380
  Generated recall commands and skills should let the agent choose the first
@@ -389,13 +391,13 @@ fragments.
389
391
 
390
392
  ## History viewer
391
393
 
392
- v0 ships a dependency-free local viewer behind `agentlog history --web`. It lists sessions in a repo tree sorted by last updated time, pages large folders with a load-more control, searches the same event-first recall index, filters by repo/provider/date, and opens full conversations through the CLI API. The static viewer follows shadcn/ui-style tokens and compact button/input/select/sidebar patterns without requiring a frontend build step. Stable `path:<hash>` keys remain valid archive identifiers for folders without git identity, but the viewer displays the local folder path. The transcript pane defaults to readable chat bubbles for user, assistant, system, and tool messages, with a markdown toggle for the canonical archive file. Tool rendering reads canonical events or normalized metadata first, uses category/icon/target fields for consistent Bash/edit/read/search/web/task/skill/MCP cards, and uses raw text patterns only for legacy archives.
394
+ v0 ships a dependency-free local viewer behind `agentlog web`. It lists sessions in a repo tree sorted by last updated time, pages large folders with a load-more control, searches the same event-first recall index, filters by repo/provider/date, and opens full conversations through the CLI API. The static viewer follows shadcn/ui-style tokens and compact button/input/select/sidebar patterns without requiring a frontend build step. Stable `path:<hash>` keys remain valid archive identifiers for folders without git identity, but the viewer displays the local folder path. The transcript pane defaults to readable chat bubbles for user, assistant, system, and tool messages, with a markdown toggle for the canonical archive file. Tool rendering reads canonical events or normalized metadata first, uses category/icon/target fields for consistent Bash/edit/read/search/web/task/skill/MCP cards, and uses raw text patterns only for legacy archives.
393
395
 
394
396
  **Commands:**
395
397
 
396
398
  ```
397
399
  agentlog history # native app pointed at archive
398
- agentlog history --web # web UI on localhost:7824
400
+ agentlog web # web UI on localhost:7824
399
401
  agentlog history "query" --provider codex-cli
400
402
  agentlog history --repo github.com/org/repo
401
403
  agentlog history --since 7d
@@ -416,19 +418,22 @@ Complete user-facing commands:
416
418
  ```
417
419
  # Setup and lifecycle
418
420
  agentlog init [--storage local|r2|s3|custom] [--remote URL]
419
- agentlog start [--foreground]
420
- agentlog stop
421
+ agentlog watcher start [--foreground]
422
+ agentlog watcher stop
423
+ agentlog watcher logs [--follow]
424
+ agentlog watcher login <enable|disable|status>
421
425
  agentlog status
422
- agentlog logs [--follow]
423
- agentlog config <get|set> <key> [value]
424
- agentlog migrate --to <backend>
425
- agentlog sync [--endpoint <url>] [--bucket <name>] [--access-key-id <id>] [--secret-access-key <key>] [--prefix agentlog]
426
- agentlog autostart <enable|disable|status>
426
+ agentlog config <show|path|get|set|setup|sources> [args]
427
+ agentlog sync configure
428
+ agentlog sync [--endpoint <url>] [--bucket <name>] [--access-key-id <id>] [--secret-access-key <key>] [--prefix agentlog] [--yes|--dry-run]
429
+ agentlog sync snapshot [--name <label>] [--yes|--dry-run]
430
+ agentlog sync replace
431
+ agentlog sync wipe [--scope device|snapshot|snapshots|prefix|bucket] [--snapshot-name <name>] [--yes|--dry-run]
427
432
  agentlog doctor [--json]
428
433
  agentlog uninstall [--keep-data]
429
434
 
430
435
  # Capture management
431
- agentlog reveal <session-id>
436
+ agentlog show <session-id> --unredacted
432
437
  agentlog redact reapply
433
438
  agentlog index <pause|resume|status>
434
439
 
@@ -439,16 +444,18 @@ agentlog import chatgpt --file <path> [--scope local|team]
439
444
  agentlog import status
440
445
 
441
446
  # Recall
442
- agentlog recall start
443
- agentlog recall add-to <codex|claude|gemini|antigravity|cursor>
444
- agentlog recall reindex
447
+ agentlog mcp serve
448
+ agentlog integrations add-to <codex|claude|gemini|antigravity|cursor>
449
+ agentlog integrations recall [target]
450
+ agentlog index rebuild
445
451
 
446
452
  # Viewing
447
- agentlog history [query] [--web] [--repo <repo>] [--provider <provider>] [--since <duration>] [--include-web-chats]
453
+ agentlog history [query] [--repo <repo>] [--provider <provider>] [--since <duration>] [--include-web-chats]
454
+ agentlog web [--port <port>] [--no-open]
448
455
  agentlog show <session-id> [--json|--path|--open]
449
456
 
450
457
  # Team mode
451
- agentlog server
458
+ agentlog mcp serve
452
459
  ```
453
460
 
454
461
  ## Setup flows
@@ -457,11 +464,11 @@ agentlog server
457
464
 
458
465
  ```
459
466
  brew install agentlog
460
- agentlog init # picks local storage, prompts auto-start
461
- # → "Start agentlog automatically at login? [Y/n]"
467
+ agentlog init # picks local storage, prompts for the login watcher
468
+ # → "Start watcher at login"
462
469
  # → scans for existing history
463
470
  # → "Import last 30 days? [Y/n]"
464
- # → writes launch agent, starts supervisor
471
+ # → if checked, writes launch agent and starts supervisor
465
472
  # → import runs in background
466
473
  ```
467
474
 
@@ -510,7 +517,7 @@ Companion deployment modules: `agentlog/deploy-aws` (ECS + ALB + S3), `agentlog/
510
517
  Codified because they shape every other decision:
511
518
 
512
519
  1. **No phone-home telemetry.** agentlog itself ships zero usage analytics anywhere. Any future opt-in metrics live on a separate channel.
513
- 2. **No filesystem scanning.** Only specific known paths: `~/.codex/`, `~/.claude/`, `~/.gemini/`, `~/.local/share/devin/cli/sessions.db`, Cursor's storage, `~/.agentlog/`, plus user-specified import file paths. Windsurf paths are excluded while Cascade transcripts remain encrypted.
520
+ 2. **No filesystem scanning.** Only specific known paths: `~/.codex/`, `~/.claude/`, `~/.gemini/`, `~/.local/share/devin/cli/sessions.db`, Cursor's storage, `~/.agentlog/`, plus user-specified import file paths. Windsurf encrypted cache paths are excluded while Cascade transcripts remain encrypted; user-selected downloaded trajectory Markdown files are allowed.
514
521
  3. **No process inspection beyond `pgrep`.** We check whether Cursor is running. We don't introspect what it's doing.
515
522
  4. **Redaction at ingest, not query.** Pattern-matching credentials never land in storage in the first place.
516
523
  5. **Reveal is local-only.** Un-redacted content is never reconstructible from team/remote archives.
@@ -1,5 +1,7 @@
1
1
  #!/usr/bin/env node
2
2
 
3
+ process.title = "agentlog-recall";
4
+
3
5
  const { runMcpServer } = require("../src/mcp");
4
6
 
5
7
  runMcpServer().catch((error) => {
package/bin/agentlog.js CHANGED
@@ -1,5 +1,7 @@
1
1
  #!/usr/bin/env node
2
2
 
3
+ process.title = agentlogProcessTitle(process.argv.slice(2));
4
+
3
5
  const { main } = require("../src/cli");
4
6
 
5
7
  main(process.argv.slice(2)).catch((error) => {
@@ -12,3 +14,13 @@ function formatCliError(error) {
12
14
  const message = error?.message || String(error);
13
15
  return /^Error:/i.test(message) ? message : `Error: ${message}`;
14
16
  }
17
+
18
+ function agentlogProcessTitle(argv) {
19
+ const command = argv[0] || "cli";
20
+ if (command === "start" && argv.includes("--foreground")) return "agentlog-supervisor";
21
+ if (command === "import") return "agentlog-import";
22
+ if (command === "index") return "agentlog-index";
23
+ if (command === "sync") return "agentlog-sync";
24
+ if (command === "recall" || command === "server") return "agentlog-recall";
25
+ return `agentlog-${String(command).replace(/[^A-Za-z0-9._-]+/g, "-").slice(0, 32) || "cli"}`;
26
+ }