mirror of
https://github.com/openclaw/openclaw.git
synced 2026-06-01 12:03:52 +00:00
* refactor: extract agent core package Introduce packages/agent-core as the OpenClaw-owned home for reusable agent loop, harness, session, prompt, and runtime dependency contracts. * refactor: extract shared llm runtime Move provider model registries, stream wrappers, OAuth helpers, and LLM utilities into src/llm with plugin-sdk barrels instead of depending on the old embedded runtime layout. * refactor: remove pi runtime internals Rename remaining Pi-shaped agent surfaces to OpenClaw agent runtime names, delete obsolete Pi docs and package graph checks, and add the third-party notice for incorporated code. * refactor: tighten agent session runtime Make agent-core/runtime dependencies explicit, consolidate compaction and session transcript helpers, and move model/session helpers behind OpenClaw-owned contracts. * refactor: remove static model and pi auth paths Drop static model catalogs and Pi auth bridges, move model/provider facts to manifest-owned runtime contracts, and harden internal embedded-agent utilities. * refactor: remove legacy provider compat paths * docs: remove agent parity notes * fix: skip provider wildcard metadata parsing * refactor: share session extension sdk loading * refactor: inline acpx proxy error formatter * refactor: fold edit recovery into edit tool * fix: accept extension batch separator * test: align startup provider plugin expectations * fix: restore provider-scoped release discovery * test: align static asset packaging expectations * fix: run static provider catalogs during scoped discovery * fix: add provider entry catalogs for scoped live discovery * fix: load lightweight provider catalog entries * fix: refresh provider-scoped plugin metadata * fix: keep provider catalog entries on release live path * fix: keep static manifest models in release live checks * fix: harden release model discovery * fix: reduce OpenAI live cache probe reasoning * fix: disable OpenAI cache probe reasoning * ci: extend OpenAI gateway live timeout * fix: extend live gateway model budget * fix: stabilize release validation regressions * fix: honor provider aliases in model rows * fix: stabilize release validation lanes * fix: stabilize release memory qa * ci: stabilize release validation lanes * ci: prefer ipv4 for live docker node calls * fix: restore shared tool-call stream wrapper * ci: remove legacy pi test shard alias * fix: clean up embedded agent test drift * fix: stabilize runtime alias status * fix: clean up embedded agent ci drift * fix: restore release ci invariants * fix: clean up post-rebase runtime drift * fix: restore release ci checks * fix: restore release ci after rebase * fix: remove stale pi runtime path * test: align compaction runtime expectations * test: update plugin prerelease expectations * fix: handle claude live tool approvals * fix: stabilize release validation gates * fix: finish agent runtime import * test: finish post-rebase agent runtime mocks * fix: keep codex compaction native * fix: stabilize codex app-server hook tests * test: isolate codex diagnostic active run * test: remove codex diagnostic completion race # Conflicts: # extensions/codex/src/app-server/run-attempt.test.ts * ci: fix full release manifest performance run id * refactor: narrow llm plugin sdk boundary * chore: drop generated google boundary stamps * fix: repair rebase fallout * fix: clean up rebased runtime references * fix: decode codex jwt payloads as base64url * fix: preserve shipped pi runtime alias * fix: add scoped sdk virtual modules * fix: decode llm codex oauth jwt as base64url * fix: avoid stale vertex adc negative cache * fix: harden tool arg decoding and codeql path * fix: keep vertex adc negative checks live * refactor: consolidate codex jwt and edit helpers * fix: await codex oauth node runtime imports * fix: preserve sdk tool and notice contracts * fix: preserve shipped compat config boundaries * fix: align codex oauth callback host * fix: terminate agent-core loop streams on failure * fix: keep codex oauth callback alive during fallback * ci: include session tools in critical codeql scans * fix: keep Cloudflare Anthropic provider auth header * docs: redirect legacy pi runtime pages * fix: honor bundled web provider compat discovery * fix: protect session output spill files * fix: keep legacy agent dir env blocked * fix: contain auto-discovered skill symlinks * fix: harden agent core sdk proxy surfaces * fix: restore approval reaction sdk compat * fix: keep live docker runs bounded * fix: keep codex oauth redirect host aligned * fix: resolve post-rebase agent runtime drift * fix: redact anthropic oauth parse failures * fix: preserve responses strict tool shaping * fix: repair agent runtime rebase cleanup * docs: redirect retired parity pages * fix: bound auto-discovered resources to roots * fix: repair post-rebase agent test drift * fix: preserve bundled provider allowlist migration * fix: preserve manifest-owned provider aliases * fix: declare photon image dependency * fix: keep provider headers out of proxy body * fix: preserve shipped env aliases * fix: refresh control ui i18n generated state * fix: quote read fallback paths * fix: preview edits through configured backend * test: satisfy core test typecheck * fix: preserve ZAI usage auth fallback * test: repair codex diagnostic test * fix: repair agent runtime rebase drift * test: finish embedded runner import rename * fix: repair agent runtime rebase integrations * test: align compaction oauth fallback expectations * fix: allow sdk-auth session models * fix: update doctor tool schema import * fix: preserve bedrock plugin region * fix: stream harmony-like prose immediately * ci: include session runtime in codeql shards * fix: repair latest rebase integrations * fix: honor explicit codex websocket transport * fix: keep openai-compatible credentials provider-scoped * fix: refresh sdk api baseline after rebase * fix: route cli runtime aliases through openclaw harness * test: rename stale harness mock expectation * test: rename embedded agent overflow calls * test: clean embedded auth test wording * test: use openclaw stream types in deepinfra cache test * fix: refresh sdk api baseline on latest main * fix: honor bundled discovery compat allowlists * fix: refresh sdk api baseline after latest rebase * fix: remove stale rebase imports * test: rename stale model catalog mock * test: mock renamed doctor runtime modules * fix: map canonical kimi env auth * fix: use internal model registry in bench script * fix: migrate deepinfra provider catalog entry * fix: enforce builtin tool suppression * fix: route compaction auth and proxy payloads safely * refactor: prune unused llm registry leftovers * test: update codex hooks session import * test: fix model picker ci coverage * test: align model picker auth mock types
230 lines
7.8 KiB
Markdown
230 lines
7.8 KiB
Markdown
---
|
|
summary: "Export redacted trajectory bundles for debugging an OpenClaw agent session"
|
|
read_when:
|
|
- Debugging why an agent answered, failed, or called tools a certain way
|
|
- Exporting a support bundle for an OpenClaw session
|
|
- Investigating prompt context, tool calls, runtime errors, or usage metadata
|
|
- Disabling or relocating trajectory capture
|
|
title: "Trajectory bundles"
|
|
---
|
|
|
|
Trajectory capture is OpenClaw's per-session flight recorder. It records a
|
|
structured timeline for each agent run, then `/export-trajectory` packages the
|
|
current session into a redacted support bundle.
|
|
|
|
Use it when you need to answer questions like:
|
|
|
|
- What prompt, system prompt, and tools were sent to the model?
|
|
- Which transcript messages and tool calls led to this answer?
|
|
- Did the run time out, abort, compact, or hit a provider error?
|
|
- Which model, plugins, skills, and runtime settings were active?
|
|
- What usage and prompt-cache metadata did the provider return?
|
|
|
|
If you are filing a broad support report for a live Gateway issue, start with
|
|
[`/diagnostics`](/gateway/diagnostics#chat-command). Diagnostics collects the
|
|
sanitized Gateway bundle and, for OpenAI Codex harness sessions, can also send
|
|
Codex feedback to OpenAI servers after approval. Use `/export-trajectory` when
|
|
you specifically need the detailed per-session prompt, tool, and transcript
|
|
timeline.
|
|
|
|
## Quick start
|
|
|
|
Send this in the active session:
|
|
|
|
```text
|
|
/export-trajectory
|
|
```
|
|
|
|
Alias:
|
|
|
|
```text
|
|
/trajectory
|
|
```
|
|
|
|
OpenClaw writes the bundle under the workspace:
|
|
|
|
```text
|
|
.openclaw/trajectory-exports/openclaw-trajectory-<session>-<timestamp>/
|
|
```
|
|
|
|
You can choose a relative output directory name:
|
|
|
|
```text
|
|
/export-trajectory bug-1234
|
|
```
|
|
|
|
The custom path is resolved inside `.openclaw/trajectory-exports/`. Absolute
|
|
paths and `~` paths are rejected.
|
|
|
|
Trajectory bundles can contain prompts, model messages, tool schemas, tool
|
|
results, runtime events, and local paths. The chat slash command therefore runs
|
|
through exec approval every time. Approve the export once when you intend to
|
|
create the bundle; do not use allow-all. In group chats, OpenClaw sends the
|
|
approval prompt and export result to the owner privately instead of posting the
|
|
trajectory details back to the shared room.
|
|
|
|
For local inspection or support workflows, you can also run the approved command
|
|
path directly:
|
|
|
|
```bash
|
|
openclaw sessions export-trajectory --session-key "agent:main:telegram:direct:123" --workspace .
|
|
```
|
|
|
|
## Access
|
|
|
|
Trajectory export is an owner command. The sender must pass the normal command
|
|
authorization checks and owner checks for the channel.
|
|
|
|
## What gets recorded
|
|
|
|
Trajectory capture is on by default for OpenClaw agent runs.
|
|
|
|
Runtime events include:
|
|
|
|
- `session.started`
|
|
- `trace.metadata`
|
|
- `context.compiled`
|
|
- `prompt.submitted`
|
|
- `model.fallback_step`, including the source model, next model, failure reason/detail, chain position, and whether fallback advanced, succeeded, or exhausted the chain
|
|
- `model.completed`
|
|
- `trace.artifacts`
|
|
- `session.ended`
|
|
|
|
Transcript events are also reconstructed from the active session branch:
|
|
|
|
- user messages
|
|
- assistant messages
|
|
- tool calls
|
|
- tool results
|
|
- compactions
|
|
- model changes
|
|
- labels and custom session entries
|
|
|
|
Events are written as JSON Lines with this schema marker:
|
|
|
|
```json
|
|
{
|
|
"traceSchema": "openclaw-trajectory",
|
|
"schemaVersion": 1
|
|
}
|
|
```
|
|
|
|
## Bundle files
|
|
|
|
An exported bundle can contain:
|
|
|
|
| File | Contents |
|
|
| --------------------- | ---------------------------------------------------------------------------------------------- |
|
|
| `manifest.json` | Bundle schema, source files, event counts, and generated file list |
|
|
| `events.jsonl` | Ordered runtime and transcript timeline |
|
|
| `session-branch.json` | Redacted active transcript branch and session header |
|
|
| `metadata.json` | OpenClaw version, OS/runtime, model, config snapshot, plugins, skills, and prompt metadata |
|
|
| `artifacts.json` | Final status, errors, usage, prompt cache, compaction count, assistant text, and tool metadata |
|
|
| `prompts.json` | Submitted prompts and selected prompt-building details |
|
|
| `system-prompt.txt` | Latest compiled system prompt, when captured |
|
|
| `tools.json` | Tool definitions sent to the model, when captured |
|
|
|
|
`manifest.json` lists the files present in that bundle. Some files are omitted
|
|
when the session did not capture the corresponding runtime data.
|
|
|
|
## Capture location
|
|
|
|
By default, runtime trajectory events are written beside the session file:
|
|
|
|
```text
|
|
<session>.trajectory.jsonl
|
|
```
|
|
|
|
OpenClaw also writes a best-effort pointer file beside the session:
|
|
|
|
```text
|
|
<session>.trajectory-path.json
|
|
```
|
|
|
|
Set `OPENCLAW_TRAJECTORY_DIR` to store runtime trajectory sidecars in a
|
|
dedicated directory:
|
|
|
|
```bash
|
|
export OPENCLAW_TRAJECTORY_DIR=/var/lib/openclaw/trajectories
|
|
```
|
|
|
|
When this variable is set, OpenClaw writes one JSONL file per session id in that
|
|
directory.
|
|
|
|
Session maintenance removes trajectory sidecars when their owning session entry
|
|
is pruned, capped, or evicted by the sessions disk budget. Runtime files outside
|
|
the sessions directory are removed only when the pointer target still proves it
|
|
belongs to that session.
|
|
|
|
## Disable capture
|
|
|
|
Set `OPENCLAW_TRAJECTORY=0` before starting OpenClaw:
|
|
|
|
```bash
|
|
export OPENCLAW_TRAJECTORY=0
|
|
```
|
|
|
|
This disables runtime trajectory capture. `/export-trajectory` can still export
|
|
the transcript branch, but runtime-only files such as compiled context,
|
|
provider artifacts, and prompt metadata may be missing.
|
|
|
|
## Tune flush timeout
|
|
|
|
OpenClaw flushes runtime trajectory sidecars during agent cleanup. The default
|
|
cleanup timeout is 10,000 ms. On slow disks or large stores, set
|
|
`OPENCLAW_TRAJECTORY_FLUSH_TIMEOUT_MS` before starting OpenClaw:
|
|
|
|
```bash
|
|
export OPENCLAW_TRAJECTORY_FLUSH_TIMEOUT_MS=30000
|
|
```
|
|
|
|
This controls when OpenClaw logs an `openclaw-trajectory-flush` timeout and continues.
|
|
It does not change the trajectory size caps. To tune all agent cleanup steps
|
|
that do not pass an explicit timeout, set `OPENCLAW_AGENT_CLEANUP_TIMEOUT_MS`.
|
|
|
|
## Privacy and limits
|
|
|
|
Trajectory bundles are designed for support and debugging, not public posting.
|
|
OpenClaw redacts sensitive values before writing export files:
|
|
|
|
- credentials and known secret-like payload fields
|
|
- image data
|
|
- local state paths
|
|
- workspace paths, replaced with `$WORKSPACE_DIR`
|
|
- home directory paths, where detected
|
|
|
|
The exporter also bounds input size:
|
|
|
|
- runtime sidecar files: live capture stops at 10 MiB and records a truncation event when space remains; export accepts existing runtime sidecars up to 50 MiB
|
|
- session files: 50 MiB
|
|
- runtime events: 200,000
|
|
- total exported events: 250,000
|
|
- individual runtime event lines are truncated above 256 KiB
|
|
|
|
Review bundles before sharing them outside your team. Redaction is best-effort
|
|
and cannot know every application-specific secret.
|
|
|
|
## Troubleshooting
|
|
|
|
If the export has no runtime events:
|
|
|
|
- confirm OpenClaw was started without `OPENCLAW_TRAJECTORY=0`
|
|
- check whether `OPENCLAW_TRAJECTORY_DIR` points to a writable directory
|
|
- run another message in the session, then export again
|
|
- inspect `manifest.json` for `runtimeEventCount`
|
|
|
|
If the command rejects the output path:
|
|
|
|
- use a relative name like `bug-1234`
|
|
- do not pass `/tmp/...` or `~/...`
|
|
- keep the export inside `.openclaw/trajectory-exports/`
|
|
|
|
If the export fails with a size error, the session or sidecar exceeded the
|
|
export safety limits. Start a new session or export a smaller reproduction.
|
|
|
|
## Related
|
|
|
|
- [Diffs](/tools/diffs)
|
|
- [Session management](/concepts/session)
|
|
- [Exec tool](/tools/exec)
|