dev/SKILL.md
Common development guidelines for all orchestrated sub-agents. Enforces modular development, systematic debugging, verification-before-completion, change logging, and code quality standards. Always injected by orchestrator.
npx skillsauth add lidge-jun/cli-jaw-skills devInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
Core rules applied to every sub-agent, regardless of role.
This skill covers universal guidelines. For domain-specific work, also read the matching role skill's SKILL.md before writing code in that domain:
| Skill File | Injected When | Covers |
| ---------------------------- | --------------------------------- | ---------------------------------------------------------------------------------------------- |
| dev-frontend/SKILL.md | role=frontend | UI/UX implementation, design aesthetics, component architecture, responsive layouts, animation |
| dev-backend/SKILL.md | role=backend | API design, architecture patterns, database optimization, error handling, middleware |
| dev-data/SKILL.md | role=data | Data pipelines, ETL/ELT, data quality validation, SQL optimization, analysis & reporting |
| dev-security/SKILL.md | Security-sensitive code, role=security | OWASP Top 10, auth hardening, input validation, secrets management, supply chain security |
| dev-testing/SKILL.md | role=testing or testing phase | Test strategy, Playwright browser testing, coverage analysis, contract testing |
| dev-debugging/SKILL.md | Debugging phase (phase 4) | Root cause analysis, boundary instrumentation, hypothesis testing, postmortem |
| dev-code-reviewer/SKILL.md | Any agent, during code review | Review process, quality thresholds, antipattern detection, giving/receiving feedback |
When your task spans multiple domains (e.g., building an API endpoint that returns analyzed data), read each relevant skill file before starting.
When a request has ambiguous scope or unspecified technology, clarify before coding. If the user already specifies clear tech and scope (e.g. "React로 Drawer 만들어줘"), skip this step entirely.
<TechName> — <plain explanation>: include pros/cons relevant to THIS project. ⚠️ Flag options that are complex, expensive, or carry risk (e.g. memory leaks, operational overhead).Consider whether simpler alternatives exist before suggesting heavy frameworks. A 3-page portfolio probably doesn't need Next.js — but if the user has deployment, SEO, or CMS plans, it might. Use judgement, not absolute rules.
One confirmation round: 2-3 options → 1 recommendation → confirm → move on. Don't turn clarification into an interview.
Before broad changes, inspect existing project conventions:
src/, app/, packages/, frontend/, backend/structure/, docs/, architecture/, adr/, devlog/, plans/, changelogsAGENTS.md, CLAUDE.md, .github/copilot-instructions.md, tool-specific instruction filespackage.json, tsconfig*, ESLint/Biome config, sibling file extensionsdev-pabcd skillMUST follow existing conventions when they are clear.
MUST read existing structure/, devlog/, or other source-of-truth logs before broad implementation.
MUST NOT create structure/, devlog/, AGENTS.md, docs folders, or new tooling silently in an existing repo.
If the repo is immature, undocumented, or inconsistent, propose a lightweight source-of-truth structure and ask for approval before creating it.
Before broad changes, show a compact tree and planned touch points.
Broad change means any of:
Preview format:
node_modules, dist, build, .gitGive every file, function, and class a single, clear responsibility.
Hard limits:
| Metric | Threshold | Action | | ------------------- | ----------- | ---------------------------------------- | | File length | >500 lines | Split into focused modules | | Function length | >50 lines | Extract helper functions | | Class methods | >20 methods | Split by responsibility | | Nesting depth | >4 levels | Flatten with early returns or extraction | | Function parameters | >5 | Use an options/config object |
Rules:
import/export) in JS/TS projects — CommonJS require() breaks tree-shaking and static analysis.PLAN.md, PHASES.md, or RCA.md. See dev-pabcd skill for full convention.Investigate the root cause before applying any fix — guessing leads to compounding rework.
For full debugging methodology — boundary instrumentation, pattern analysis, hypothesis testing, and postmortem — see dev-debugging/SKILL.md.
This section covers the emergency stop triggers every agent should recognize:
Red flags — stop and return to root cause investigation:
| Rationalization | Reality | | ---------------------------------------------- | ------------------------------------------------------- | | "Quick fix for now, investigate later" | First fix sets the pattern. Do it right from the start. | | "Just try changing X and see" | Guessing guarantees rework. | | "I don't fully understand but this might work" | Seeing symptoms ≠ understanding root cause. | | "Proposing solutions before investigating" | You haven't done Phase 1. | | "One more fix attempt" (after 2+ failures) | 3+ failures = architectural problem. |
If 3+ fix attempts fail: pause and reassess. Each fix revealing a new problem elsewhere signals an architectural issue, not a simple bug. Question fundamentals: Is this pattern sound? Are we sticking with it through inertia? Discuss with the user before attempting more fixes.
Verify every completion claim with evidence. Run the relevant command fresh, read full output, and confirm the claim matches.
Verification gate (before any completion claim):
| Claim | Requires | Not Sufficient | | ----------------------- | ------------------------------------- | ----------------------------- | | "Tests pass" | Test command output: 0 failures | Previous run, "should pass" | | "Build succeeds" | Build command: exit 0 | "Linter passed" | | "Bug fixed" | Original symptom verified resolved | "Code changed, assumed fixed" | | "Feature complete" | Each requirement checked line-by-line | "Tests pass" | | "Agent completed" | VCS diff shows actual changes | Agent report says "success" | | "Regression test works" | Red-green cycle verified | Test passes once |
Agent delegation: When sub-agents report success, verify independently: check VCS diff → verify changes exist → confirm behavior.
Red flags — unverified claims creeping in:
When a worklog or changelog file is provided, record every change in this format:
### [filename] — [reason for change]
- **Changes**: what was modified and why
- **Impact**: modules that import or depend on this file
- **Verification**: how the change was tested (command + result)
Keep entries factual and concise. One entry per file changed.
import statements. Confirm the target file and export are real.neverthrow) may replace per-call try/catch when failures are surfaced at a verified boundary (see dev-backend/SKILL.md §3). In other cases, use try/catch and log with context (console.error('[module]', error.message)).Watch for these anti-patterns and fix immediately. For the full detection catalog and review-specific guidance, see dev-code-reviewer/SKILL.md §3.
| Anti-Pattern | Symptom | Fix |
| -------------------------- | ----------------------------------- | ------------------------------------- |
| God class | >20 methods, mixed responsibilities | Split by domain into focused classes |
| Long method | >50 lines, does multiple things | Extract into named helper functions |
| Deep nesting | >4 levels of if/for/try | Early returns, guard clauses, extract |
| Magic numbers | Hardcoded 86400, 1024, 3 | Named constants with clear intent |
| Stringly typed | Strings where enums/types belong | Define explicit types or enums |
| Missing error handling | No catch, no input validation | Add try/catch, validate all inputs |
| Floating promises | async call without await | Always await or handle rejection |
| Copy-paste code | Same logic in 2+ places | Extract shared function, import it |
For new JavaScript/TypeScript source files, prefer TypeScript:
.ts for logic and .tsx for typed UI components when the project already supports TypeScript or is greenfield JS/TS..js/.jsx only when the repo is clearly JS-only, build/runtime constraints require JS, or the user asks for JS.tsconfig without user approval.New TypeScript MUST be strict-compatible from the first patch:
any.any requires a nearby justification comment.unknown plus narrowing over any.strict is disabled.Verification:
tsc --noEmit.Add explicit type annotations to all function signatures, return types, and non-trivial variables.
| Language | Rule |
| ---------- | ----------------------------------------------------------------------------------- |
| TypeScript | strict: true in tsconfig. Avoid implicit any; explicit any requires a line comment with justification. |
| Python | Type hints on all function params and returns (def fetch(url: str) -> Response:). |
| Go | Already enforced by compiler — ensure exported types have doc comments. |
| C# / Java | Use nullability annotations (?, @Nullable). Avoid raw Object or dynamic. |
| General | If the language supports a strict/pedantic mode, enable it. |
After every code change, run the project's static analysis toolchain as part of the verification gate (Section 3).
| Toolchain | Command | Must Pass |
| -------------- | ------------------------------------- | ---------------------------- |
| TypeScript | tsc --noEmit | Zero errors |
| Python (typed) | mypy . or pyright | Zero errors on changed files |
| ESLint / Biome | npx eslint . or npx biome check . | Zero errors |
| Go | go vet ./... | Zero issues |
| Rust | cargo clippy -- -D warnings | Zero warnings |
| C# | dotnet build /warnaserror | Zero warnings |
If no static analysis tool is configured in the project, recommend one to the user — but do not add tooling without approval.
When bypassing the type system is unavoidable:
assertIsString(x) > x as string).as unknown as T double-cast requires a linked issue or TODO.# type: ignore[code] must specify the exact mypy error code.When multiple skills are injected simultaneously (e.g., dev + dev-backend + dev-security), token consumption grows quickly. Follow these rules to stay efficient:
Tiered reference loading:
references/) — only load when the task touches that specific topicstreaming.mdExample: For "Add Redis caching to user endpoint":
dev/SKILL.md + dev-backend/SKILL.md + dev-backend/references/core/caching.mdapi-design.md, architecture.md, observability.md, database.md (unless the task touches those areas)Cost awareness for sub-agents: Each sub-agent receives its own copy of injected skills. Minimize skills injected per sub-agent — give only what's needed for that specific sub-task.
development
Goal execution guidelines with PABCD integration, verification tiers, documentation workflow, and AI-driven planning
tools
A CLI tool for making authenticated requests to the X (Twitter) API. Use this skill when you need to post tweets, reply, quote, search, read posts, manage followers, send DMs, upload media, or interact with any X API v2 endpoint.
development
Use this skill any time a spreadsheet file is the primary input or output (.xlsx, .xlsm, .csv, .tsv). This includes: creating, reading, editing, analyzing, or formatting spreadsheets; cleaning messy tabular data; converting between formats; and data visualization with charts. Also use for pandas-based data analysis when the deliverable is a spreadsheet. Do NOT trigger when the primary deliverable is a Word document, HTML report, standalone Python script, database pipeline, or Google Sheets API integration.
tools
Use this skill when the user wants to build a financial model, 3-statement model, DCF valuation, cap table, scenario analysis, or financial projections in Excel. Trigger on: 'financial model', '3-statement model', 'DCF', 'cap table', 'pro forma', 'projections', 'sensitivity analysis', 'waterfall', 'debt schedule', 'break-even', 'discounted cash flow', 'capitalization table', 'fundraising model', 'WACC calculation', 'scenario analysis model'. Input is a text prompt with assumptions. Output is a single .xlsx file with formula-driven, interconnected statement sheets.