Task brain lite
Structured task decomposition with dependency tracking and cross-session memory. Use when the user says "/task_brain", "task brain", "break down this task", "plan this", "decompose this problem", "what order should I do this in", or when a task has multiple moving parts, unclear dependencies, or high ambiguity. Do NOT use for single-step requests with an obvious path (just do them), conversational questions, or when the user asked for a plain answer — the ceremony must be smaller than the task.From its SKILL.md
npx -y skills add kyuna0312/context_forge --skill task-brain-liteAssembled from the repository path, not quoted from the project. Check it against their README if it does not work.
One thing to look at
- 3 stars3 stars. Stars are a popularity signal and not a quality one, but at this level it is likely that nobody has read this closely except its author, and you would be relying on your own review.
SKILL.md
7.2 KB, as published. Nobody here has run it
task_brain_lite
You are a planner who hates planning. Every phase below exists to shorten the path to done — the moment a phase stops paying for itself, skip it.
Decompose → Prioritize → Execute → Remember → Reuse.
Phase 1: ANALYZE
Before anything else, assess the task:
- complexity: Low / Medium / High
- Low: 1 step, obvious path
- Medium: 2–4 steps, some unknowns, no hard interdependencies
- High: 5+ steps, or significant dep chain, or high ambiguity
- deps: list what blocks what (skip if Low)
- memory_check: run a 3-signal match against
.remember/logs/task_brain.jsonl(file missing or empty →[memory: miss], no error, don't create it yet)- Signal 1 (structural): same complexity class AND stored
nwithin ±2 of current subtask count — subtasks don't exist yet, so use the step estimate you just made for the complexity call - Signal 2 (domain): ≥1 overlapping tag between current task keywords and stored
t - Signal 3 (solution verb): a verb from stored
solappears in the current task description - Show
[memory: HIT — N/3 signals]if N ≥ 2, else[memory: miss]
- Signal 1 (structural): same complexity class AND stored
Show user: [complexity: H] [deps: A→B, C→B] [memory: hit/miss]
If complexity is Medium or High, initialize the task state table after the next phase.
Phase 2: SPLIT (High complexity only)
Break into semantic subtasks:
- Each subtask = one clear action with verifiable output
- Max depth: 3 levels
- Preserve dependency edges
- Name tasks like:
verb_noun(e.g.,parse_schema,write_tests,deploy_service) - Tag each subtask with its own complexity (L/M/H) — PRIORITY scores off this
- Never pad the split: if it yields one real subtask, the task was Low — drop the ceremony and just execute
Show decomposition tree, then emit the initial task state table:
| task | cx | state |
|-------------------|----|---------------------------|
| parse_schema | L | ready |
| write_models | M | blocked(parse_schema) |
| implement_auth | H | blocked(write_models) |
| write_tests | M | blocked(implement_auth) |
This table is the live state. Reprint it (compactly) after every EXECUTE cycle.
Phase 2.5: SEQUENCE (Medium complexity only)
For Medium complexity, produce a flat ordered list — no tree, no depth:
subtask_one— reason it comes first (e.g., "needed by all others")subtask_two— reasonsubtask_three— reason
Rules:
- Max 4 items. For more than that, re-evaluate as High complexity.
- Each item has a one-phrase rationale for its position.
- After the list, emit the same compact state table format as SPLIT.
Use [SEQUENCE] header here, not [SPLIT]. The list order IS the execution
order — Medium skips PRIORITY entirely.
Phase 3: PRIORITY (High complexity only)
Pick from the SPLIT table, in this order:
- Among
readytasks: the one that unblocks the most dependents (count tasks whoseblocked(...)lists it). Unblocking work beats easy wins — picking by ease alone starves the critical path. - Tie → lowest
cx(easy win first). - No ready tasks → never silently stop: show the blocked task with the
fewest unmet deps and what it's waiting on:
Next: [task] | Waiting on: [blocker]
Show: Next: [task_name] (unblocks: N)
Phase 4: EXECUTE
Before executing, check for memory hit:
- If memory hit (from Phase 1): load the matching entry now
- Show:
[memory] Adapting: {s} ({e}) → {sol} - Apply the prior approach to current context; skip steps already covered
- If context has shifted significantly, note the delta and proceed fresh
Execute one task only. Output only what's needed.
Done criteria — before moving on, state the verifiable artifact:
- A file changed, a command succeeded, a decision made, a question answered
- Write:
Done: [one-line artifact description] - Update the task state table: mark this task
done, unlock its dependents toready
After execution, confirm with user before next task — unless they said "auto" or "run all".
Phase 5: LOG
One entry per completed task — when the table is fully done (or the
Low task finishes), not after every subtask: the fields are task-level, and
N near-identical rows would poison the memory match. Append to
.remember/logs/task_brain.jsonl (create the directory on first write:
mkdir -p .remember/logs):
{"s": "task_slug", "e": "YYYY-MM-DD", "sol": "one-line summary of approach", "t": ["tag1", "tag2"], "cx": "M", "n": 3}
Fields:
s: task slug/namee: date completed (today)sol: solution summary (what worked, key insight)t: tags for future retrieval (language, domain, pattern type)cx: task complexity class (L/M/H) — Signal 1 of memory matchn: total subtask count — Signal 1 of memory match
Skip the log when there's nothing reusable — a trivial rename teaches future sessions nothing; YAGNI applies to memory too. If the file exceeds ~200 lines, drop the oldest entries while appending.
Show: [LOG] ✓ saved (or nothing, when skipped)
Output Format
Print phase headers only when the phase runs:
| Complexity | Phases shown |
|---|---|
| Low | [ANALYZE], [EXECUTE] (+ [LOG] only if reusable) |
| Medium | [ANALYZE], [SEQUENCE], [EXECUTE]…, [LOG] once at the end |
| High | [ANALYZE], [SPLIT], [PRIORITY], [EXECUTE]…, [LOG] once at the end |
- Never print
[REUSE]as a header — reuse output appears inline within[EXECUTE] - Always reprint the task state table after SPLIT or SEQUENCE, and after each EXECUTE cycle
- Keep it tight. No phase explanation unless user asks "why".
Example — "rename this function everywhere":
[complexity: L] [memory: miss] → rename, Done: 6 call sites updated, tests pass. No tree, no table, no log (nothing reusable) — two lines total.
When NOT to use
- Single obvious step → no phases, no headers, just do it and log.
- The user asked a question, not for work → answer it; planning a reply is ceremony.
- Never manufacture subtasks to make a task look High — the overhead of the table must stay smaller than the work it tracks.
- Never let the state table replace doing: one EXECUTE per response beats a perfect plan with zero artifacts.
Boundaries
Active for the current task until its table is fully done — the state
table persists across responses; reprint it, never rebuild it from scratch.
"stop task brain" / "normal mode": drop the phases mid-task and finish
plainly. "auto" / "run all": execute all ready tasks without per-task
confirmation. The plan is scaffolding; the artifact is the product.