create-team-skill — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited create-team-skill (Agent Skill) and scored it 100/100 (green). The audit ran 55 deterministic rules across Security, Supply Chain, Maintenance, Transparency, and Community; it found 0 high-severity and 0 lower-severity findings. The full rule-by-rule trace and per-finding evidence are below. Free, methodology-open.
Findings & checks · 0 flagged
Every scanned point with the score it earned and what moved between them.
First recorded scan — no prior version to compare against.
The primary manifest — the file an agent reads to learn what this artifact does.
This is the dev-workspace guide for authoring a skill in this plugin; follow it so a new skill matches the conventions the existing skills already use. A skill is a document the agent reads, not a function it calls. Before writing one, make three decisions in order. Each has a wrong-by-default failure mode, so decide deliberately rather than copying another skill's wiring.
block (another skill composes it)? This defines what the skill is.
search.
Every skill that hands off uses one durable, repo-local directory for what it would otherwise "keep in the conversation" — inputs passed between skills, checkpoints, findings. In this repo that directory is `docs/plans/<id>/`, where <id> is <TICKET>-<topic> or <YYYY-MM-DD>-<topic>. This guide calls it <ARTIFACTS>. Producers write there; consumers discover and read from there. The agreement matters more than the path: every handoff uses the same convention so skills stay decoupled.
The load-bearing rule: composition never goes through the skill-invocation tool. The invocation tool is for the top surface only — a user typing the skill, or the model auto-invoking it by intent. When one skill pulls in another, it reads that skill's file or spawns a subagent.
First, make the invocation-surface decision — do not skip it. Classify the skill into exactly one of three buckets, then carry the verdict into the frontmatter:
| Bucket | What it means | Frontmatter | Examples |
|---|---|---|---|
| Both (default for anything a user might run) | A user triggers it by intent and the model/another skill may pull it in | leave user-invocable unset (default) | team, team-*, code-review |
| User-invocable only | A user must trigger it explicitly; the model must NOT auto-fire it | disable-model-invocation: true | irreversible actions: deploy, force-push, destructive cleanup |
| Model-invocable only (pure building block) | Reference material loaded by agents / read by path; a /<skill> command is meaningless to users | user-invocable: false | every pure methodology skill (qrspi-workflow, solid-principles, …) |
Decide with these tests, in order:
User-invocable only. Never let the model auto-trigger it.
agent reads — with no standalone "do this now" meaning for a user? → Model-invocable only.
also compose it? → Both (the default; don't over-restrict).
If you cannot place the skill in one bucket with high confidence, STOP and ask the user via AskUserQuestion (header Invocation) with the three buckets as options — state your leaning and why, and let them confirm. Do not silently guess; the wrong choice either clutters the menu or hides a command users expect. Once decided, wire the surface(s) per §1A / §1B below and set the frontmatter from the table above.
intents and phrases that should fire it:
description: |
<one line: what this does>.
Proactively invoke this skill (do NOT answer directly) when the user
<intent A>, <intent B>, or says "<phrase>", "<phrase>".Specific intents + example phrases = reliable triggering. Vague text = mis-routing.
repo that's the Entry Points table in AGENTS.md: - <user intent> → invoke /<skill>. This is guidance the agent reads, not a code gate, so keep it in sync with the description.
off the routing map. If your host honors a hard opt-out flag (e.g. disable-model-invocation), set it — but on hosts that ignore it, the description is the only control. Use this for irreversible skills (deploy, force-push, destructive cleanup) so they require an explicit ask.
Composability is never declared — any skill file can be composed. What you choose is HOW a parent pulls it in, by whether the parent needs coordination or isolation:
the parent coordinates and weaves into one result. Parent instruction reads:
"Follow <child>/SKILL.md — all sections, full depth. Skip: <list>."
Author this child with clearly-headed, independently-runnable sections (parents skip by header), and don't assume you own the whole conversation.
perspective (adversarial review) or parallelism (N variants/specialists at once). Parent instruction reads:
"Dispatch as a subagent (fresh context). Launch all N in one message. Return the conclusion only."
Author this child to be self-contained (it gets a clean window — say what to read up front) and to return a conclusion, not a transcript.
"No <artifact> found. A) run /<child> now B) skip and proceed."
If accepted, the parent inlines it (mechanism a).
Hide it from the slash menu. A pure building block is reference material, not a user action, so a /<skill> command for it is meaningless. Set user-invocable: false in its frontmatter to keep it out of the / menu. The field governs menu visibility only — it does not affect read-and-follow or subagent composition (those reach the file directly), and the model can still auto-load it when relevant. In this repo every pure methodology skill sets this; entry-point skills leave it unset so they register as slash commands. (A skill wired as both surfaces stays user-invocable — don't set it; code-review is the repo's standing example: it is loaded as composed methodology by the review agents yet is also a direct user action ("review this diff"). It's the only methodology skill kept user-invocable.)
Sequential/coordinated sub-work → inline.
sections survive being inlined/subagented.
user-invocable: false (out of the slash menu, still loadable).Skills DISCOVER their input from conventions and only ask the user as a fallback. Pick the archetype that matches the input type. Default to §2A for documents.
| If the skill operates on... | Use |
|---|---|
| A plan / design / spec document | §2A — convention-based discovery (default) |
| The current branch's code changes | §2B — branch-diff detection |
| A short scalar (URL, time window, ID) | §2C — positional args + flags |
| A problem the user must describe / scope | §2D — ask-first |
The skill takes an OPTIONAL artifact-directory arg and DISCOVERS it when omitted — discovery is the front door, the arg only an override. Declare the hint in frontmatter and read $ARGUMENTS:
argument-hint: "[docs/plans/<id>/]"Resolve the directory with the canonical three-tier block:
$ARGUMENTS names an existing dir → use it verbatim.docs/plans/ that matches ID_RE and holdsthis skill's predecessor artifact (filter by ID_RE / PHASE_FILES). Announce the auto-picked directory before proceeding — never pick a topic silently.
Do NOT hand-roll this block. Copy it verbatim from an existing archetype-A skill (e.g. skills/team-research/SKILL.md) — the dev gate .claude/scripts/check-discovery-consistency.sh asserts byte-identity across every archetype-A skill, so any variant fails the suite. Run it as a single bash call (an agent thread resets cwd between calls).
truth for problem, constraints, approach.
AskUserQuestion (header Setup) with twolabeled options — Run the producer (/team-<producer> to create the missing artifact) or Provide a path (the user supplies docs/plans/<id>/).
No argument. Detect the base branch via a fallback chain, then diff:
BASE=$(gh pr view --json baseRefName -q .baseRefName 2>/dev/null)
[ -z "$BASE" ] && BASE=$(git symbolic-ref refs/remotes/origin/HEAD 2>/dev/null | sed 's@^refs/remotes/origin/@@')
[ -z "$BASE" ] && BASE=main
git diff "origin/$BASE"...HEADNever hardcode the base branch without the chain above it.
Reserve arguments for scalars, never documents. Parse with sensible defaults (/skill 7d → default 7d; /skill <url> --quick); auto-discover when a flag is omitted; always state the default you chose.
Start from what the user already typed. Auto-discover repo context (search, diff, README). Ask ONE question at a time, only for genuine gaps. Don't interrogate when the answer is already on disk. (In this repo, /team-question is the ask-first producer that seeds docs/plans/<id>/ for the archetype-A consumers downstream.)
AskUserQuestion to offer a producer or ask for apath — it never throws.
discovery resolves when omitted — never the document's contents.
There are two token economies; treat them oppositely.
compress it for size's sake — completeness here is cheap. A long, complete skill beats a terse, ambiguous one.
without bound. This is what you ration. Prefer to never pull bytes into the window over summarizing them after the fact.
Be generous with the payload, ruthless with the working set. Execution rules, in order:
<ARTIFACTS>/*.md;read back on demand instead of keeping them resident. When a long task risks losing state, checkpoint to <ARTIFACTS>/checkpoint-<timestamp>.md (branch, done, decisions, remaining, open questions) — append-only, never overwrite. A fresh window resumes from the file, not from replayed history.
variants, adversarial review) goes to a subagent that burns ITS window and returns only the conclusion. Launch independent subagents in parallel (one message). Once you delegate a search, don't also run it yourself.
if available, else targeted grep/glob; pull excerpts and line ranges. Don't cat a large file to "see what's there." Don't re-read a file you just edited to confirm it.
relevant lines — never paste a 1000+ line file. Large irrelevant context causes timeouts and multi-x slowdowns, not just cost.
Gate yourself before acting:
<ARTIFACTS> and re-reading on demand.
where the cost is.
Invocation
AskUserQuestion.disable-model-invocation: true; model-only → user-invocable: false.Input
argument-hint declared; discovery block copied verbatim from anexisting skill (e.g. team-research), not hand-rolled — the dev consistency gate enforces byte-identity.
AskUserQuestion (run producer / provide path) — never throws.main. Args carry a scalaror optional artifact-dir path, never document contents.
Context
<ARTIFACTS>; long tasks checkpoint.~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.