Install
openclaw skills install atifactThis skill should be used when the user asks to "extract agent trajectory", "convert HAR to trajectory", "get trajectory from session", "parse agent session", "convert Claude Code logs", "convert Copilot CLI logs", "extract ATIF", or needs to convert HAR files or JSONL session logs into ATIF trajectory JSON using the atifact CLI.
openclaw skills install atifactConvert agent session recordings (HAR files, Claude Code JSONL logs, Copilot CLI JSONL logs) into structured ATIF v1.6 trajectory JSON using the atifact CLI.
Verify the CLI is available:
command -v atifact
If not installed, install globally:
npm install -g atifact
| Format | File type | Description |
|---|---|---|
har | .har | HAR files with OpenAI (Chat Completions, Responses API) or Anthropic (Messages API) requests |
claude-code-jsonl | .jsonl | Claude Code CLI session logs |
copilot-cli-jsonl | .jsonl | Copilot CLI session logs |
Format is auto-detected from file contents (not extension). Use --format / -f to force a specific format when auto-detection fails.
The --output / -o option takes a prefix, not a filename. Output files are derived from the prefix:
<prefix>.trajectory.json<prefix>.trajectory.<name>.jsonDefault prefix is the input file path:
atifact session.har
# Writes: session.har.trajectory.json
atifact session.har -o out
# Writes: out.trajectory.json
# If subagents exist: out.trajectory.<name>.json
Use when auto-detection picks the wrong format for .jsonl files:
atifact session.jsonl -f claude-code-jsonl
atifact session.jsonl -f copilot-cli-jsonl
Use --json with --quiet to suppress diagnostics and get clean JSON on stdout. Output is a JSON array of all trajectories (main first, then subagents). No files are written.
atifact session.har --json --quiet
Combine with other tools:
atifact session.har --json --quiet | jq '.[0].steps | length'
| Option | Alias | Description |
|---|---|---|
<input-file> | Path to the input file (required) | |
--output | -o | Output path prefix. Main: <prefix>.trajectory.json, subagents: <prefix>.trajectory.<name>.json (default: input file path) |
--format | -f | Force input format: har, claude-code-jsonl, copilot-cli-jsonl |
--json | Write JSON array of all trajectories to stdout (no files written). First element is main, rest are subagents. | |
--quiet | -q | Suppress progress messages (stderr only) |
| Code | Meaning |
|---|---|
| 0 | Success |
| 1 | Runtime error (parse failure, I/O error) |
| 2 | Invalid usage (bad arguments, missing file) |
.jsonl files, determine the source (Claude Code or Copilot CLI) to use the correct --format if auto-detection fails.atifact with the input file. Use -o to set the output prefix (e.g., atifact /path/to/session.har -o /path/to/session). The main trajectory is written to <prefix>.trajectory.json.task tool calls produce separate trajectory files per subagent. The main trajectory references them via subagent_trajectory_ref with trajectory_path pointing to the sibling file.