원클릭으로
save-trajectory
Save the current conversation as a trajectory JSON file in OpenAI chat completion format for analysis and fine-tuning
Codex 또는 Claude로 설치 이 Prompt를 복사해 Codex, Claude 또는 다른 어시스턴트에 붙여 넣으면 Skill 페이지를 검토하고 설치를 진행할 수 있습니다.
메뉴
Save the current conversation as a trajectory JSON file in OpenAI chat completion format for analysis and fine-tuning
Codex 또는 Claude로 설치 이 Prompt를 복사해 Codex, Claude 또는 다른 어시스턴트에 붙여 넣으면 Skill 페이지를 검토하고 설치를 진행할 수 있습니다.
SOC 직업 분류 기준
Convert a saved trajectory into a reusable agent skill (SKILL.md + supporting scripts) that future agents can invoke to skip rediscovered work. Use when a session captured a non-trivial workflow worth promoting from a free-text guideline to an executable skill.
Convert a saved trajectory into a reusable agent skill (SKILL.md + supporting scripts) that future agents can invoke to skip rediscovered work. Use when a session captured a non-trivial workflow worth promoting from a free-text guideline to an executable skill.
Convert a saved trajectory into a reusable agent skill (SKILL.md + supporting scripts) that future agents can invoke to skip rediscovered work. Use when a session captured a non-trivial workflow worth promoting from a free-text guideline to an executable skill.
Convert a saved trajectory into a reusable agent skill (SKILL.md + supporting scripts) that future agents can invoke to skip rediscovered work. Use when a session captured a non-trivial workflow worth promoting from a free-text guideline to an executable skill.
Mirror a just-saved native memory into the shared evolve store so it becomes shareable and auditable
Analyze saved trajectories and recall audit events offline to record whether recalled guidelines influenced completed sessions.
| name | save-trajectory |
| description | Save the current conversation as a trajectory JSON file in OpenAI chat completion format for analysis and fine-tuning |
| context | fork |
This skill saves the current session's conversation history as a JSON file in OpenAI chat completion format. The trajectory is saved to .evolve/trajectories/ in the project root. This enables trajectory analysis, fine-tuning data collection, and session review.
Review all messages in the current conversation from start to finish. For each message, identify its type:
Convert each message to the appropriate format:
User text message:
{"role": "user", "content": "the user's message text"}
Assistant text response (no thinking):
{"role": "assistant", "content": "the assistant's response text"}
Assistant text response (with thinking):
{"role": "assistant", "content": "the assistant's response text", "thinking": "the thinking/reasoning text"}
Assistant tool call (no visible text):
{
"role": "assistant",
"content": null,
"tool_calls": [
{
"id": "tool_call_id_here",
"type": "function",
"function": {
"name": "ToolName",
"arguments": "{\"param\": \"value\"}"
}
}
]
}
Assistant tool call with text:
{
"role": "assistant",
"content": "text before/after the tool call",
"tool_calls": [
{
"id": "tool_call_id_here",
"type": "function",
"function": {
"name": "ToolName",
"arguments": "{\"param\": \"value\"}"
}
}
]
}
Tool result:
{"role": "tool", "tool_call_id": "tool_call_id_here", "content": "the tool output text"}
json.dumps() on the arguments object.call_001, call_002, etc.tool_calls array, followed by separate tool result messages for each.content and thinking fields.Strip <system-reminder>...</system-reminder> tags and their contents from all message content. Use a non-greedy multiline match (e.g., re.sub(r'<system-reminder>[\s\S]*?</system-reminder>', '', text).strip()). If after stripping, a message has empty content and no tool calls, omit it.
Wrap the messages array in a trajectory envelope:
{
"model": "<model-id-from-session>",
"timestamp": "2025-01-15T10:30:00Z",
"session_id": "<session-id-from-session>",
"messages": [...]
}
session_id passed into the skill, the session id surfaced in the session context, or a runtime-provided environment variable. Include it verbatim so offline provenance can match this trajectory to recall audit events for the same session. Omit the field only if no session id is truly available in this environment.Write the trajectory JSON to a temporary file using the Write tool, then pass the file path to the helper script:
.evolve/tmp/trajectory_input.json using the Write tool (create the directory if needed)tmp=.evolve/tmp/trajectory_input.json; mkdir -p .evolve/tmp; trap 'rm -f "$tmp"' EXIT; python3 "${CLAUDE_PLUGIN_ROOT}/skills/evolve-lite/save-trajectory/scripts/save_trajectory.py" "$tmp"
Important: Do NOT use inline Python scripts, heredocs, or stdin piping to pass the trajectory JSON. Always use the Write tool to create a temp file first. This avoids escaping issues with backslashes, quotes, and newlines in conversation content.
The script will:
.evolve/trajectories/ directory if neededtrajectory_YYYY-MM-DDTHH-MM-SS.json)After saving, you should see output like:
Trajectory saved: /path/to/project/.evolve/trajectories/trajectory_2025-01-15T10-30-00.json
Messages: 12
role: "user" or role: "assistant" as appropriate — do not skip them, since they preserve the conversation flow..evolve/trajectories/ and can be version-controlled or gitignored as preferred.