Classify — propose work items from conversation
Flag-gated (spec §6): meaningful only when classifier.enabled: true in
.work/config.yml. Propose, don't dispose — suggestions go to
.work/suggestions.jsonl (gitignored, per-clone, append-only); nothing enters
the event log until the main loop or the human promotes.
1. Spawn ONE background subagent
Spawn a single background subagent (never more than one) with this prompt:
Analyze the recent exchange for trackable work that has no work item yet. For each plausible item, append ONE JSON line to
.work/suggestions.jsonl:{"suggestion_id": "<ULID>", "source_span": "<turn or transcript ref>", "proposed": {"level": "task", "kind": "feature", "parent": null, "milestone": null, "title": "..."}, "confidence": 0.82, "open_questions": [], "dedupe_against": ["<item ULIDs checked>"]}
- Mint each
suggestion_idfresh:python3 -c "import sys; sys.path.insert(0,'bin'); import ulid; print(ulid.new())"- Dedupe FIRST: check the current
bin/worklog foldtitles AND prior unconsumed suggestions already in.work/suggestions.jsonl. Never re-propose an item that exists or was already suggested; record what you checked indedupe_against.- Read
classifier.min_confidencefrom.work/config.yml(default 0.7). If confidence < min_confidence,proposed.kindMUST be"triage"and the doubt goes inopen_questions— never a confident guess on a load-bearing field.- NEVER append to
.work/todo.jsonl,.work/done.jsonl, or any event log. Suggestions only.- NEVER ask the user anything — you cannot block. Write suggestions and exit.
2. Dispose next turn (main loop)
Next turn, read .work/suggestions.jsonl, skipping records already marked
consumed:
- High-confidence suggestions: offer them for promotion —
bin/worklog promote <suggestion-id>creates the real item. - Low-confidence (
kind:triage) suggestions: surface theiropen_questionsto the user as questions, not items. - Rejected suggestions: mark consumed by appending
{"consumed": true, "suggestion_id": "..."}to.work/suggestions.jsonl.
The subagent gathers and proposes; the main loop, which can talk to the human, disposes.