From project-finisher
Analyze user behavior patterns from tool usage logs and conversation signals, then update workflow_preferences.md to adapt project-finisher's pacing, depth, workflow ordering, tool preferences, edit size, error recovery, and interaction patterns. Run this skill at the end of any Claude Code session, or when the orchestrator starts a new milestone.
How this skill is triggered — by the user, by Claude, or both
Slash command
/project-finisher:evolveThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
The evolve skill observes how the user works with Claude Code and updates `workflow_preferences.md` so the orchestrator can adapt to their style. It learns seven dimensions: pacing, depth, workflow ordering, tool preferences, edit size, error recovery, and interaction patterns.
The evolve skill observes how the user works with Claude Code and updates workflow_preferences.md so the orchestrator can adapt to their style. It learns seven dimensions: pacing, depth, workflow ordering, tool preferences, edit size, error recovery, and interaction patterns.
session-start.sh hook runs analyze-sessions.py which fully updates workflow_preferences.md — both quantitative stats AND qualitative classifications (pacing, depth, workflow). No LLM involvement needed.Note: The system is fully deterministic. The Python script classifies each session's pacing (fast/deliberate/mixed), depth (shallow/deep/mixed), and workflow (pure execution/diagnostic/brainstorm+execute/quick interaction) using tool-usage heuristics. It also applies the confidence counter logic automatically. No
pending_session_analysis.jsonor LLM layer is needed.
| File | Location | Purpose |
|---|---|---|
| Raw tool log | ~/.claude/project-finisher-data/behavior_log.jsonl | Rolling log from PostToolUse hook (last 100 entries kept) |
| Preferences | ~/.claude/project-finisher-data/workflow_preferences.md | Extracted stable preferences (the "learned" file) |
At the end of a session, perform the following analysis:
Before analyzing, trim behavior_log.jsonl to the most recent 100 entries to prevent unbounded growth. Older entries have already been distilled into workflow_preferences.md, so they are safe to discard.
LOG=~/.claude/project-finisher-data/behavior_log.jsonl
if [ -f "$LOG" ] && [ "$(wc -l < "$LOG")" -gt 100 ]; then
tail -n 100 "$LOG" > "$LOG.tmp" && mv "$LOG.tmp" "$LOG"
fi
Analyze the current conversation for these signals:
Pacing signals:
Depth signals:
Workflow ordering signals:
Tool preference signals:
~/.claude/project-finisher-data/behavior_log.jsonlEdit size signals (from enriched log edit_size field):
Error recovery signals (from enriched log bash_ok field):
Interaction pattern signals (from tool sequence):
Read the current workflow_preferences.md (create if it doesn't exist).
For each dimension, apply this update logic:
This ensures preferences stabilize over time and don't flip on a single session's anomaly.
Update ~/.claude/project-finisher-data/workflow_preferences.md with the new values.
# Workflow Preferences
_Auto-generated by project-finisher evolve skill. Last updated: YYYY-MM-DD_
_Total sessions observed: N_
## Pacing
- **Style**: fast | deliberate | mixed
- **Confidence**: N (number of agreeing observations)
- **Signals**: <summary of evidence>
- **Adaptation**: <what the orchestrator should do differently>
## Depth
- **Style**: shallow | deep | mixed
- **Confidence**: N
- **Signals**: <summary of evidence>
- **Adaptation**: <what the orchestrator should do differently>
## Workflow Ordering
- **Preferred sequence**: <e.g., "brainstorm(light) → execute → review" or "full 4-phase">
- **Phases typically skipped**: <list>
- **Confidence**: N
- **Adaptation**: <what the orchestrator should do differently>
## Tool Preferences
- **Agent vs direct**: prefer-direct | prefer-agents | mixed
- **Edit vs Write**: prefer-edit | prefer-write | mixed
- **Top 5 tools by frequency**: <list with counts>
- **Confidence**: N
- **Adaptation**: <what the orchestrator should do differently>
## Edit Size
- **Style**: incremental | large-rewrite | mixed
- **Confidence**: N
- **Signals**: <summary of evidence>
- **Adaptation**: <what the orchestrator should do differently>
## Error Recovery
- **Style**: retry | investigate | mixed
- **Confidence**: N
- **Signals**: <summary of evidence>
- **Adaptation**: <what the orchestrator should do differently>
## Interaction Patterns
- **Style**: cautious | direct | mixed
- **Confidence**: N
- **Signals**: <summary of evidence>
- **Adaptation**: <what the orchestrator should do differently>
## Session Log
| Date | Pacing | Depth | Workflow | Notes |
|------|--------|-------|----------|-------|
| YYYY-MM-DD | fast | shallow | skipped brainstorm | first observation |
When the orchestrator starts a new milestone, read workflow_preferences.md and apply these adaptations:
| Preference | Orchestrator Behavior |
|---|---|
fast | Limit brainstorming to 2 rounds max. Skip confirmation prompts. Compress Review phase to bullet points. Prefer action over discussion. |
deliberate | Run full multi-round brainstorming. Include tradeoff discussions. Provide detailed review summaries. |
mixed | Default behavior — no adaptation. |
| Preference | Orchestrator Behavior |
|---|---|
shallow | Lead with code and file changes. Minimize prose. Skip rationale unless asked. Brainstorm outputs should be bullet lists, not paragraphs. |
deep | Include rationale for decisions. Discuss alternatives considered. Reference prior lessons explicitly. Brainstorm outputs can be detailed. |
mixed | Default behavior. |
| Preference | Orchestrator Behavior |
|---|---|
| Phases consistently skipped | Reduce those phases to lightweight versions (1-2 bullets) rather than eliminating entirely. |
| Reordered phases | Follow the user's preferred order, but warn if skipping a phase creates risk for the current milestone. |
| Full 4-phase | No adaptation — follow standard workflow. |
| Preference | Orchestrator Behavior |
|---|---|
prefer-direct | Use Grep/Glob/Read directly instead of spawning Agent subagents. |
prefer-agents | Delegate research and exploration to Agent subagents. |
prefer-edit | Use Edit for file modifications. Avoid full Write unless creating new files. |
prefer-write | Use Write for file modifications when changes are extensive. |
| Preference | Orchestrator Behavior |
|---|---|
incremental | Use Edit tool for targeted changes. Break large modifications into multiple small edits. Avoid full file rewrites. |
large-rewrite | Use Write tool for comprehensive changes. Batch related modifications into single operations. |
mixed | Default behavior — choose Edit vs Write based on change scope. |
| Preference | Orchestrator Behavior |
|---|---|
retry | On execution errors, try alternative approaches quickly. Minimize diagnostic steps. |
investigate | On execution errors, read error output carefully. Check related files before retrying. |
mixed | Default behavior — adapt error recovery to context. |
| Preference | Orchestrator Behavior |
|---|---|
cautious | Always read files before editing. Explore surrounding code for context. Include related file reads in plans. |
direct | Read only the target file before editing. Skip exploratory reads unless blocked. |
mixed | Default behavior — read as needed. |
When updating workflow_preferences.md (Step 3), also recompute the "Reviewer Rubric Weights" section. These weights are derived deterministically from pacing and depth preferences:
| Dimension | fast | deliberate | mixed |
|---|---|---|---|
| Test coverage | 2 | 4 | 3 |
| Lines changed | 4 | 2 | 3 |
| New dependencies | 3 | 1 | 2 |
| Dimension | shallow | deep | mixed |
|---|---|---|---|
| Test coverage | 2 | 4 | 3 |
| Code documentation | 1 | 4 | 2 |
| Architectural cleanliness | 2 | 4 | 3 |
"Criteria met" is always weight 5 — it is the primary factor regardless of user style.
When both pacing and depth contribute to a dimension (e.g., test coverage), use the higher of the two values.
Example: A user with pacing=fast, depth=shallow would get:
This user's reviewer would strongly favor simpler, smaller implementations. A deliberate+deep user would favor thoroughness and clean architecture.
If workflow_preferences.md does not exist, create it with all preferences set to mixed and confidence = 0. The system starts neutral and learns from observations.
If the user asks to reset preferences:
workflow_preferences.md to workflow_preferences.YYYY-MM-DD.bak.mdmixed / confidence 0behavior_log.jsonlnpx claudepluginhub yuanhao96/project-finisher --plugin project-finisherGuides creation, editing, and verification of skills for AI coding agents using test-driven development with subagent scenarios. Use when authoring or debugging skills.