Inspecting AI agent runs should not mean hunting through terminal tabs.
When Claude Code or Codex finishes, fails, or gets blocked, the useful question is not "Where did I leave that terminal?" The useful question is "What happened, what changed, what still needs review, and what should happen next?"
That is a different workflow from live monitoring. Monitoring tells you whether a run needs attention now. Inspection helps you reconstruct enough of the run to decide whether the result is trustworthy.
Junction is built around that inspection loop: local daemon, browser control surface, session state, terminal output, approvals, Git state, diffs, and pull request context in one place.
Why terminal hunting gets expensive
Terminals are good for direct control. They are weaker as a long-term review interface.
The problem shows up when you run more than one agent:
- one terminal has the active Claude Code session,
- another has a Codex investigation,
- a third has a test server,
- a fourth has a stale run from yesterday,
- and the actual diff is in a worktree you have not opened yet.
If the run completed cleanly, maybe that is fine. If it failed halfway through a refactor or asked for a risky approval while you were away, you need better evidence.
Inspection should answer:
- Which agent ran?
- Which machine and repository did it run on?
- What prompt or task started it?
- What did the agent do?
- What commands or tools mattered?
- What did it change?
- What approvals were requested?
- What failed, if anything?
- What review step is next?
Those answers should not require archaeology.
Session state comes first
Start with status, not logs.
The first useful classification is simple:
| State | What it means |
|---|---|
| Running | The agent is still working |
| Blocked | A human decision or input is needed |
| Failed | The run hit an error or could not continue |
| Finished | The run reached a stopping point |
| Reviewable | There is a diff, branch, or pull request path to inspect |
If you skip this step, you can waste time reading output from a run that is still active or reviewing a diff from a run that already reported failure.
Junction makes this easier because the daemon tracks local agent sessions and the web app surfaces their state. The control surface should make the next action obvious before you dive into details.
Output is evidence, not the final answer
Agent output is useful, but it is not enough.
A good final message can still hide a bad diff. A failed command can still leave a useful partial investigation. A confident explanation can still refer to files the agent never changed.
Use output to understand the story of the run:
- what the agent believed the task was,
- which files it inspected,
- which commands it ran,
- where it got stuck,
- and how it explains the result.
Then verify the story against Git state and tests.
Claude Code's command docs include debugging and diff-oriented commands, including /debug for session debug logging and /diff for inspecting changes inside Claude Code. Those provider-native tools are useful. Junction's role is to place the broader run context next to the rest of the local workflow, especially when you are coordinating more than one session or machine.
Logs matter when the handoff is unclear
Logs are most useful when something does not add up.
Examples:
- the agent says a command passed, but the final state looks wrong,
- the run failed and the final message is too vague,
- a permission request appeared without enough explanation,
- a terminal pane disappeared,
- or a teammate needs to understand what happened before taking over.
Codex also has local session artifacts and instruction discovery behavior worth understanding. OpenAI's AGENTS.md docs mention checking Codex logs or recent session files when auditing which instruction files were loaded. That is a good reminder: local agent runs leave operational traces, and those traces are useful when the summary is not enough.
Junction should reduce how often you need raw log spelunking. It should not pretend logs are useless. The best interface shows the important state first and leaves deeper inspection available when needed.
The diff is the accountability layer
For coding agents, the diff is where claims become concrete.
Inspect:
- files changed,
- added and removed behavior,
- tests added or updated,
- dependency or lockfile changes,
- generated files,
- configuration changes,
- and unexpected edits outside the requested scope.
If the task was "update setup copy" and the diff touches billing logic, the run needs review even if the final message sounds reasonable.
This is where Junction's Git and diff review surfaces matter. They let you compare the agent's story with the actual change before you approve the next step or move toward a pull request.
Approvals are part of the run history
Approval prompts are not temporary interruptions. They are part of the run's decision trail.
When you inspect a completed or failed run, ask:
- What did the agent ask to do?
- Why did it need permission?
- Was the request approved or denied?
- Did the agent stay within the approved scope afterward?
- Did a denied request produce a better follow-up plan?
This matters because an approval can explain why a run succeeded, failed, or changed direction. If you only inspect the final diff, you may miss the moment where the agent tried to cross a boundary.
A practical inspection workflow
Use this sequence when a run finishes or gets handed off:
- Check the status.
- Read the final message.
- Scan the key output around failures, approvals, and test commands.
- Inspect the changed files.
- Compare the diff against the original task.
- Check the branch or pull request path.
- Decide the next action: continue, redirect, stop, test again, or review on desktop.
That sequence is intentionally conservative. It prevents two common mistakes: trusting the final message without checking the diff, and diving into raw logs before you know what question you are trying to answer.
Example: failed test fix
Suppose Codex was asked to fix a failing route test.
A weak inspection says:
Codex said it fixed the test. Ship it.A better inspection says:
Status: finished.
Final summary: test assertion updated to use current featured post data.
Output: narrow test passed.
Diff: one test file changed, no production code changed.
Scope: matches the request.
Next step: include in PR with blog content batch.That gives a reviewer enough context to trust the shape of the change without rereading every token.
Example: suspicious docs update
Now suppose Claude Code was asked to update documentation copy.
Inspection finds:
- status is finished,
- final message claims only copy changed,
- diff includes a pricing data file,
- no test ran,
- and there was an approval request to edit plan limits.
That is not a clean docs update. The next action is not "merge." It is "stop and review on desktop" or "ask the agent to revert the unrelated pricing change," depending on your workflow.
The point is not that mobile or browser inspection replaces code review. It gives you enough structured evidence to decide what kind of review is needed.
What to inspect before opening a pull request
Before turning an agent run into a pull request, check:
- task summary,
- changed files,
- diff scope,
- tests run,
- unresolved failures,
- permission decisions,
- generated artifacts,
- branch name,
- and any follow-up the agent explicitly called out.
If the run came from Switchboard, also check that the Linear issue was actually satisfied. If it came from a manual chat, check that the final state still matches the prompt after any mid-run corrections.
Where Junction fits
Junction's value is not that it stores every detail forever or replaces provider-native logs. Its value is that it keeps the high-signal inspection surface close to the local agent run.
The daemon knows the local session. The browser shows the state. The Git and diff surfaces reveal the actual change. Notifications tell you when attention is needed. The CLI can still help when you want lower-level commands such as listing, inspecting, viewing logs, stopping, waiting, or sending prompts.
That combination makes inspection less dependent on memory and terminal archaeology.
Start with the Junction setup guide if you have not paired a daemon yet. For more open chats, more daemons, or Switchboard automation, compare pricing.