Skill Writer
SentryOfficialPublished by Sentry
- Skill
- Meta (authoring, orchestration, planning, memory)
- Agent tooling
- Apache-2.0
- Low risk
- Has scripts
AutoGineer summary
Written by AutoGineer from the skill’s own files, not by the author
Skill Writer provides a standardized, multi-step framework for the full lifecycle of agent skill development. It acts as a router and guide, ensuring that skills are built with high-value coverage, proper architectural layout, and clear maintenance contracts. By following its defined paths—ranging from synthesis and authoring to iteration and validation—users can produce robust, portable, and well-documented skills that adhere to established design principles and precision standards.
What it does
- Guides the creation and synthesis of new agent skills from raw sources.
- Facilitates iterative improvements based on positive and negative performance examples.
- Enforces a structured reference architecture for skill documentation and runtime files.
- Provides precision passes to ensure changes are necessary, concise, and impactful.
- Supports the registration and validation of skills to ensure structural integrity.
- Offers specialized paths for different execution shapes like routers, subagents, and scripts.
When to use it
- When you need to create a new agent skill from scratch.
- When updating or improving an existing skill's logic or documentation.
- When synthesizing disparate sources into a cohesive, functional skill.
- When you need to refine a skill's behavior based on specific success or failure examples.
- When maintaining skill documentation and ensuring it meets registration standards.
Advantages
- Ensures consistency across all developed agent skills.
- Minimizes wasted runtime tokens by prioritizing high-value input coverage.
- Provides clear, actionable paths for different levels of skill complexity.
- Promotes modularity through a well-defined reference architecture.
- Includes built-in precision checks to prevent unnecessary bloat or rule redundancy.
Usage examples
- “Create a skill for managing cloud infrastructure deployments.”
- The agent initiates the synthesis path, identifies the required execution shape, and guides you through authoring the SKILL.md and SPEC.md files.
- “Improve this skill based on these failed test cases.”
- The agent enters the iteration path, analyzes the provided evidence, and proposes specific updates to the skill's logic or documentation to resolve the failures.
Install
Download the skill as a ZIP:
https://autogineer.com/agent-skills/getsentry/skill-writer/downloadUnzip it into the cross-client skills folder of your project:
mkdir -p .agents/skills && unzip skill-writer.zip -d .agents/skills
Documentation by Sentry
Skill Writer
Use this as the single canonical workflow for skill creation and improvement. Primary success condition: maximize high-value input coverage before authoring while minimizing wasted runtime tokens.
Follow the workflow steps in order. Load only the reference files required for the step you are on.
SKILL.md is the primary router: every bundled reference file should be flat under references/ and listed here with a direct "open when..." reason.
Core Workflow References
| Open when you need to... | Read |
|---|---|
| choose the minimum workflow path for create, update, iterate, or research-first work | references/mode-selection.md |
| choose the simplest adequate execution shape before deciding files | references/execution-shapes.md |
| apply writing constraints for depth, concision, and portability | references/design-principles.md |
decide what belongs in SKILL.md, references/, SPEC.md, or supporting files | references/reference-architecture.md |
| create or update the maintenance contract for a skill | references/spec-template.md |
| find missing high-signal sources, including history and regressions | references/source-discovery.md |
| adapt an upstream prompt, workflow, rubric, benchmark, or docs into a skill | references/source-adaptation.md |
| run the full synthesis pass with coverage checks and source capture | references/synthesis-path.md |
author or update SKILL.md, SPEC.md, and supporting files | references/authoring-path.md |
| improve trigger language and false-positive/false-negative behavior | references/description-optimization.md |
| iterate from positive, negative, or fix examples | references/iteration-path.md |
| store persistent working and holdout examples for future revisions | references/iteration-evidence.md |
| choose a response template, schema, or output contract | references/output-contracts.md |
| add or update evals for a skill's generated outputs or runtime behavior | references/skill-evals.md |
| troubleshoot overloaded layouts, hidden refs, or other structure failures | references/structure-troubleshooting.md |
| register the skill and run final validation checks | references/registration-validation.md |
Artifact Layout References
| Open when you need to... | Read |
|---|---|
keep the whole skill inline in one coherent SKILL.md | references/layout-inline-skill.md |
| split optional deep knowledge into focused routed references | references/layout-reference-backed-skill.md |
| add scripts for deterministic automation or validation | references/layout-script-backed-workflow.md |
| define a skill that is usually invoked with explicit arguments | references/layout-argument-driven-skill.md |
| ship reusable templates, schemas, or other static assets | references/layout-asset-template-skill.md |
Workflow Mechanic References
| Open when you need to... | Read |
|---|---|
| break a task into fixed ordered steps | references/workflow-prompt-chaining.md |
| classify requests and route them to different downstream paths | references/workflow-routing.md |
| split independent work into parallel units or votes | references/workflow-parallel.md |
| discover work units dynamically and coordinate worker outputs | references/workflow-orchestrator-workers.md |
| run validate-fix-repeat checks during authoring or execution | references/workflow-validation-loops.md |
| validate a plan before executing a risky action | references/workflow-plan-validate-execute.md |
Claude Code References
| Open when you need to... | Read |
|---|---|
| use Claude-specific frontmatter or invocation controls | references/claude-frontmatter-invocation.md |
| use Claude argument fields or substitution variables | references/claude-argument-substitutions.md |
build a skill that runs in isolated context: fork | references/claude-subagent-fork.md |
| build a skill that uses Claude hooks for deterministic enforcement | references/claude-hook-backed.md |
| use Claude shell preprocessing for dynamic context injection | references/claude-dynamic-context.md |
Example Profiles
| Open when you need to... | Read |
|---|---|
| see the expected depth for a documentation-heavy skill | references/example-documentation-skill.md |
| see the expected depth for a workflow-process skill | references/example-workflow-process-skill.md |
| see what a good routed skill looks like | references/example-router-skill.md |
| see what a good subagent-fork skill looks like | references/example-subagent-fork-skill.md |
| see what a good hook-backed skill looks like | references/example-hook-backed-skill.md |
Step 1: Resolve target, path, and shape
Resolve the intended operation (
create,update,synthesize,iterate) and inspect workspace prior art before choosing where files belong.Choose the target skill root from observed conventions. If the canonical location is still unclear after inspection, ask one direct question before editing files.
Read
references/mode-selection.mdto choose the minimum required workflow paths.Read
references/execution-shapes.mdto choose the primary execution shape.Default to the simplest adequate shape. If selecting a more complex shape, record why simpler shapes were rejected.
Load only the exact artifact-layout, workflow-mechanic, and provider-specific leaf files required by that shape.
Before adding guidance, identify what existing rule, section, or file should be narrowed, replaced, or removed.
Record portability implications before using provider-specific mechanics.
Step 2: Run synthesis when needed
Read references/synthesis-path.md.
Use this path for new skills, material changes, and research-first planning.
Collect and score relevant sources with provenance.
Read
references/source-discovery.mdwhen source material is thin, stale, or ambiguous.Read
references/source-adaptation.mdwhen adapting an upstream prompt, workflow, rubric, benchmark, or docs.Produce source-backed decisions and coverage/gap status, including the class and execution-shape choice.
Load example profiles only when they add concrete depth for the selected class or shape.
If the skill uses provider-specific mechanics, include current official provider docs and capture usage constraints.
Do not move to authoring until required coverage is understood or gaps are explicit.
Step 3: Run iteration first when improving from outcomes/examples
Read references/iteration-path.md first when selected path includes iteration (for example operation iterate).
Capture and anonymize examples with provenance.
Read
references/iteration-evidence.mdwhen examples should persist beyond the current turn.Review skill behavior against working and holdout slices.
Propose improvements from positive/negative/fix evidence.
Carry concrete behavior deltas into authoring.
Skip this step when selected path does not include iteration.
Step 4: Author or update skill artifacts
Read references/authoring-path.md.
Write or update
SKILL.mdin imperative voice with trigger-rich description.Keep
SKILL.mdas the runtime router, not an encyclopedia.Run the pre-edit precision check in
references/authoring-path.mdbefore creating new sections or files.Read
references/reference-architecture.mdbefore adding bulk instructions or new reference files.Create or update
SPEC.mdusingreferences/spec-template.mdwhen creating a new skill or materially changing its contract.Create focused reference files, scripts, and assets only when each one has a clear "open when..." reason and cannot be handled by tightening an existing file.
If you add a bundled reference file, add a direct routing entry for it in this
SKILL.md.Prefer checklists, tables, templates, and input/output examples over explanatory prose.
Follow only the specific artifact-layout, workflow-mechanic, Claude-specific, and output-contract references selected for this skill.
For advanced execution shapes, add the required routing, delegation, or safety contracts before considering the skill complete.
For authoring/generator skills, include transformed examples in references:
happy-path
secure/robust variant
anti-pattern + corrected version
Read
references/skill-evals.mdwhen the request asks for evals, regression cases, benchmark cases, or model-graded quality checks for the skill being authored.After any skill artifact changes, run the post-change precision pass in
references/authoring-path.mdbefore description optimization or validation.
Step 5: Optimize description quality
Read references/description-optimization.md.
Validate should-trigger and should-not-trigger query sets.
Reduce false positives and false negatives with targeted description edits.
Keep trigger language generic across providers unless the skill is intentionally provider-specific.
Step 6: Register and validate
Read references/registration-validation.md.
Apply repository registration steps for the active layout you verified in the workspace.
Run quick validation for structural checks.
Review validator warnings, precision-pass results, and coverage gaps with judgment before completion.
Output format
Return:
SummaryChanges MadeValidation ResultsOpen Gaps
Files
- ATTRIBUTION.mdAdded by AutoGineer848 B
- EVAL.md6.4 KiB
- LICENSELicence file added by AutoGineer10.5 KiB
- SKILL.md9.8 KiB
- SOURCES.md19.1 KiB
- SPEC.md9.7 KiB
- evals/axis.config.json318 B
- evals/scenarios/iteration-from-bad-output.json2.8 KiB
- evals/scenarios/reference-backed-integration.json1.9 KiB
- evals/scenarios/small-inline-workflow.json1.9 KiB
- references/authoring-path.md4.7 KiB
- references/claude-argument-substitutions.md624 B
- references/claude-dynamic-context.md579 B
- references/claude-frontmatter-invocation.md1.9 KiB
- references/claude-hook-backed.md913 B
- references/claude-subagent-fork.md718 B
- references/description-optimization.md1.0 KiB
- references/design-principles.md3.6 KiB
- references/example-documentation-skill.md2.8 KiB
- references/example-hook-backed-skill.md989 B
- references/example-router-skill.md1.0 KiB
- references/example-subagent-fork-skill.md1.1 KiB
- references/example-workflow-process-skill.md2.4 KiB
- references/execution-shapes.md4.6 KiB
- references/iteration-evidence.md2.6 KiB
- references/iteration-path.md1.5 KiB
- references/layout-argument-driven-skill.md1.0 KiB
- references/layout-asset-template-skill.md809 B
- references/layout-inline-skill.md731 B
- references/layout-reference-backed-skill.md1.2 KiB
- references/layout-script-backed-workflow.md846 B
- references/mode-selection.md3.2 KiB
- references/output-contracts.md1.1 KiB
- references/reference-architecture.md2.5 KiB
- references/registration-validation.md3.5 KiB
- references/skill-evals.md5.6 KiB
- references/source-adaptation.md2.1 KiB
- references/source-discovery.md2.6 KiB
- references/spec-template.md2.2 KiB
- references/structure-troubleshooting.md4.0 KiB
- references/synthesis-path.md3.7 KiB
- references/workflow-orchestrator-workers.md652 B
- references/workflow-parallel.md540 B
- references/workflow-plan-validate-execute.md678 B
- references/workflow-prompt-chaining.md548 B
- references/workflow-routing.md828 B
- references/workflow-validation-loops.md658 B
- scripts/quick_validate.pyScript4.6 KiB
scripts/quick_validate.py
# /// script
# requires-python = ">=3.12"
# dependencies = ["pyyaml"]
# ///
"""
Quick structural validation for Agent Skills.
Validates that SKILL.md exists, has valid frontmatter, declares the required
fields, and references bundled files that exist. Size checks are advisory
warnings.
Usage:
uv run quick_validate.py <skill_directory>
Returns exit code 0 on success, 1 on failure. Outputs JSON with validation
results.
"""
import argparse
import json
import re
import sys
from pathlib import Path
import yaml
MAX_SKILL_CHARS = 20000
LOCAL_FILE_REFERENCE_RE = re.compile(
r"(?<![A-Za-z0-9_./-])"
r"((?:references|scripts|assets)/[A-Za-z0-9][A-Za-z0-9._/-]*\.[A-Za-z0-9]+|"
r"(?:SPEC|SOURCES)\.md)"
r"(?![A-Za-z0-9_./-])"
)
def parse_args(argv: list[str]) -> argparse.Namespace:
parser = argparse.ArgumentParser(
description="Validate the structural requirements for an agent skill.",
)
parser.add_argument("skill_directory")
return parser.parse_args(argv)
def find_local_file_references(text: str) -> list[str]:
refs: list[str] = []
for match in LOCAL_FILE_REFERENCE_RE.finditer(text):
ref = match.group(1)
if ref not in refs:
refs.append(ref)
return refs
def validate_local_file_references(
skill_path: Path,
skill_content: str,
errors: list[str],
) -> None:
for rel_path in find_local_file_references(skill_content):
target = skill_path / rel_path
if not target.exists():
errors.append(f"Referenced file not found: {rel_path}")
elif not target.is_file():
errors.append(f"Referenced path is not a file: {rel_path}")
def validate_skill(
skill_path: Path,
) -> tuple[bool, list[str], list[str]]:
"""Validate a skill directory. Returns (valid, errors, warnings)."""
errors: list[str] = []
warnings: list[str] = []
skill_md = skill_path / "SKILL.md"
if not skill_md.exists():
return False, ["SKILL.md not found"], []
content = skill_md.read_text()
if not content.startswith("---"):
errors.append("No YAML frontmatter found (file must start with ---)")
return False, errors, warnings
match = re.match(r"^---\n(.*?)\n---", content, re.DOTALL)
if not match:
errors.append("Invalid frontmatter format (missing closing ---)")
return False, errors, warnings
frontmatter_text = match.group(1)
try:
frontmatter = yaml.safe_load(frontmatter_text)
if not isinstance(frontmatter, dict):
errors.append("Frontmatter must be a YAML mapping")
return False, errors, warnings
except yaml.YAMLError as exc:
errors.append(f"Invalid YAML in frontmatter: {exc}")
return False, errors, warnings
invalid_keys = [key for key in frontmatter.keys() if not isinstance(key, str) or not key.strip()]
if invalid_keys:
errors.append("Frontmatter keys must be non-empty strings")
if "name" not in frontmatter:
errors.append("Missing required field: name")
else:
name = frontmatter["name"]
if not isinstance(name, str):
errors.append(f"name must be a string, got {type(name).__name__}")
else:
name = name.strip()
if not name:
errors.append("name must not be empty")
elif name != skill_path.name:
errors.append(f"name '{name}' does not match directory name '{skill_path.name}'")
if "description" not in frontmatter:
errors.append("Missing required field: description")
else:
description = frontmatter["description"]
if not isinstance(description, str):
errors.append(f"description must be a string, got {type(description).__name__}")
elif not description.strip():
errors.append("description must not be empty")
if len(content) > MAX_SKILL_CHARS:
warnings.append(
f"SKILL.md is {len(content)} characters (recommended max {MAX_SKILL_CHARS}). "
"Consider moving optional detail to references/."
)
validate_local_file_references(skill_path, content, errors)
return len(errors) == 0, errors, warnings
def main() -> None:
args = parse_args(sys.argv[1:])
skill_path = Path(args.skill_directory).resolve()
if not skill_path.is_dir():
print(json.dumps({"valid": False, "errors": [f"Not a directory: {skill_path}"]}))
sys.exit(1)
valid, errors, warnings = validate_skill(skill_path)
result = {
"valid": valid,
"errors": errors,
"warnings": warnings,
}
print(json.dumps(result, indent=2))
sys.exit(0 if valid else 1)
if __name__ == "__main__":
main()
Requirements and compatibility
Works with: Claude Code, Claude apps, OpenAI Codex, GitHub Copilot, Cursor, Gemini CLI, Kiro, OpenCode, Goose, Amp, Roo Code, JetBrains Junie, Factory Droid, Devin (ex-Windsurf), Mistral Vibe, OpenHands, Letta
“Works with” means the tool reads the open Agent Skills format; a skill written for one tool may use features others lack.
Needs: Needs Python
Security
What our scanner noticed· Low risk
- Scripts that your agent may run
This skill includes scripts that your agent may run. Read them before you use it.
A static scan is not a guarantee. Skills are third-party content: review a skill before you let an agent use it.
Attribution and licence
- Published by
- Sentry
- Publisher
- Sentry (Official)
- Source
- getsentry/skills · skills/skill-writer · commit e94f222
- Licence
- Apache License 2.0 (redistribution allowed)
- LICENSE (added by AutoGineer from LICENSE)
- ATTRIBUTION.md (written by AutoGineer)
- Synced
AutoGineer is not affiliated with or endorsed by Sentry or Sentry.
Download ZIP
The ZIP holds the skill’s files, its licence files and an ATTRIBUTION.md. Download skill-writer.zip