GJC and OMO¶
cctrace collects GJC and OMO sessions by uploading their session files with the sync daemon. Neither agent is configured for OTEL, and neither gets a session hook.
Turn it on¶
Run the agent once so that its home directory exists (~/.gjc or ~/.omo), then run cctrace init. For each directory it finds, init asks:
gjc detected (~/.gjc found).
Enable gjc session sync? [Y/n]
Answering yes sets options.gjc_sync_enabled or options.omo_sync_enabled in the profile. Nothing is written into the agent's own configuration.
To turn either on after init:
$ cctrace config set options.gjc_sync_enabled true
$ cctrace config set options.omo_sync_enabled true
Setting CCTRACE_GJC_SYNC=true or CCTRACE_OMO_SYNC=true in the environment of the sync process has the same effect, regardless of the profile option.
Starting collection¶
Enabling the option does not start anything. The files are collected by whichever sync daemon runs for the profile:
- If you also use Claude Code with the same profile, the daemon started by its
SessionStarthook collects GJC and OMO too. - Otherwise start one yourself with
cctrace sync --daemonorcctrace sync --watch, or runcctrace syncperiodically.
The first pass skips content already on disk, so sessions from before you enabled the option are not uploaded.
Files read¶
Homes scanned: ~/.gjc plus each directory in options.gjc_dirs for GJC, and ~/.omo plus each directory in options.omo_dirs for OMO. Under each home, these files are read:
GJC agent/sessions/v2-*/*.jsonl session files
agent/sessions/v2-*/*/*.jsonl subagent transcripts
OMO sessions/--*--/*.jsonl
agent/sessions/--*--/*.jsonl
A configured directory that does not exist is skipped with a message in the log. cctrace sync --dry-run lists the homes a real sync would scan and how many session files each holds.
Sync progress is kept in ~/.cctrace/gjc-sync-state.json and ~/.cctrace/omo-sync-state.json (or the named profile's directory).