Install any skill in seconds. Free to start, no credit card required.
Get Started Free →Create and manage task documents in the docs/todo/ workflow. Use when creating new tasks, updating task status, or moving tasks between workflow stages. Provides complete task lifecycle management with verification.
.claude/skills/leoyeai-ogt-docs-create-task/SKILL.md| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-01 | ✗→✓ | ▲ Improved | 268% | 0% |
| case-02 | ✗→✓ | ▲ Improved | 3072% | 0% |
| case-04 | ✗→✓ | ▲ Improved | 387% | 0% |
| case-05 | ✗→✓ | ▲ Improved | 655% | 0% |
| case-06 | ✗→✓ | ▲ Improved | 625% | 0% |
Complete guide for creating and managing tasks in the docs-first workflow.
Tasks are the unit of work in the docs-first system. Each task is a folder that moves through workflow stages, accumulating documentation and signals as it progresses.
mermaidflowchart LR subgraph stages ["Task Lifecycle"] P[pending] --> IP[in_progress] IP --> R[review] R --> D[done] IP --> B[blocked] B --> IP R --> REJ[rejected] REJ --> P D --> IMP[implemented] end style P fill:#fef3c7 style IP fill:#dbeafe style R fill:#e0e7ff style B fill:#fee2e2 style REJ fill:#fecaca style D fill:#d1fae5 style IMP fill:#a7f3d0
docs/todo/
├── pending/ # Tasks not yet started
│ └── {task_slug}/
│ ├── task.md # Primary task definition
│ ├── context.md # Background information (optional)
│ ├── .version # Schema version
│ └── .priority # Priority level (content: critical|high|medium|low)
│
├── in_progress/ # Tasks being actively worked on
│ └── {task_slug}/
│ ├── task.md
│ ├── progress.md # Work log and updates
│ ├── .version
│ ├── .priority
│ ├── .assigned_to_{agent} # Who's working on it
│ └── .started_at # Timestamp when started
│
├── review/ # Tasks awaiting review
│ └── {task_slug}/
│ ├── task.md
│ ├── progress.md
│ ├── implementation.md # What was done
│ ├── .version
│ ├── .ready_for_review # Empty signal
│ ├── .pr_link # PR URL if applicable
│ └── .review_requested_at
│
├── blocked/ # Tasks that cannot proceed
│ └── {task_slug}/
│ ├── task.md
│ ├── progress.md
│ ├── .version
│ ├── .blocked # Empty signal
│ ├── .blocked_reason # Why blocked (content)
│ ├── .blocked_at # When blocked
│ └── .depends_on # What it's waiting for
│
├── done/ # Completed and verified tasks
│ └── {task_slug}/
│ ├── task.md
│ ├── progress.md
│ ├── implementation.md
│ ├── verification.md # How it was verified
│ ├── .version
│ ├── .verified # Empty signal - REQUIRED
│ ├── .completed_at # Completion timestamp
│ └── .verified_by_{agent} # Who verified
│
├── rejected/ # Tasks that were declined
│ └── {task_slug}/
│ ├── task.md
│ ├── .version
│ ├── .rejected # Empty signal
│ ├── .rejected_reason # Why rejected (content)
│ └── .rejected_at # When rejected
│
└── implemented/ # Done tasks that are deployed/released
└── {task_slug}/
├── task.md
├── implementation.md
├── verification.md
├── .version
├── .verified
├── .completed_at
├── .implemented_at # When deployed
└── .release_version # Which release included itTasks that are defined but not yet started.
pending/
└── fuzzy_search/
├── task.md
├── context.md
├── .version
└── .prioritymarkdown# Task: Fuzzy Search Implementation ## Summary Replace substring search with fuzzy indexed search using MiniSearch. ## Objectives - Install MiniSearch library - Create SearchIndexService - Refactor GlobalSearch component - Add debounce to search input ## Acceptance Criteria - [ ] Typing "fir" returns "Fireball", "Fire Elemental", etc. - [ ] Results ranked by relevance - [ ] Search responds within 16ms - [ ] TypeScript compiles clean ## Dependencies - None ## Estimated Effort Medium (2-4 hours) ## References - MiniSearch docs: https://lucaong.github.io/minisearch/ - Current search: front/components/features/GlobalSearch.tsx
markdown# Context: Fuzzy Search ## Current State GlobalSearch.tsx uses `String.toLowerCase().includes()` for matching. No ranking, no debounce, no fuzzy matching. ## User Request "Global search with ctrl+k, should be instant, indexed, fuzzy. If I search fire just by typing fir I should get instantly a list." ## Technical Decision MiniSearch chosen over: - Fuse.js (heavier, slower on large datasets) - Lunr (no fuzzy matching) MiniSearch is 6KB gzipped, used by VitePress.
json{ "schema": "1.0", "created": "2026-02-05T10:00:00Z" }
highTasks actively being worked on.
in_progress/
└── card_variants/
├── task.md
├── progress.md
├── .version
├── .priority
├── .assigned_to_claude
└── .started_atmarkdown# Task: Card Variant System Expansion ## Summary Add Condensed, ListItemCondensed, and stub Quaternary/Penta card variants. ## Objectives - Update UICardFrameType enum - Create \*Condensed.tsx components - Create \*ListItemCondensed.tsx components - Stub Quaternary and Penta variants - Update all \*CardMain.tsx orchestrators ## Acceptance Criteria - [ ] Condensed renders 48-64px tile with art, border, icon badge - [ ] ListItemCondensed renders 32px single-line row - [ ] Quaternary/Penta exist as stubs - [ ] All orchestrators route to new variants - [ ] TypeScript compiles clean ## Dependencies - None ## Estimated Effort Large (4-8 hours)
markdown# Progress: Card Variants ## 2026-02-05 10:30 - Started - Read existing card components - Identified 8 entity types needing variants - Created implementation plan ## 2026-02-05 11:00 - UICardFrameType Updated - Added Condensed, Penta, ListItem, ListItemCondensed to type - File: front/data/app-generics.ts:82 ## 2026-02-05 11:30 - CreatureCardCondensed Created - Created front/components/compendium/CreatureCardCondensed.tsx - 64x64 portrait, rarity border, type icon badge - Tooltip on hover shows name ## Current Status - [x] Type definition updated - [x] CreatureCardCondensed - [ ] ItemCardCondensed - [ ] AbilityCardCondensed - [ ] Remaining entity types - [ ] ListItemCondensed variants - [ ] Quaternary/Penta stubs - [ ] Orchestrator updates
(empty file - presence indicates assignment)2026-02-05T10:30:00ZTasks completed and awaiting review.
review/
└── spell_routes/
├── task.md
├── progress.md
├── implementation.md
├── .version
├── .ready_for_review
├── .pr_link
└── .review_requested_atmarkdown# Task: Wire SpellDetailView into Router ## Summary SpellDetailView.tsx exists but is not routed. Wire it into the app router. ## Objectives - Add route to APP_ROUTES - Add Route element in App.tsx - Verify component loads correctly ## Acceptance Criteria - [ ] /spells/:slug route works - [ ] SpellDetailView renders with spell data - [ ] Navigation from spell cards works - [ ] TypeScript compiles clean
markdown# Progress: Spell Routes ## 2026-02-05 09:00 - Started - Located SpellDetailView at front/app/(main)/compendium/SpellDetailView.tsx - Reviewed existing route patterns ## 2026-02-05 09:15 - Implementation Complete - Added spell_detail to APP_ROUTES in app-configs.ts - Added Route element in App.tsx - Tested with /spells/fireball - works - TypeScript compiles clean
`markdown# Implementation: Spell Routes ## Files Changed ### front/data/app-configs.ts Added route configuration:
spell_detail: { path: '/spells/:slug', label: 'Spell Detail', }
Added import and route:
typescriptimport SpellDetailView from './(main)/compendium/SpellDetailView'; // ... <Route path="/spells/:slug" element={<SpellDetailView />} />
#### .ready_for_review(empty file)
#### .pr_linkhttps://github.com/org/repo/pull/123
#### .review_requested_at2026-02-05T09:30:00Z
---
## Stage: blocked/
Tasks that cannot proceed due to dependencies or blockers.
### Example: blocked/auth_refactor/
blocked/ └── auth_refactor/ ├── task.md ├── progress.md ├── .version ├── .blocked ├── .blocked_reason ├── .blocked_at └── .depends_on
`#### task.md
Refactor AuthService to support multiple OAuth providers.
`#### progress.md
#### .blocked
(empty file)
#### .blocked_reason
Requires backend changes: Steam OAuth provider must be added to Strapi before frontend can implement Steam login flow. Backend task not yet created.
#### .blocked_at
2026-02-03T15:00:00Z
#### .depends_on
---
## Stage: done/
Completed tasks that have been **verified**.
### Example: done/ogt_cli_commands/
done/ └── ogt_cli_commands/ ├── task.md ├── progress.md ├── implementation.md ├── verification.md ├── .version ├── .verified ├── .completed_at └── .verified_by_claude
#### task.md
Create generic file/data validation CLI tools under ogt check.
#### verification.md
2026-01-30
bash$ ogt check --help # ✅ Shows subcommands: assets, slugs, indexed, data, from-list $ ogt check assets --help # ✅ Shows usage and flags $ ogt check slugs --help # ✅ Shows usage and flags $ ogt check indexed --help # ✅ Shows usage and flags $ ogt check data --help # ✅ Shows usage and flags
`### Functional Tests
$ ogt check indexed creatures
$ ogt check slugs front/data/app-creatures -r
$ ogt check assets static/public/creatures portrait.png -r
### Exit Codes
$ ogt check indexed creatures && echo "pass"
$ ogt check indexed nonexistent || echo "fail"
## Verification Result
**PASS** - All acceptance criteria met
(empty file - REQUIRED for done/ status)
2026-01-30T14:00:00Z
(empty file)
Tasks that were declined and will not be implemented.
rejected/
└── legacy_api_compat/
├── task.md
├── .version
├── .rejected
├── .rejected_reason
└── .rejected_at
markdown# Task: Legacy API Compatibility Layer ## Summary Create compatibility layer for v0 API endpoints. ## Objectives - Map v0 endpoints to v1 services - Maintain backward compatibility for 6 months - Log deprecation warnings ## Acceptance Criteria - [ ] All v0 endpoints work - [ ] Deprecation headers sent - [ ] Usage logging enabled
(empty file)Decision: Clean break over compatibility layer.
Rationale:
1. No external consumers of v0 API
2. Maintenance burden outweighs benefits
3. v0 endpoints have security issues
4. Better to document migration path
Alternative: Create migration guide instead.
See: docs/guides/v0_to_v1_migration/2026-02-01T09:00:00ZTasks that are done AND deployed/released to production.
implemented/
└── creatures_index/
├── task.md
├── implementation.md
├── verification.md
├── .version
├── .verified
├── .completed_at
├── .implemented_at
└── .release_version2026-02-02T10:00:00Zv1.2.0mermaidflowchart TD A[User Request] --> B{Task Defined?} B -->|No| C[Create task.md] C --> D[Add context.md if needed] D --> E[Set .priority] E --> F[Add .version] F --> G[Place in pending/] B -->|Yes| H[Update existing task]
Steps:
docs/todo/pending/{task_slug}/task.md with Summary, Objectives, Acceptance Criteriacontext.md for background.priority with level (critical/high/medium/low).version with schema versionbash# Move from pending to in_progress mv docs/todo/pending/{task_slug} docs/todo/in_progress/ # Add assignment signal touch docs/todo/in_progress/{task_slug}/.assigned_to_{agent} # Add start timestamp echo "$(date -Iseconds)" > docs/todo/in_progress/{task_slug}/.started_at # Create progress log touch docs/todo/in_progress/{task_slug}/progress.md
bash# Move to blocked mv docs/todo/in_progress/{task_slug} docs/todo/blocked/ # Add blocked signals touch docs/todo/blocked/{task_slug}/.blocked echo "Reason here" > docs/todo/blocked/{task_slug}/.blocked_reason echo "$(date -Iseconds)" > docs/todo/blocked/{task_slug}/.blocked_at
bash# Move to review mv docs/todo/in_progress/{task_slug} docs/todo/review/ # Add review signals touch docs/todo/review/{task_slug}/.ready_for_review echo "$(date -Iseconds)" > docs/todo/review/{task_slug}/.review_requested_at # Add implementation docs # Create implementation.md documenting what was done
CRITICAL: Must verify before marking done!
bash# 1. Run ALL acceptance criteria checks # 2. Document in verification.md # 3. ONLY if all pass: # Move to done mv docs/todo/review/{task_slug} docs/todo/done/ # Add completion signals touch docs/todo/done/{task_slug}/.verified # REQUIRED echo "$(date -Iseconds)" > docs/todo/done/{task_slug}/.completed_at touch docs/todo/done/{task_slug}/.verified_by_{agent}
bash# Move to rejected mv docs/todo/review/{task_slug} docs/todo/rejected/ # Add rejection signals touch docs/todo/rejected/{task_slug}/.rejected echo "Reason here" > docs/todo/rejected/{task_slug}/.rejected_reason echo "$(date -Iseconds)" > docs/todo/rejected/{task_slug}/.rejected_at
| Signal | Stage | Meaning | | ------------------- | ------------------- | -------------------------------------- | | .blocked | blocked/ | Task cannot proceed | | .ready_for_review | review/ | Ready for review | | .verified | done/, implemented/ | REQUIRED - Implementation verified | | .rejected | rejected/ | Task declined |
| Signal | Stage | Meaning | | ---------------------- | ------------ | ------------------- | | .assigned_to_{agent} | in_progress/ | Who's working on it | | .verified_by_{agent} | done/ | Who verified it | | .approved_by_{name} | any | Who approved |
| Signal | Content | Example | | ------------------ | ------------------- | ------------------------------------- | | .version | JSON schema version | {"schema": "1.0", "created": "..."} | | .priority | Priority level | high | | .blocked_reason | Why blocked | Free text explanation | | .rejected_reason | Why rejected | Free text explanation | | .depends_on | Dependencies | List of dependencies | | .pr_link | PR URL | https://github.com/... | | .started_at | ISO timestamp | 2026-02-05T10:00:00Z | | .completed_at | ISO timestamp | 2026-02-05T14:00:00Z | | .blocked_at | ISO timestamp | 2026-02-05T12:00:00Z | | .rejected_at | ISO timestamp | 2026-02-05T09:00:00Z | | .implemented_at | ISO timestamp | 2026-02-05T16:00:00Z | | .release_version | Version string | v1.2.0 |
markdown# Task: {Title} ## Summary One paragraph describing what needs to be done and why. ## Objectives - Specific objective 1 - Specific objective 2 - Specific objective 3 ## Acceptance Criteria - [ ] Verifiable criterion 1 - [ ] Verifiable criterion 2 - [ ] Verifiable criterion 3 - [ ] TypeScript compiles clean (if applicable) ## Dependencies - {dependency} or "None" ## Estimated Effort {Tiny|Small|Medium|Large|XLarge} ({time estimate}) ## References - Relevant link 1 - Relevant file path - Related task
NEVER mark a task as done without verification.
markdown## For each acceptance criterion: 1. IDENTIFY: What command/action proves this criterion? 2. RUN: Execute the verification 3. CAPTURE: Record the output 4. ASSESS: Does it pass? ## Required Verifications by Type: ### File Creation - [ ] File exists: `test -f {path} && echo "EXISTS"` - [ ] File is exported (if module): `grep "export" {index_file}` ### Dependency Installation - [ ] In package.json: `grep "{package}" package.json` - [ ] Can import: Create test file with import ### Route Addition - [ ] In router: `grep "{route}" {router_file}` - [ ] Navigable: Test in browser ### Pattern Removal - [ ] Zero matches: `grep -r "{pattern}" {path} | wc -l` = 0 ### Type Addition - [ ] Type exists: `grep "type {Name}" {types_file}` - [ ] Compiles: `tsc --noEmit` or equivalent ### General - [ ] TypeScript compiles: Run type checker - [ ] Tests pass: Run test suite - [ ] No console errors: Check browser/runtime
| Mistake | Why It's Wrong | Correct Approach | | --------------------------------- | --------------------------- | ----------------------------- | | Moving to done/ without .verified | No proof of completion | Verify first, then move | | Trusting task.md checkboxes | Checkboxes can be wrong | Run actual verification | | Skipping implementation.md | No record of what changed | Document all changes | | Empty verification.md | No proof of verification | Record actual test output | | Multiple tasks in progress | Context switching waste | Finish one, then start next | | Editing task.md in done/ | History should be immutable | Create follow-up task instead |
| Case | Status | Duration (ms) | Turns | Tokens | Tool calls | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Without | With | Δ | Without | With | Δ | Without | With | Δ | Without | With | Δ | ||
case-01 | fail→pass | 10,078 | 8,423 | -16% | 1 | 1 | 0% | 1,970 | 7,252 | +268% | 0 | 0 | — |
case-15 | fail→fail | 8,325 | 8,579 | +3% | 1 | 1 | 0% | 1,415 | 7,226 | +411% | 0 | 0 | — |
case-02 | fail→pass | 5,239 | 5,970 | +14% | 1 | 1 | 0% | 212 | 6,724 | +3072% | 0 | 0 | — |
case-03 | fail→fail | 22,441 | 7,712 | -66% | 1 | 1 | 0% | 4,209 | 6,124 | +45% | 0 | 0 | — |
case-04 | fail→pass | 7,545 | 8,000 | +6% | 1 | 1 | 0% | 1,361 | 6,634 | +387% | 0 | 0 | — |
case-05 | fail→pass | 5,370 | 4,948 | -8% | 1 | 1 | 0% | 872 | 6,586 | +655% | 0 | 0 | — |
case-06 | fail→pass | 5,818 | 6,571 | +13% | 1 | 1 | 0% | 967 | 7,011 | +625% | 0 | 0 | — |
case-07 | fail→pass | 4,591 | 3,020 | -34% | 1 | 1 | 0% | 789 | 6,297 | +698% | 0 | 0 | — |
case-08 | fail→pass | 13,419 | 5,886 | -56% | 1 | 1 | 0% | 2,212 | 6,804 | +208% | 0 | 0 | — |
case-09 | pass→pass | 12,670 | 3,374 | -73% | 1 | 1 | 0% | 2,049 | 6,244 | +205% | 0 | 0 | — |
case-10 | fail→pass | 15,337 | 2,558 | -83% | 1 | 1 | 0% | 1,111 | 6,130 | +452% | 0 | 0 | — |
case-11 | pass→pass | 9,688 | 5,023 | -48% | 1 | 1 | 0% | 1,562 | 6,650 | +326% | 0 | 0 | — |
case-12 | fail→pass | 9,534 | 1,965 | -79% | 1 | 1 | 0% | 1,340 | 6,001 | +348% | 0 | 0 | — |
case-13 | fail→pass | 12,463 | 2,726 | -78% | 1 | 1 | 0% | 2,009 | 6,097 | +203% | 0 | 0 | — |
case-14 | pass→pass | 8,140 | 3,212 | -61% | 1 | 1 | 0% | 1,261 | 6,257 | +396% | 0 | 0 | — |
case-16 | fail→pass | 10,362 | 6,285 | -39% | 1 | 1 | 0% | 1,713 | 6,808 | +297% | 0 | 0 | — |
case-17 | fail→pass | 10,090 | 2,264 | -78% | 1 | 1 | 0% | 1,866 | 6,100 | +227% | 0 | 0 | — |
case-18 | fail→pass | 10,604 | 1,703 | -84% | 1 | 1 | 0% | 1,816 | 5,936 | +227% | 0 | 0 | — |
case-19 | fail→pass | 6,188 | 2,386 | -61% | 1 | 1 | 0% | 1,101 | 6,133 | +457% | 0 | 0 | — |
case-20 | pass→pass | 12,493 | 14,628 | +17% | 1 | 1 | 0% | 2,015 | 8,112 | +303% | 0 | 0 | — |
case-21 | fail→fail | 6,828 | 5,472 | -20% | 1 | 1 | 0% | 1,211 | 6,614 | +446% | 0 | 0 | — |
case-22 | pass→pass | 7,273 | 6,192 | -15% | 1 | 1 | 0% | 1,586 | 6,894 | +335% | 0 | 0 | — |
DecimalAI ran this skill against gemini-3.6-flash twice over the same eval suite — once with the skill loaded and once without — and compared the two runs case by case. 22 cases were attempted, and 19 counted toward the lift figure. The other 3 produced results that are not comparable between the two arms, so they are excluded from the headline rather than averaged into it. The headline lift of +64 percentage points is the difference between those two pass rates over the 19 comparable cases.
Without the skill loaded, the model failed this case. With it loaded, the same prompt on the same model passed. This is one improved case from the latest verified run; every case, including any that regressed, is in the table above.
Other measured skills in the registry, with their headline benchmark lift.