Authoring Fan-Agent Skills (in-repo)
SkillWeb & browsingAuthor in-repo SKILL.md: frontmatter, validator, structure, and writing-quality principles.
Available today. Use it from your connected AI after setup.
No other account needed.
Connect ahel once, and every AI you use reads what you have installed.
Then ask your AI: use the Authoring Fan-Agent Skills (in-repo) skill
What this skill tells your AI
The instructions your AI receives, as published by 7757/fan-browser-agent in skills/software-development/fan-agent-skill-authoring/SKILL.md and read by ahel’s review.
Overview
There are two places a SKILL.md can live:
- User-local:
~/.fan/skills/<maybe-category>/<name>/SKILL.md— personal, not shared. Created viaskill_manage(action='create'). - In-repo (this skill is about this case):
/home/bb/fan-agent/skills/<category>/<name>/SKILL.md— committed, shipped with the package. Usewrite_file+git add.skill_manage(action='create')does NOT target this tree.
When to Use
- User asks you to add a skill "in this branch / repo / commit"
- You're committing a reusable workflow that should ship with fan-agent
- You're editing an existing skill under
/home/bb/fan-agent/skills/(usepatchfor small edits,write_filefor rewrites;skill_managestill works for patch on in-repo skills, but not forcreate)
Required Frontmatter
Source of truth: tools/skill_manager_tool.py::_validate_frontmatter. Hard requirements:
- Starts with
---as the first bytes (no leading blank line). - Closes with
\n---\nbefore the body. - Parses as a YAML mapping.
namefield present.descriptionfield present, ≤ 1024 chars (MAX_DESCRIPTION_LENGTH).- Non-empty body after the closing
---.
Peer-matched shape used by every skill under skills/software-development/:
---
name: my-skill-name # lowercase, hyphens, ≤64 chars (MAX_NAME_LENGTH)
description: Use when <trigger>. <one-line behavior>.
version: 1.0.0
author: Fan Agent
license: MIT
metadata:
fan:
tags: [short, descriptive, tags]
related_skills: [other-skill, another-skill]
---
version / author / license / metadata are NOT enforced by the validator, but every peer has them — omit and your skill sticks out.
Size Limits
- Description: ≤ 1024 chars (enforced).
- Full SKILL.md: ≤ 100,000 chars (enforced as
MAX_SKILL_CONTENT_CHARS, ~36k tokens). - Peer skills in
software-development/sit at 8-14k chars. Aim for that range. If you're pushing past 20k, split intoreferences/*.mdand reference them from SKILL.md.
Peer-Matched Structure
Writing Quality Principles
A skill should make the Agent's process predictably better. Apply these checks:
- Name the behavior change. Remove lines that do not alter what the Agent does.
- Load context progressively. Keep triggers and always-needed steps here; move bulky or branch-specific material into linked
references/,templates/, orscripts/. - Give every ordered step a completion criterion. Prefer checkable and exhaustive criteria over “be thorough.”
- Co-locate each rule. Keep its definition, caveats, examples, and verification together.
- Use compact leading concepts. “Tight loop,” “tracer bullet,” “root cause,” and “regression test” anchor behavior better than repeated generic prose.
- Prune sediment. Replace old wording instead of layering duplicates; delete no-op advice such as “be careful.”
- Prevent premature completion. Sharpen the current step's done condition before adding more phases.
Watch for duplication, stale sediment, always-visible sprawl, no-op prose, and steps that allow the Agent to move on before the work is genuinely complete.
Every in-repo skill follows roughly:
# <Title>
## Overview
One or two paragraphs: what and why.
## When to Use
- Bulleted triggers
- "Don't use for:" counter-triggers
## <Topic sections specific to the skill>
- Quick-reference tables are common
- Code blocks with exact commands
- Fan-specific recipes (tests via scripts/run_tests.sh, desktop paths, etc.)
## Common Pitfalls
Numbered list of mistakes and their fixes.
## Verification Checklist
- [ ] Checkbox list of post-action verifications
## One-Shot Recipes (optional)
Named scenarios → concrete command sequences.
Not every section is mandatory, but Overview + When to Use + actionable body + pitfalls are the minimum for the skill to feel like a peer.
Directory Placement
skills/<category>/<skill-name>/SKILL.md
Categories currently in repo (confirm with ls skills/): autonomous-ai-agents, creative, data-science, devops, dogfood, email, gaming, github, leisure, mcp, media, mlops/*, note-taking, productivity, red-teaming, research, smart-home, social-media, software-development.
Pick the closest existing category. Don't invent new top-level categories casually.
Workflow
- Survey peers in the target category:
Read 2-3 peer SKILL.md files to match tone and structure.ls skills/<category>/ - Check validator constraints in
tools/skill_manager_tool.pyif unsure. - Draft with
write_filetoskills/<category>/<name>/SKILL.md. - Validate locally:
import yaml, re, pathlib content = pathlib.Path("skills/<category>/<name>/SKILL.md").read_text() assert content.startswith("---") m = re.search(r'\n---\s*\n', content[3:]) fm = yaml.safe_load(content[3:m.start()+3]) assert "name" in fm and "description" in fm assert len(fm["description"]) <= 1024 assert len(content) <= 100_000 - Git add + commit on the active branch.
- Note: the CURRENT session's skill loader is cached —
skill_view/skills_listwill not see the new skill until a new session. This is expected, not a bug.
Cross-Referencing Other Skills
metadata.fan.related_skills unions both trees (skills/ in-repo and ~/.fan/skills/) at load time. You CAN reference a user-local skill from an in-repo skill, but it won't resolve for other users who clone the repo fresh. Prefer referencing only in-repo skills from in-repo skills. If a frequently-referenced skill lives only in ~/.fan/skills/, consider promoting it to the repo.
Editing Existing In-Repo Skills
- Small fix (typo, added pitfall, tightened trigger):
skill_manage(action='patch', name=..., old_string=..., new_string=...)works fine on in-repo skills. - Major rewrite:
write_filethe whole SKILL.md.skill_manage(action='edit')also works but requires supplying the full new content. - Adding supporting files:
write_filetoskills/<category>/<name>/references/<file>.md,templates/<file>, orscripts/<file>.skill_manage(action='write_file')also works and enforces the references/templates/scripts/assets subdir allowlist. - Always commit the edit — in-repo skills are source, not runtime state.
Common Pitfalls
-
Using
skill_manage(action='create')for an in-repo skill. It writes to~/.fan/skills/, not the repo tree. Usewrite_filefor in-repo creation. -
Leading whitespace before
---. The validator checkscontent.startswith("---"); any leading blank line or BOM fails validation. -
Description too generic. Peer descriptions start with "Use when ..." and describe the trigger class, not the one task. "Use when debugging X" > "Debug X".
-
Forgetting the author/license/metadata block. Not validator-enforced, but every peer has it; omitting makes the skill look half-finished.
-
Writing a skill that duplicates a peer. Before creating,
ls skills/<category>/and open 2-3 peers. Prefer extending an existing skill to creating a narrow sibling. -
Expecting the current session to see the new skill. It won't. The skill loader is initialized at session start. Verify in a fresh session or via
skill_viewusing the exact path. -
Letting skills accumulate sediment. When adding a rule, remove the wording it replaces.
-
Writing no-op prose. Replace “be careful” or “use best practices” with a checkable completion criterion.
-
Linking to skills that don't exist in-repo.
related_skills: [some-user-local-skill]works for you but breaks for other clones. Prefer only in-repo links.
Verification Checklist
- File is at
skills/<category>/<name>/SKILL.md(not in~/.fan/skills/) - Frontmatter starts at byte 0 with
---, closes with\n---\n -
name,description,version,author,license,metadata.fan.{tags, related_skills}all present - Name ≤ 64 chars, lowercase + hyphens
- Description ≤ 1024 chars and starts with "Use when ..."
- Total file ≤ 100,000 chars (aim for 8-15k)
- Structure:
# Title→## Overview→## When to Use→ body →## Common Pitfalls→## Verification Checklist - Ordered steps have checkable completion criteria
- Description is trigger-focused and does not duplicate the body
- Branch-specific or bulky material is progressively disclosed
- Duplicate, stale, and no-op prose removed
-
related_skillsreferences resolve in-repo (or are explicitly OK to be user-local) -
git add skills/<category>/<name>/ && git commitcompleted on the intended branch
Signals
- GitHub stars
- 38
- Forks
- 6
- Last commit
- Sep 2026
Advanced
- Catalog kind
- skill
- Gateway key
fan-agent-skill-authoring- Source
- github.com/7757/fan-browser-agent