feat(logs): readable greppable per-agent transcript logs (agent-log.py)
The raw 'tmux pipe-pane' logs are TUI-escape soup (the 191MB builder log). agent-log.py renders Claude's own JSONL transcript into a clean one-event- per-line <agent>.clean.log — read-only on a file the agent writes anyway, so zero agent slowdown and zero extra tokens. Resolves each agent's transcript (disambiguating the shared project dir by kickoff signature; tracks restarts). 'follow-all' runs as the cc-ci-cleanlogs session, wired into launch.py start so it comes up with the loops. render/tail subcommands for ad-hoc use. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Opus 4.8
parent
027fdbd161
commit
c0852d2302
@@ -626,6 +626,17 @@ def start_watchdog():
|
||||
f"exec >>'{LOG_DIR}/watchdog.log' 2>&1; {env_prefix}python3 '{script}' watchdog"
|
||||
])
|
||||
|
||||
def start_cleanlogs():
|
||||
"""Maintain readable, greppable per-agent transcript logs (<agent>.clean.log) by tailing each
|
||||
session's JSONL — costs nothing on the agents (read-only on a file claude writes anyway)."""
|
||||
if session_alive("cc-ci-cleanlogs"):
|
||||
log("cleanlogs already running")
|
||||
return
|
||||
log("starting cleanlogs (per-agent <agent>.clean.log)")
|
||||
al = Path(__file__).resolve().parent / "agent-log.py"
|
||||
subprocess.run(["tmux", "new-session", "-d", "-s", "cc-ci-cleanlogs", "-c", PLAN_DIR,
|
||||
f"python3 '{al}' follow-all"])
|
||||
|
||||
# ── preflight ─────────────────────────────────────────────────────────────────
|
||||
|
||||
def preflight():
|
||||
@@ -686,6 +697,7 @@ def main():
|
||||
log(f"phases='{all_ids()}' (persisted to {_PHASES_FILE})")
|
||||
start_loops()
|
||||
start_watchdog()
|
||||
start_cleanlogs()
|
||||
log(f"started at phase {phase_id(cur_idx())}.")
|
||||
|
||||
elif cmd == "watchdog":
|
||||
|
||||
Reference in New Issue
Block a user