Azure AI Projects Python SDK
microsoft/skills
Reference for building on Microsoft Foundry with the azure-ai-projects Python SDK: project clients, versioned agents, evaluations, connections, datasets and indexes.
Save the current conversation as a trajectory JSON file in OpenAI chat completion format for analysis and fine-tuning
$ npx skills add AgentToolkit/altk-evolve --skill save-trajectory -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install AgentToolkit/altk-evolve save-trajectory --agent claude-codeProject scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).
$ git clone --depth 1 https://github.com/AgentToolkit/altk-evolve.git skills-src && mkdir -p .claude/skills && cp -r skills-src/platform-integrations/codex/plugins/evolve-lite/skills/evolve-lite/save-trajectory .claude/skills/save-trajectory && rm -rf skills-srcUse ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.
Claude Code skills documentation · loads skills from .claude/skills/
Install the "save-trajectory" agent skill from https://github.com/AgentToolkit/altk-evolve/tree/main/platform-integrations/codex/plugins/evolve-lite/skills/evolve-lite/save-trajectory into .claude/skills/save-trajectory/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "save-trajectory", then confirm the skill loads.Claude Code copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$skill-installer install https://github.com/AgentToolkit/altk-evolve/tree/main/platform-integrations/codex/plugins/evolve-lite/skills/evolve-lite/save-trajectoryType this inside Codex. $skill-installer <name> installs a curated skill from openai/skills. The installer writes to $CODEX_HOME/skills (default ~/.codex/skills). Restart Codex if the skill does not show up.
$ npx skills add AgentToolkit/altk-evolve --skill save-trajectory -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install AgentToolkit/altk-evolve save-trajectory --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/AgentToolkit/altk-evolve.git skills-src && mkdir -p .agents/skills && cp -r skills-src/platform-integrations/codex/plugins/evolve-lite/skills/evolve-lite/save-trajectory .agents/skills/save-trajectory && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "save-trajectory" agent skill from https://github.com/AgentToolkit/altk-evolve/tree/main/platform-integrations/codex/plugins/evolve-lite/skills/evolve-lite/save-trajectory into .agents/skills/save-trajectory/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "save-trajectory", then confirm the skill loads.Codex copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add AgentToolkit/altk-evolve --skill save-trajectory -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install AgentToolkit/altk-evolve save-trajectory --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/AgentToolkit/altk-evolve.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/platform-integrations/codex/plugins/evolve-lite/skills/evolve-lite/save-trajectory .cursor/skills/save-trajectory && rm -rf skills-srcUse ~/.cursor/skills/ instead of .cursor/skills for a personal install.
Cursor skills documentation · loads skills from .cursor/skills/, .agents/skills/, .claude/skills/, .codex/skills/
Install the "save-trajectory" agent skill from https://github.com/AgentToolkit/altk-evolve/tree/main/platform-integrations/codex/plugins/evolve-lite/skills/evolve-lite/save-trajectory into .cursor/skills/save-trajectory/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "save-trajectory", then confirm the skill loads.Cursor copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gemini skills install https://github.com/AgentToolkit/altk-evolve.git --path platform-integrations/codex/plugins/evolve-lite/skills/evolve-lite/save-trajectory--scope user (default) or --scope workspace; --path is the subfolder of the repo that holds the skill; --consent skips the security confirmation prompt.
$ npx skills add AgentToolkit/altk-evolve --skill save-trajectory -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install AgentToolkit/altk-evolve save-trajectory --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/AgentToolkit/altk-evolve.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/platform-integrations/codex/plugins/evolve-lite/skills/evolve-lite/save-trajectory .gemini/skills/save-trajectory && rm -rf skills-srcUse ~/.gemini/skills/ instead of .gemini/skills for a personal install, then run /skills reload.
Gemini CLI skills documentation · loads skills from .gemini/skills/, .agents/skills/
Install the "save-trajectory" agent skill from https://github.com/AgentToolkit/altk-evolve/tree/main/platform-integrations/codex/plugins/evolve-lite/skills/evolve-lite/save-trajectory into .gemini/skills/save-trajectory/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "save-trajectory", then confirm the skill loads.Gemini CLI copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gh skill install AgentToolkit/altk-evolve save-trajectoryInstalls for Copilot at project scope by default; add --scope user for a personal install. Preview a skill first with gh skill preview. Needs GitHub CLI 2.90.0 or later (public preview).
$ npx skills add AgentToolkit/altk-evolve --skill save-trajectory -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/AgentToolkit/altk-evolve.git skills-src && mkdir -p .github/skills && cp -r skills-src/platform-integrations/codex/plugins/evolve-lite/skills/evolve-lite/save-trajectory .github/skills/save-trajectory && rm -rf skills-srcUse ~/.copilot/skills/ instead of .github/skills for a personal install. Commit .github/skills so cloud agent and code review can use it.
GitHub Copilot skills documentation · loads skills from .github/skills/, .claude/skills/, .agents/skills/
Install the "save-trajectory" agent skill from https://github.com/AgentToolkit/altk-evolve/tree/main/platform-integrations/codex/plugins/evolve-lite/skills/evolve-lite/save-trajectory into .github/skills/save-trajectory/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "save-trajectory", then confirm the skill loads.GitHub Copilot copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add AgentToolkit/altk-evolve --skill save-trajectory -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install AgentToolkit/altk-evolve save-trajectory --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/AgentToolkit/altk-evolve.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/platform-integrations/codex/plugins/evolve-lite/skills/evolve-lite/save-trajectory .opencode/skills/save-trajectory && rm -rf skills-srcUse ~/.config/opencode/skills/ instead of .opencode/skills for a personal install.
OpenCode skills documentation · loads skills from .opencode/skills/, .claude/skills/, .agents/skills/
Install the "save-trajectory" agent skill from https://github.com/AgentToolkit/altk-evolve/tree/main/platform-integrations/codex/plugins/evolve-lite/skills/evolve-lite/save-trajectory into .opencode/skills/save-trajectory/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "save-trajectory", then confirm the skill loads.OpenCode copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
save-trajectorySave the current conversation as a trajectory JSON file in OpenAI chat completion format for analysis and fine-tuning
Save Trajectory is an agent skill from AgentToolkit/altk-evolve. Save the current conversation as a trajectory JSON file in OpenAI chat completion format for analysis and fine-tuning
Its SKILL.md is about 1.4k tokens, which your agent loads only when the skill is triggered. The skill folder holds 3 other files, including scripts (for example `scripts/on_stop.py` and `scripts/save_trajectory.py`).
It sits in AI & LLM Engineering, covering LLM API integration and Fine-tuning. It works with OpenAI. The repository describes itself as: Self improving agents through iterations. The licence is Apache-2.0.
5 steps, taken from the step headings in SKILL.md.
Read from SKILL.md and the folder at commit 9e5bb56. It shows what the files ask for, not the result of running them.
Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.
From allowed-tools in the SKILL.md frontmatter.
Ships 2 files in scripts/ (Python), which the agent can run.
Shell commands in SKILL.md call:
python3gitFrom the folder's file list and the shell code blocks in SKILL.md.
No URLs in SKILL.md. Its commands use git, which can reach the network depending on how they are called.
From URLs in SKILL.md, links to its own repository left out.
Names no API keys, tokens, secrets or passwords.
From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.
Save Trajectory loads about 1.4k tokens when it runs. Until then it costs about 33 tokens; SKILL.md has 580 words of instructions outside code blocks.
Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.
The automated check found no risky patterns in SKILL.md.
Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); the scripts in this folder are not scanned.
The full file from AgentToolkit/altk-evolve at commit 9e5bb56, republished under its Apache-2.0 licence (© AgentToolkit). 580 words, ~1,423 tokens.
.claude/skills/save-trajectory/SKILL.md (or your agent's skills folder). This skill also uses 2 other files; get the full folder from GitHub.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 "$(git rev-parse --show-toplevel 2>/dev/null || pwd)/plugins/evolve-lite/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: 12role: "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.© AgentToolkit, Apache-2.0. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file
SKILL.md and 2 other files (scripts) in platform-integrations/codex/plugins/evolve-lite/skills/evolve-lite/save-trajectory of AgentToolkit/altk-evolve.
Open the folder on GitHubat commit 9e5bb56
Save Trajectory next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.
| Skill | Stars | Used in | Tokens | Auto-check | Licence | Repo updated |
|---|---|---|---|---|---|---|
| Save Trajectory this skillAgentToolkit/altk-evolve | 122 | — | ~1.4k | Automated safety check: Pass | Apache-2.0 | |
| Azure AI Projects Python SDKmicrosoft/skills | 3.1k | 6 repos | ~2.8k | Automated safety check: Pass | MIT | |
| Fine-Tuning ExpertJeffallan/claude-skills | 12k | 1 repos | ~1.7k | Automated safety check: Pass | MIT | |
| Dingo VerifyMigoXLab/dingo | 757 | — | ~833 | Automated safety check: Pass | Apache-2.0 | |
| Instructor Structured LLM OutputsOrchestra-Research/AI-Research-SKILLs | 13k | 7 repos | ~4.2k | Automated safety check: Pass | MIT | |
| Openai Knowledgeopenai/openai-agents-python | 30k | 1 repos | ~408 | Automated safety check: Pass | MIT |
microsoft/skills
Reference for building on Microsoft Foundry with the azure-ai-projects Python SDK: project clients, versioned agents, evaluations, connections, datasets and indexes.
Jeffallan/claude-skills
Guides LLM fine-tuning with LoRA and QLoRA through Hugging Face PEFT, from dataset validation and training checks to adapter merging, quantization and deployment.
MigoXLab/dingo
A skill your agent uses when the user wants to fact-check an article or verify factual claims in a document.
Orchestra-Research/AI-Research-SKILLs
Shows how to pull validated, typed data out of LLM responses with Instructor and Pydantic models, including retries on failure and partial streaming.
openai/openai-agents-python
Retrieve authoritative OpenAI API and platform documentation when an integration or claim needs current external evidence.
nanocoai/nanoclaw
Installs Codex as an agent provider for NanoClaw groups, with streaming, MCP tools, server-side history and vault-only credentials, next to or instead of Claude.
AgentToolkit/altk-evolve
Contrasts successful and failed agent runs of the same task and derives guidelines backed by evidence from transcripts, tool calls and outcome judgments.
AgentToolkit/altk-evolve
Turns a saved agent trajectory into a reusable skill with a SKILL.md and supporting scripts, so later sessions can call the workflow instead of rediscovering it.
AgentToolkit/altk-evolve
Copies a memory the agent just saved into the shared evolve store with a retrieval trigger, so it can be shared across a team and audited like other entities.
AgentToolkit/altk-evolve
Has the agent read a project wiki's AGENTS.md and pull the guidelines that fit the task it is about to start, instead of loading the wiki at session start.
AgentToolkit/altk-evolve
Reads a normalized Claude Code trajectory JSON and turns its errors and solutions into reusable guideline pages in wiki-twobatch/guidelines.
AgentToolkit/altk-evolve
Ingest one or more agent trajectories (raw bob/claude traces or normalized JSON) into an agent-wiki end-to-end — convert, summarize, extract guidelines, synthesize skills, optionally compare…
Works with
Categories
Save the current conversation as a trajectory JSON file in OpenAI chat completion format for analysis and fine-tuning. Save Trajectory is an agent skill from AgentToolkit/altk-evolve.
Save Trajectory fits situations like: tasks that involve LLM API integration; tasks that involve Fine-tuning.
Run `npx skills add AgentToolkit/altk-evolve --skill save-trajectory -a claude-code`. Or copy the skill folder (platform-integrations/codex/plugins/evolve-lite/skills/evolve-lite/save-trajectory in AgentToolkit/altk-evolve) into .claude/skills/save-trajectory in your project. Claude Code loads it when a task matches its description.
Run `npx skills add AgentToolkit/altk-evolve --skill save-trajectory -a codex`. Or copy the skill folder (platform-integrations/codex/plugins/evolve-lite/skills/evolve-lite/save-trajectory in AgentToolkit/altk-evolve) into .agents/skills/save-trajectory in your project. Codex loads it when a task matches its description.
Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add AgentToolkit/altk-evolve --skill save-trajectory -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/save-trajectory, .gemini/skills/save-trajectory, .github/skills/save-trajectory and .opencode/skills/save-trajectory in your project.
Going by SKILL.md and its folder, Save Trajectory needs Python for the scripts in its folder and the command-line tools its instructions call (python3 and git). Our summary lists: Python 3.
SKILL.md contains no URLs. Its commands use git, which can reach the network depending on how they are called. This is read from the text; nothing was executed.
Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. The check reads SKILL.md only: the scripts in the folder are not scanned, so read them before running anything.
Save Trajectory is published under the Apache-2.0 licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.
About 1.4k tokens (SKILL.md is roughly 5.7k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.
Skills that share tags, products or a category with Save Trajectory: Azure AI Projects Python SDK (microsoft/skills, 3.1k stars), Fine-Tuning Expert (Jeffallan/claude-skills, 12k stars), Dingo Verify (MigoXLab/dingo, 757 stars) and Instructor Structured LLM Outputs (Orchestra-Research/AI-Research-SKILLs, 13k stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
AgentToolkit (a GitHub organization) maintains it in AgentToolkit/altk-evolve, which has 122 GitHub stars. The repository holds 21 skills in this directory. The repository was last updated on October 7, 2026.
Source: AgentToolkit/altk-evolve on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.