agentel 0.2.0 → 0.2.2
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 +161 -63
- package/agentlog-spec.md +42 -35
- package/bin/agentlog-recall.js +2 -0
- package/bin/agentlog.js +12 -0
- package/docs/code-reference.md +120 -34
- package/docs/history-source-handling.md +236 -81
- package/docs/release.md +8 -8
- package/package.json +5 -4
- package/src/archive.js +278 -20
- package/src/cli.js +3457 -511
- package/src/config.js +42 -1
- package/src/doctor.js +167 -10
- package/src/importers/gemini.js +369 -7
- package/src/importers.js +1837 -135
- package/src/mcp.js +4 -1
- package/src/parser-versions.js +37 -22
- package/src/paths.js +4 -2
- package/src/redaction.js +140 -17
- package/src/search.js +671 -52
- package/src/supervisor.js +206 -57
- package/src/sync.js +459 -12
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,
|
|
22
|
-
- local reset
|
|
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
|
|
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.
|
|
44
|
+
npm install -g brianlzhou/agentlog#v0.2.2
|
|
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
|
|
52
|
-
npx
|
|
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
|
|
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
|
|
128
|
-
agentlog
|
|
129
|
-
agentlog
|
|
130
|
-
agentlog
|
|
131
|
-
agentlog
|
|
132
|
-
agentlog
|
|
133
|
-
agentlog
|
|
134
|
-
agentlog
|
|
135
|
-
agentlog
|
|
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
|
-
`
|
|
139
|
-
`
|
|
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
|
-
`
|
|
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
|
|
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
|
|
201
|
-
agentlog
|
|
200
|
+
agentlog web
|
|
201
|
+
agentlog web --no-open
|
|
202
202
|
```
|
|
203
203
|
|
|
204
|
-
`agentlog
|
|
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.
|
|
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
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
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.
|
|
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
|
-
|
|
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
|
-
|
|
249
|
-
|
|
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
|
|
268
|
-
autosync cadence; the
|
|
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
|
-
|
|
288
|
-
|
|
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
|
|
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.
|
|
336
|
-
|
|
337
|
-
|
|
338
|
-
|
|
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.
|
|
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
|
|
371
|
-
recall commands or skills, then discover sources and
|
|
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.
|
|
380
|
-
are
|
|
381
|
-
|
|
382
|
-
|
|
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
|
|
412
|
-
binary stores, so agentlog can detect that a session exists but
|
|
413
|
-
readable conversation text from
|
|
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
|
|
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
|
|
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
|
-
|
|
86
|
+
Background Watcher
|
|
87
87
|
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
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
|
|
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
|
|
107
|
-
agentlog
|
|
108
|
-
agentlog
|
|
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
|
|
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
|
|
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
|
|
374
|
-
agentlog
|
|
375
|
-
agentlog
|
|
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
|
|
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
|
|
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
|
|
423
|
-
agentlog
|
|
424
|
-
agentlog
|
|
425
|
-
agentlog sync
|
|
426
|
-
agentlog
|
|
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
|
|
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
|
|
443
|
-
agentlog
|
|
444
|
-
agentlog recall
|
|
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] [--
|
|
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
|
|
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
|
|
461
|
-
# → "Start
|
|
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
|
|
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.
|
package/bin/agentlog-recall.js
CHANGED
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
|
+
}
|