원클릭으로
writing-skills
Use when creating a new skill, editing an existing skill, writing a SKILL.md, or verifying a skill works before deployment.
Codex 또는 Claude로 설치 이 Prompt를 복사해 Codex, Claude 또는 다른 어시스턴트에 붙여 넣으면 Skill 페이지를 검토하고 설치를 진행할 수 있습니다.
메뉴
Use when creating a new skill, editing an existing skill, writing a SKILL.md, or verifying a skill works before deployment.
Codex 또는 Claude로 설치 이 Prompt를 복사해 Codex, Claude 또는 다른 어시스턴트에 붙여 넣으면 Skill 페이지를 검토하고 설치를 진행할 수 있습니다.
SOC 직업 분류 기준
Use when implementing background jobs, task queues, scheduled jobs, retries, or any Redis-backed async worker in a Python backend service in this harness. arq is the chosen queue (async-native, Redis-backed). Replaces the old bullmq skill.
Use when creating a new branch, starting new feature work, fixing a bug on a new branch, or any situation where a branch needs to be created. Use when the user asks to "create a branch", "start a new branch", "branch off of X", or "make a branch for this work".
Use when creating CI/CD pipelines for any project. Use when asked to "set up CI/CD", "create a pipeline", "automate deployments", "configure GitHub Actions", "set up Vercel/Render/AWS", or similar. The harness is a polyglot monorepo — a Python (FastAPI + uv) backend in `apps/api/` and a TypeScript (Vite + pnpm) frontend in `apps/web/`. Pipelines run the two stacks as parallel lanes that join at a final gate.
Use when writing, reviewing, or editing a Dockerfile or docker-compose file. Use when asked to "containerize", "dockerize", "add Docker support", or "write a Dockerfile" for any application or service in this harness — FastAPI backend (Python + uv) or Vite frontend (TypeScript + pnpm, served as static assets).
Use when writing, reviewing, or refactoring TypeScript code on the frontend — especially when tempted to use `any`, type assertions, unvalidated casts, or when designing types, generics, utility types, or tsconfig settings. Backend code in this harness is Python, not TypeScript; see `effective-python` / `python-linting` for the backend equivalents.
FastAPI implementation guide. Load whenever building or modifying any backend HTTP service in this harness — defining routes, request/response models, dependencies, middleware, error handlers, lifespan events, or background tasks. Triggers include: APIRouter, Depends, FastAPI app instance, response_model, OpenAPI generation, async endpoint handlers. Use alongside `sqlalchemy`, `pydantic`, and `rest-api-design`.
| name | writing-skills |
| description | Use when creating a new skill, editing an existing skill, writing a SKILL.md, or verifying a skill works before deployment. |
A skill is a directory containing a SKILL.md file plus optional reference files and scripts. Skills give agents reusable domain-specific context, workflows, and tools.
Core insight: Writing skills is tdd applied to process documentation. Establish baseline behavior first (RED), write the skill (GREEN), then close loopholes (REFACTOR).
Create when:
Don't create for:
---
name: skill-name-with-hyphens
description: Use when [specific triggering conditions and symptoms]
---
# Skill Name
## Overview
Core principle in 1-2 sentences.
## When to use
Symptoms, contexts, triggers. When NOT to use.
## Core pattern / Quick reference
Steps or code.
## Common mistakes
What goes wrong + fixes.
Frontmatter rules:
name and description fields are supportedname: letters, numbers, hyphens only (no parentheses or special chars)description: max 1024 chars; see below for critical rulesThe description is how the agent decides whether to load your skill. It must describe only when to use the skill — never summarize what the skill does or how it works.
Summarizing the workflow in the description causes agents to follow the description as a shortcut and skip reading the full skill body.
# Bad: summarizes workflow — agent may follow this instead of reading the skill
description: Use when executing plans — dispatches subagent per task with code review between tasks
# Bad: first person
description: I can help you process Excel files
# Good: triggering conditions only, third person
description: Use when executing implementation plans with independent tasks
# Good: specific symptoms, no workflow
description: Use when tests have race conditions, timing dependencies, or pass/fail inconsistently
Rules:
Use structured text, not diagrams or tables:
Use progressive disclosure: SKILL.md is the table of contents; details live in linked files loaded only when needed.
my-skill/
├── SKILL.md # Overview + links (required)
├── reference.md # Heavy reference: API docs, schemas (100+ lines)
├── examples.md # Input/output pairs
└── scripts/
└── validate.py # Reusable utility scripts
form_validation_rules.md not doc2.mdSkills load into every conversation. Every token counts.
Targets:
Techniques:
--help instead of documenting all flags inlineUse terms agents would search for when encountering a problem:
"Hook timed out", "ENOTEMPTY", "race condition""flaky", "hanging", "zombie", "pollution""timeout/hang/freeze", "cleanup/teardown/afterEach"For multi-step tasks, give the agent a copyable progress checklist:
Task Progress:
- [ ] Step 1: ...
- [ ] Step 2: ...
- [ ] Step 3: ...
Then describe each step. Include feedback loops: run validator → fix errors → repeat.
For output quality that depends on style, provide input/output pairs:
**Example 1:**
Input: <user request>
Output:
<desired output>
One excellent, complete, well-commented example is better than many thin ones.
Never deploy a skill you haven't tested. No exceptions.
RED — establish baseline: Run the target scenario with a fresh agent session without the skill. Document what choices the agent made, what rationalizations it used (verbatim), and which pressures triggered failures.
GREEN — write minimal skill: Write a skill that addresses those specific failures. Don't add content for hypothetical cases. Re-run with the skill and verify compliance.
REFACTOR — close loopholes: If the agent finds a new rationalization, add an explicit counter. Re-test until bulletproof.
Testing approaches by skill type:
If the agent needs to write code to test a skill, use test/<skill-name>/ within the current working directory. For example, when testing the pull-requests skill, write test code to test/pull-requests/. Clean up the directory after testing is complete.
Skills that enforce rules need to actively resist rationalization. Agents will find loopholes under pressure.
Close every loophole explicitly — state the rule, then forbid specific workarounds:
Write code before test? Delete it. Start over.
No exceptions:
- Don't keep it as "reference"
- Don't "adapt" it while writing tests
- Delete means delete
Add a rationalization list built from your baseline testing:
Add a red flags list so agents can self-check:
## Red flags — stop and reassess
- Thinking "this is too simple to need a test"
- Thinking "I'll test it after"
- Thinking "this situation is different because..."
RED — baseline first:
GREEN — write minimal skill:
name uses only letters, numbers, hyphensdescription starts with "Use when...", third person, triggers only (no workflow summary)REFACTOR — close loopholes:
Quality checks:
scripts\file.py) — breaks on Unix systems