Unit Tests
thedaviddias/Front-End-Checklist
A skill your agent uses when reviewing CI coverage, automated checks, or test strategy related to Write unit tests.
Generate stories about institutional outcasts given impossible mandates with minimal resources.
$ npx skills add jwynia/agent-skills --skill underdog-unit -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install jwynia/agent-skills underdog-unit --agent claude-codeProject scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).
$ git clone --depth 1 https://github.com/jwynia/agent-skills.git skills-src && mkdir -p .claude/skills && cp -r skills-src/skills/creative/fiction/character/underdog-unit .claude/skills/underdog-unit && rm -rf skills-srcUse ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.
Claude Code skills documentation · loads skills from .claude/skills/
Install the "underdog-unit" agent skill from https://github.com/jwynia/agent-skills/tree/main/skills/creative/fiction/character/underdog-unit into .claude/skills/underdog-unit/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "underdog-unit", then confirm the skill loads.Claude Code copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$skill-installer install https://github.com/jwynia/agent-skills/tree/main/skills/creative/fiction/character/underdog-unitType this inside Codex. $skill-installer <name> installs a curated skill from openai/skills. The installer writes to $CODEX_HOME/skills (default ~/.codex/skills). Restart Codex if the skill does not show up.
$ npx skills add jwynia/agent-skills --skill underdog-unit -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install jwynia/agent-skills underdog-unit --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/jwynia/agent-skills.git skills-src && mkdir -p .agents/skills && cp -r skills-src/skills/creative/fiction/character/underdog-unit .agents/skills/underdog-unit && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "underdog-unit" agent skill from https://github.com/jwynia/agent-skills/tree/main/skills/creative/fiction/character/underdog-unit into .agents/skills/underdog-unit/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "underdog-unit", then confirm the skill loads.Codex copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add jwynia/agent-skills --skill underdog-unit -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install jwynia/agent-skills underdog-unit --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/jwynia/agent-skills.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/skills/creative/fiction/character/underdog-unit .cursor/skills/underdog-unit && rm -rf skills-srcUse ~/.cursor/skills/ instead of .cursor/skills for a personal install.
Cursor skills documentation · loads skills from .cursor/skills/, .agents/skills/, .claude/skills/, .codex/skills/
Install the "underdog-unit" agent skill from https://github.com/jwynia/agent-skills/tree/main/skills/creative/fiction/character/underdog-unit into .cursor/skills/underdog-unit/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "underdog-unit", then confirm the skill loads.Cursor copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gemini skills install https://github.com/jwynia/agent-skills.git --path skills/creative/fiction/character/underdog-unit--scope user (default) or --scope workspace; --path is the subfolder of the repo that holds the skill; --consent skips the security confirmation prompt.
$ npx skills add jwynia/agent-skills --skill underdog-unit -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install jwynia/agent-skills underdog-unit --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/jwynia/agent-skills.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/skills/creative/fiction/character/underdog-unit .gemini/skills/underdog-unit && rm -rf skills-srcUse ~/.gemini/skills/ instead of .gemini/skills for a personal install, then run /skills reload.
Gemini CLI skills documentation · loads skills from .gemini/skills/, .agents/skills/
Install the "underdog-unit" agent skill from https://github.com/jwynia/agent-skills/tree/main/skills/creative/fiction/character/underdog-unit into .gemini/skills/underdog-unit/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "underdog-unit", then confirm the skill loads.Gemini CLI copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gh skill install jwynia/agent-skills underdog-unitInstalls for Copilot at project scope by default; add --scope user for a personal install. Preview a skill first with gh skill preview. Needs GitHub CLI 2.90.0 or later (public preview).
$ npx skills add jwynia/agent-skills --skill underdog-unit -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/jwynia/agent-skills.git skills-src && mkdir -p .github/skills && cp -r skills-src/skills/creative/fiction/character/underdog-unit .github/skills/underdog-unit && rm -rf skills-srcUse ~/.copilot/skills/ instead of .github/skills for a personal install. Commit .github/skills so cloud agent and code review can use it.
GitHub Copilot skills documentation · loads skills from .github/skills/, .claude/skills/, .agents/skills/
Install the "underdog-unit" agent skill from https://github.com/jwynia/agent-skills/tree/main/skills/creative/fiction/character/underdog-unit into .github/skills/underdog-unit/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "underdog-unit", then confirm the skill loads.GitHub Copilot copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add jwynia/agent-skills --skill underdog-unit -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install jwynia/agent-skills underdog-unit --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/jwynia/agent-skills.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/skills/creative/fiction/character/underdog-unit .opencode/skills/underdog-unit && rm -rf skills-srcUse ~/.config/opencode/skills/ instead of .opencode/skills for a personal install.
OpenCode skills documentation · loads skills from .opencode/skills/, .claude/skills/, .agents/skills/
Install the "underdog-unit" agent skill from https://github.com/jwynia/agent-skills/tree/main/skills/creative/fiction/character/underdog-unit into .opencode/skills/underdog-unit/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "underdog-unit", then confirm the skill loads.OpenCode copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
underdog-unitGenerate stories about institutional outcasts given impossible mandates with minimal resources.
Underdog Unit is an agent skill from jwynia/agent-skills. Generate stories about institutional outcasts given impossible mandates with minimal resources. Use when you want team dynamics in hostile institutions, David vs. Goliath within organizations, or narrative tension from constraint-driven creativity.
Its SKILL.md is about 3.9k tokens, which your agent loads only when the skill is triggered. It is a single SKILL.md file with no bundled scripts.
The licence is MIT.
12 steps, taken from the step headings in SKILL.md.
Read from SKILL.md and the folder at commit e02ec7e. It shows what the files ask for, not the result of running them.
Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.
From allowed-tools in the SKILL.md frontmatter.
No scripts in the folder and no shell commands in SKILL.md.
From the folder's file list and the shell code blocks in SKILL.md.
No URLs in SKILL.md.
From URLs in SKILL.md, links to its own repository left out.
Names no API keys, tokens, secrets or passwords.
From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.
Underdog Unit loads about 3.9k tokens when it runs. Until then it costs about 66 tokens; SKILL.md has 1,750 words of instructions outside code blocks.
Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.
The automated check found no risky patterns in SKILL.md.
Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); files beside SKILL.md are not scanned.
The full file from jwynia/agent-skills at commit e02ec7e, republished under its MIT licence (© jwynia). 1,750 words, ~3,924 tokens.
.claude/skills/underdog-unit/SKILL.md (or your agent's skills folder).You help writers create stories using the "Underdog Unit" formula: institutional outcasts given impossible mandates with minimal resources, creating pressure cookers for character development and creative problem-solving.
Outcasts + Impossible Mandate + Severe Constraints = Narrative Tension
The power lies in:
| Mandate Type | Enemy | Examples |
|---|---|---|
| Cold Cases | Time | Old evidence, faded memories, dead witnesses |
| Impossible/Unsolvable | Complexity | Cases that stumped the best |
| Cross-Jurisdictional | Bureaucracy | Navigating multiple systems |
| Internal Affairs | Institution | Investigating their own |
| Experimental/New Threats | The Unknown | Cyber, biotech, emerging crimes |
| PR Disasters | Perception | High-profile failures |
| Political Hot Potatoes | Politics | Cases no one wants |
| Reject Pile | Apathy | Cases deemed unimportant |
Physical Space: Basement storage, abandoned wings, trailers, repurposed areas
Budget: Shoestring, self-funded, borrowed, scavenged, barter economy
Personnel: Skeleton crew, part-time, borrowed, probationary, volunteers
Authority: Limited jurisdiction, advisory only, unofficial, no arrest powers
Time: Sunset clause, probationary period, case-by-case renewal
Technology: Outdated, no database access, analog only, DIY solutions
Political: No leadership support, active sabotage, scapegoat status
| Archetype | Description | Story Function |
|---|---|---|
| The Disgraced Expert | Former star with catastrophic failure | Seeking redemption |
| The Rule-Breaker | Gets results through unorthodox methods | Values justice over procedure |
| The Burnout | Lost faith in the system | Rediscovers purpose |
| The Rookie | Inexperienced but eager | Fresh perspective, hasn't learned "impossible" |
| The Outsider | Civilian/reformed criminal/foreign expert | Outside knowledge |
| The Has-Been | Past glory, current irrelevance | Institutional memory |
| The Whistleblower | Did the right thing at wrong time | Principled but isolated |
| The Misfit | Doesn't fit institutional culture | Competent but "difficult" |
| Leadership Type | Relationship to Unit |
|---|---|
| Hostile | Wants them to fail, actively undermines |
| Indifferent | Forgot they exist, benign neglect |
| Protective | One champion shields from bureaucracy |
| Conditional | Support contingent on results |
| Divided | Competing agendas, mixed messages |
What enemy drives your narrative?
Pick 3-4 for maximum friction:
Build complementary dysfunctions:
Define victory:
Plan increasing pressures:
Personal → Professional → Community → Systemic
Official Designations:
Unofficial Names:
| Pitfall | Solution |
|---|---|
| Too many constraints | Believability breaks if literally everything is against them |
| Unearned competence | Team needs to struggle before succeeding |
| Deus ex machina resources | Solutions should come from established elements |
| Perfect team harmony | Internal conflict drives development |
| Institutional conversion | System rarely admits it was wrong |
| Consequence-free rule breaking | Actions should have prices |
The constraint becomes the catalyst; the outcasts become the heroes; the impossible becomes the inevitable. The formula works because external struggles mirror internal ones—characters fighting personal demons also fight institutional ones.
context/output-config.md in the projectstories/units/ or explorations/stories/Pattern: {unit-name}-underdog-{date}.md
context/output-config.md{unit-name}-underdog-{date}.mdTrigger phrases: "design the complete unit", "plan the full series", "how does the institution work"
| Task | Agent Type | When to Spawn |
|---|---|---|
| Institutional research | general-purpose | When modeling on real organizations |
| Character development | general-purpose | When deepening individual outcasts |
Pattern: Stacking every possible limitation—no budget, no space, no authority, hostile leadership, skeleton crew, outdated tech, AND a sunset clause. Why it fails: Beyond 3-4 constraints, the situation becomes implausible. Why would any institution set up something designed to fail this completely? Readers lose suspension of disbelief. Fix: Pick 3-4 constraints maximum. Make them feel organic to the institution's logic. One powerful constraint (active sabotage from leadership) often works better than five medium ones.
Pattern: The outcast team immediately gels and starts solving cases through brilliant unconventional methods. Why it fails: The formula requires earning competence. If they're immediately effective, they're not really underdogs—they're just a team with branding problems. The struggle IS the story. Fix: Build in early failures. Show methods that don't work before finding ones that do. Let team friction create real problems before forging bonds.
Pattern: By the end, the institution recognizes the unit's value, gives them resources, and admits it was wrong. Why it fails: Real institutions rarely admit systemic error. Having the parent institution validate the outcasts undermines the thematic core about working in the margins. Fix: Victories should be grudging acknowledgments at best. The unit might survive, but the institution's culture won't fundamentally change. Success comes despite the system, not because it evolves.
Pattern: Each outcast has exactly the skill the team needs, and their dysfunctions never actually impede the work. Why it fails: The formula requires friction. If the Burnout's apathy never costs them a case, if the Rule-Breaker's methods never backfire, the character flaws are cosmetic. Fix: Let dysfunctions have real consequences. The Has-Been's outdated methods should fail sometimes. The Whistleblower's principles should create genuine dilemmas, not just flavor.
Pattern: When the plot requires it, someone magically has a contact, favor, or skill that wasn't established. Why it fails: The constraint-creativity dynamic only works if constraints are real. Pulling resources from nowhere violates the premise. The unit can't be scrappy AND have whatever they need. Fix: Establish all key resources, contacts, and skills early. Solutions should emerge from previously established elements. If they need something new, acquiring it should be a story beat, not a convenience.
| Skill | What it provides |
|---|---|
| character-arc | Individual transformation arcs for team members |
| positional-revelation | How mundane roles create unexpected access |
| worldbuilding | Institutional systems to work within and against |
| Skill | What this provides |
|---|---|
| dialogue | Team dynamics and conflict for dialogue scenes |
| scene-sequencing | Escalating pressure structure for pacing |
| endings | Earned resolution through team development |
| Skill | Relationship |
|---|---|
| moral-parallax | Underdog-unit creates institutional pressure; moral-parallax explores the ethical complexity of working within corrupt systems |
| story-sense | Use story-sense to diagnose team dynamics problems; underdog-unit provides the formula structure |
© jwynia, MIT. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file
Just SKILL.md in skills/creative/fiction/character/underdog-unit of jwynia/agent-skills.
Open the folder on GitHubat commit e02ec7e
Underdog Unit next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.
| Skill | Stars | Used in | Tokens | Auto-check | Licence | Repo updated |
|---|---|---|---|---|---|---|
| Underdog Unit this skilljwynia/agent-skills | 170 | — | ~3.9k | Automated safety check: Pass | MIT | |
| Unit Teststhedaviddias/Front-End-Checklist | 74k | — | ~382 | Automated safety check: Pass | MIT | |
| Warp Rust Unit Testswarpdotdev/warp | 65k | 1 repos | ~3.4k | Automated safety check: Pass | AGPL-3.0 | |
| Story ReadinessDonchitos/Claude-Code-Game-Studios | 26k | — | ~6.9k | Automated safety check: Pass | MIT | |
| Job Storiesphuryn/pm-skills | 27k | — | ~743 | Automated safety check: Pass | MIT | |
| User Storiesphuryn/pm-skills | 27k | — | ~748 | Automated safety check: Pass | MIT |
thedaviddias/Front-End-Checklist
A skill your agent uses when reviewing CI coverage, automated checks, or test strategy related to Write unit tests.
warpdotdev/warp
Guides writing, improving and running crate-level Rust unit tests in the Warp codebase, and says when a unit test is the wrong level.
Donchitos/Claude-Code-Game-Studios
Is a story implementation-ready?. An agent skill from Donchitos/Claude-Code-Game-Studios.
phuryn/pm-skills
Turns a feature into job stories in the When, I want to, so I can format, each with six to eight acceptance criteria tied to the user's situation and outcome.
phuryn/pm-skills
Create user stories following the 3 C's (Card, Conversation, Confirmation) and INVEST criteria with descriptions, design links, and acceptance criteria.
Donchitos/Claude-Code-Game-Studios
Break one epic into implementable stories embedding TR-ID, ADR guidance, acceptance criteria.
jwynia/agent-skills
Diagnose devcontainer configuration problems and guide development environment setup.
jwynia/agent-skills
Create distinctive, production-grade frontend interfaces with high design quality.
jwynia/agent-skills
Orchestrate agile development workflows for Gitea repositories using the tea CLI.
jwynia/agent-skills
Generate game assets using AI image generation APIs (DALL-E, Replicate, fal.ai) and prepare them for Godot.
jwynia/agent-skills
Develop AI agents, tools, and workflows with Mastra v1 Beta and Hono servers.
jwynia/agent-skills
Create and manipulate PowerPoint PPTX files programmatically.
Generate stories about institutional outcasts given impossible mandates with minimal resources. Underdog Unit is an agent skill from jwynia/agent-skills. Generate stories about institutional outcasts given impossible mandates with minimal resources.
Underdog Unit fits situations like: you want team dynamics in hostile institutions.
Run `npx skills add jwynia/agent-skills --skill underdog-unit -a claude-code`. Or copy the skill folder (skills/creative/fiction/character/underdog-unit in jwynia/agent-skills) into .claude/skills/underdog-unit in your project. Claude Code loads it when a task matches its description.
Run `npx skills add jwynia/agent-skills --skill underdog-unit -a codex`. Or copy the skill folder (skills/creative/fiction/character/underdog-unit in jwynia/agent-skills) into .agents/skills/underdog-unit in your project. Codex loads it when a task matches its description.
Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add jwynia/agent-skills --skill underdog-unit -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/underdog-unit, .gemini/skills/underdog-unit, .github/skills/underdog-unit and .opencode/skills/underdog-unit in your project.
SKILL.md names no scripts, command-line tools or credentials: Underdog Unit is instructions for the agent only.
SKILL.md contains no URLs. Any network use would come from the scripts or tools the agent runs. This is read from the text; nothing was executed.
Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. Review the folder before installing.
Underdog Unit is published under the MIT licence (declared in SKILL.md). It allows redistribution, so the full SKILL.md is shown on this page.
About 3.9k tokens (SKILL.md is roughly 16k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.
Skills that share tags, products or a category with Underdog Unit: Unit Tests (thedaviddias/Front-End-Checklist, 74k stars), Warp Rust Unit Tests (warpdotdev/warp, 65k stars), Story Readiness (Donchitos/Claude-Code-Game-Studios, 26k stars) and Job Stories (phuryn/pm-skills, 27k stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
jwynia (a GitHub user) maintains it in jwynia/agent-skills, which has 170 GitHub stars. The repository holds 111 skills in this directory. The repository was last updated on February 24, 2026.
Source: jwynia/agent-skills on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.