Create reusable Codex skills for Symphony workflows with YAML frontmatter and structured instructions
Skills are reusable instruction sets that help Codex agents perform specific tasks consistently. Symphony includes several built-in skills for common workflows like committing code, landing PRs, and interacting with Linear.
---name: skill-namedescription: | Brief description of when to use this skill---# Skill Name## Goals- What this skill accomplishes## Steps1. Detailed step-by-step instructions2. Include code examples and commands
Creates well-formed git commits from session history and staged changes.
---name: commitdescription: Create a well-formed git commit from current changes using session history for rationale and summary; use when asked to commit, prepare a commit message, or finalize staged work.---# Commit## Steps1. Read session history to identify scope, intent, and rationale.2. Inspect the working tree and staged changes (`git status`, `git diff`).3. Stage intended changes, including new files (`git add -A`).4. Choose a conventional type and optional scope (e.g., `feat(scope): ...`).5. Write a subject line in imperative mood, <= 72 characters.6. Write a body that includes summary, rationale, and test status.7. Append a `Co-authored-by` trailer for Codex.8. Wrap body lines at 72 characters.9. Create the commit with `git commit -F <file>`.
Uses Symphony’s linear_graphql client tool for raw Linear GraphQL operations.
View linear skill structure
---name: lineardescription: | Use Symphony's `linear_graphql` client tool for raw Linear GraphQL operations such as comment editing and upload flows.---# Linear GraphQL## Primary toolUse the `linear_graphql` client tool exposed by Symphony's app-server session.It reuses Symphony's configured Linear auth for the session.Tool input: JSON object with "query" (required) and "variables" (optional) fields.
Lands a PR by monitoring conflicts, resolving them, waiting for checks, and squash-merging when green.
View land skill structure
---name: landdescription: Land a PR by monitoring conflicts, resolving them, waiting for checks, and squash-merging when green; use when asked to land, merge, or shepherd a PR to completion.---# Land## Goals- Ensure the PR is conflict-free with main.- Keep CI green and fix failures when they occur.- Squash-merge the PR once checks pass.- Do not yield to the user until the PR is merged.## Steps1. Locate the PR for the current branch.2. Confirm the full gauntlet is green locally before any push.3. Check mergeability and conflicts against main.4. If conflicts exist, use the `pull` skill to fetch/merge `origin/main`.5. Watch checks until complete.6. If checks fail, pull logs, fix the issue, commit, push, and re-run.7. When all checks are green, squash-merge using PR title/body.
Add a new directory under .codex/skills/ with your skill name:
mkdir -p .codex/skills/my-skill
2
Write SKILL.md
Create the skill file with frontmatter and instructions:
.codex/skills/my-skill/SKILL.md
---name: my-skilldescription: Brief description of when to use this skill---# My Skill## Goals- Clear objective statements## Prerequisites- Required tools or environment setup## Steps1. Detailed instructions2. Include command examples3. Handle error cases## Example```bash# Example command usageexample-command --flag value
</Step><Step title="Reference the skill">Reference your skill in WORKFLOW.md or other skills:```markdown## Related skills- `my-skill`: use when you need to perform X.
3
Test the skill
Test by creating a workflow that references the skill and verifying Codex follows the instructions correctly.
Be specific in descriptions: The description field helps Codex decide when to invoke a skill. Use clear trigger conditions like “use when asked to…”, “use when you need to…”
Include working code snippets that Codex can execute directly:
## Commands```bash# Check current statusbranch=$(git branch --show-current)echo "Current branch: $branch"# Run validationmake test
## Skill CompositionSkills can reference other skills to build complex workflows:```markdown## Related skills- `commit`: produce clean commits during implementation- `push`: keep remote branch current and publish updates- `pull`: keep branch updated with latest `origin/main`
When one skill references another, Codex will load and follow both skill instruction sets. Use this to decompose complex workflows into reusable components.
## Async Watch HelperPreferred: use the asyncio watcher to monitor review comments:```bashpython3 .codex/skills/land/land_watch.py
### State ManagementCapture and use state across skill steps:```bash# Capture PR number for later stepspr_number=$(gh pr view --json number -q .number)# Use in subsequent commandsgh api repos/{owner}/{repo}/pulls/$pr_number/comments
### Upload a video to a commentDo this in three steps:1. Call `linear_graphql` with `fileUpload` to get `uploadUrl`, `assetUrl`, and any required upload headers.2. Upload the local file bytes to `uploadUrl` with `curl -X PUT` and the exact headers returned by `fileUpload`.3. Call `linear_graphql` again with `commentCreate` and include the resulting `assetUrl` in the comment body.