Install any skill in seconds. Free to start, no credit card required.
Get Started Free →Track goal progress, derive state from execution, identify gaps, trigger actions. Use for goal status checks, progress reviews, and operational goal management.
.claude/skills/aiskillstore-goal-tracker/SKILL.md| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-13 | ✗→✓ | ▲ Improved | 130% | 0% |
| case-03 | ✗→✓ | ▲ Improved | 2683% | 0% |
| case-08 | ✗→✓ | ▲ Improved | 137% | 0% |
| case-09 | ✗→✓ | ▲ Improved | 170% | 0% |
| case-12 | ✗→✓ | ▲ Improved | 85% | 0% |
Derive goal state from execution, track progress, identify gaps, trigger actions.
Goals are the primary operating mode for LeanOS. Tracker maintains goal state.
PROACTIVE (primary): Goal → Plan → Threads → Artifacts → Learning → Canvas
↑
goal-tracker derives state from hereGoal-tracker reads:
Goal-tracker writes:
GoalTracker : Goal × Threads × Time → UpdatedGoal × [Action]
Where:
Goal : strategy/goals/active/{id}.md
Threads : threads/{type}/{name}/ (linked to goal)
Time : Current date for trajectory calculation
UpdatedGoal : Goal with refreshed State section
Action : Recommended or auto-executed interventionState is computed, not manually tracked. Derive from execution:
For goal G:
1. Find linked threads:
- Scan G.Plan.Subgoals[*].Threads
- Load each thread's current state
2. Aggregate execution metrics:
threads_active = count(thread.status == "active")
threads_completed = count(thread.status == "completed")
threads_blocked = count(thread.status == "blocked")
3. Extract outcome metrics:
For each completed thread:
Read Stage 6 (Learning) outcomes
Map to goal success criteria
4. Calculate derived metrics:
For each success criterion:
current = sum/count from thread outcomes
gap = target - current
trend = compare to previous state (↑↓→)For each subgoal SG:
If SG.Threads is empty:
status = "pending"
Else if any(thread.status == "active"):
status = "in_progress"
Else if all(thread.status == "completed") AND SG.Success met:
status = "completed"
Else if any(thread.status == "blocked"):
status = "blocked"For each milestone M:
If M.criterion is satisfied:
Mark [x] completed
Log completion dateGiven:
current = current metric value
target = target metric value
start_date = goal.created
deadline = goal.deadline
today = current date
Calculate:
elapsed = today - start_date
remaining = deadline - today
progress_rate = (current - initial) / elapsed
projected_final = current + (progress_rate × remaining)
Determine:
on_track = projected_final >= target
projected_completion = start_date + ((target - initial) / progress_rate)
Risk level:
Low = on_track AND remaining > 30 days
Medium = on_track AND remaining <= 30 days
High = NOT on_track
Critical = NOT on_track AND remaining <= 14 daysFor each success criterion:
gap = target - current
gap_percent = gap / target × 100
If gap_percent > 50%:
Flag: "Significant gap on {criterion}"
If trend == "↓" AND gap_percent > 20%:
Flag: "Declining metric: {criterion}"Based on gaps and autonomy mode:
If gap detected AND goal.autonomy allows:
For autonomy == "auto":
Create thread directly
Log: "Auto-created thread {id} to address {gap}"
For autonomy == "ask":
Generate recommendation
Present to user with options
For autonomy == "hybrid":
Calculate action impact
If impact < 0.5: auto-create
If impact >= 0.5: ask userAction types: | Gap Type | Recommended Action | |----------|-------------------| | Pipeline gap | Create outbound campaign thread | | Conversion gap | Create optimization thread | | Content gap | Create content thread | | Technical gap | Create engineering thread | | Knowledge gap | Create learning thread |
Update strategy/goals/active/{goal-id}.md:
markdown## State ### Metrics | Metric | Current | Target | Gap | Trend | |--------|---------|--------|-----|-------| | MRR | $12,500 | $50,000 | $37,500 | ↑ | | Customers | 6 | 10 | 4 | ↑ | | Pipeline | 12 | 20 | 8 | → | ### Execution - **Active threads:** 3 (campaign-q1, sales-process, content-linkedin) - **Completed threads:** 5 - **Blocked:** 1 (waiting on legal review) ### Trajectory - **On track:** No - **Projected completion:** 2025-07-15 (15 days late) - **Risk level:** Medium ## Log - {previous entries} - {today}: State updated. MRR +$2,500. Pipeline stalled. Risk: Medium.
markdown# Goal Progress: {Goal Title} **Status:** {On Track | At Risk | Off Track} **Progress:** {X}% toward objective **Time remaining:** {N} days ## Metrics Summary {Table of current vs target} ## What's Working - {Positive trend 1} - {Positive trend 2} ## Gaps Identified - {Gap 1}: {Current} vs {Target} ({gap%} behind) - {Gap 2}: {description} ## Recommended Actions 1. {Action 1} - addresses {gap} 2. {Action 2} - addresses {gap} ## Subgoal Status - [x] SG1: {completed} - [→] SG2: {in progress} - [ ] SG3: {pending} ## Next Milestone {Milestone description} - due {date} ({N} days)
Trigger: User asks for status, or periodic review
1. Load all active goals
2. For each goal:
a. Derive current state
b. Check trajectory
c. Identify gaps and risks
3. Generate snapshot report (see Output section)
4. Present recommendations
5. Execute auto actions if autonomy allowsNo daily file generated. Snapshot is computed on-demand, not stored. Goals themselves are the persistent state - snapshot is a derived view.
Trigger: Thread reaches Stage 6 (Learning)
1. Find goal linked to thread
2. Update subgoal status
3. Extract metrics from thread learning
4. Update goal state
5. Check if goal completed
6. If completed: move to strategy/goals/completed/Trigger: User asks about goal progress
1. Load specified goal (or all if unspecified)
2. Derive current state
3. Generate progress report
4. Present with recommendations if gaps existTrigger: All success criteria met
1. Mark goal status: completed
2. Update all subgoals: completed
3. Mark remaining milestones
4. Add completion log entry
5. Move file to strategy/goals/completed/
6. Generate completion summary
7. Identify follow-on goals if anymeta.json contains goal_id and subgoal referenceGap detected → Create thread → Execute → Log
No user interaction unless errorGap detected → Generate recommendation → Present options:
[1] Create suggested thread
[2] Modify recommendation
[3] Ignore for now
[4] Pause goalGap detected → Calculate impact:
- Cost of action
- Time commitment
- Risk level
Impact < 0.5 → Auto mode
Impact >= 0.5 → Ask modeNo linked threads:
Warning: "Goal {id} has no execution threads.
Subgoals defined but not activated.
Recommend: Create initial threads for SG1."Stale goal (no updates >14 days):
Warning: "Goal {id} has no activity for {N} days.
Options: (1) Review and update, (2) Pause goal, (3) Abandon goal"Conflicting metrics:
Warning: "Metric {name} has conflicting values from threads.
Thread A: {value}, Thread B: {value}
Using: {resolution strategy}"Goal deadline passed:
Alert: "Goal {id} deadline was {date}.
Status: {achieved | not achieved}
Options: (1) Extend deadline, (2) Mark completed as-is, (3) Abandon"| Case | Status | Duration (ms) | Turns | Tokens | Tool calls | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Without | With | Δ | Without | With | Δ | Without | With | Δ | Without | With | Δ | ||
case-01 | fail→fail | 16,788 | 24,611 | +47% | 1 | 1 | 0% | 3,022 | 5,883 | +95% | 0 | 0 | — |
case-02 | fail→fail | 4,558 | 14,752 | +224% | 1 | 1 | 0% | 284 | 5,411 | +1805% | 0 | 0 | — |
case-13 | fail→pass | 27,626 | 8,418 | -70% | 1 | 1 | 0% | 1,318 | 3,036 | +130% | 0 | 0 | — |
case-03 | fail→pass | 11,765 | 19,779 | +68% | 1 | 1 | 0% | 232 | 6,456 | +2683% | 0 | 0 | — |
case-04 | fail→fail | 16,593 | 13,124 | -21% | 1 | 1 | 0% | 1,902 | 4,544 | +139% | 0 | 0 | — |
case-05 | fail→fail | 30,589 | 19,770 | -35% | 1 | 1 | 0% | 282 | 5,200 | +1744% | 0 | 0 | — |
case-06 | fail→fail | 17,657 | 14,455 | -18% | 1 | 1 | 0% | 1,312 | 3,846 | +193% | 0 | 0 | — |
case-11 | pass→pass | 20,641 | 9,189 | -55% | 1 | 1 | 0% | 2,764 | 3,311 | +20% | 0 | 0 | — |
case-07 | pass→pass | 10,744 | 8,458 | -21% | 1 | 1 | 0% | 960 | 3,111 | +224% | 0 | 0 | — |
case-08 | fail→pass | 8,618 | 11,738 | +36% | 1 | 1 | 0% | 1,617 | 3,829 | +137% | 0 | 0 | — |
case-09 | fail→pass | 12,277 | 27,296 | +122% | 1 | 1 | 0% | 1,357 | 3,661 | +170% | 0 | 0 | — |
case-10 | pass→pass | 15,667 | 3,700 | -76% | 1 | 1 | 0% | 1,928 | 3,154 | +64% | 0 | 0 | — |
case-12 | fail→pass | 16,256 | 13,556 | -17% | 1 | 1 | 0% | 2,047 | 3,795 | +85% | 0 | 0 | — |
case-14 | fail→pass | 34,945 | 10,636 | -70% | 1 | 1 | 0% | 1,795 | 3,513 | +96% | 0 | 0 | — |
case-15 | pass→pass | 13,426 | 11,122 | -17% | 1 | 1 | 0% | 1,470 | 3,473 | +136% | 0 | 0 | — |
case-16 | pass→pass | 14,050 | 24,725 | +76% | 1 | 1 | 0% | 1,535 | 2,876 | +87% | 0 | 0 | — |
case-17 | pass→pass | 13,356 | 16,233 | +22% | 1 | 1 | 0% | 1,421 | 2,840 | +100% | 0 | 0 | — |
case-18 | fail→pass | 15,804 | 25,328 | +60% | 1 | 1 | 0% | 1,483 | 3,656 | +147% | 0 | 0 | — |
case-19 | pass→pass | 22,467 | 20,571 | -8% | 1 | 1 | 0% | 1,829 | 4,051 | +121% | 0 | 0 | — |
case-20 | fail→pass | 27,194 | 8,059 | -70% | 1 | 1 | 0% | 1,406 | 2,931 | +108% | 0 | 0 | — |
case-21 | fail→pass | 14,384 | 10,974 | -24% | 1 | 1 | 0% | 1,537 | 3,439 | +124% | 0 | 0 | — |
case-22 | pass→pass | 13,663 | 7,285 | -47% | 1 | 1 | 0% | 1,394 | 2,783 | +100% | 0 | 0 | — |
case-23 | pass→pass | 15,063 | 24,034 | +60% | 1 | 1 | 0% | 1,631 | 3,053 | +87% | 0 | 0 | — |
case-24 | fail→pass | 97,345 | 31,072 | -68% | 1 | 1 | 0% | 2,173 | 4,600 | +112% | 0 | 0 | — |
case-25 | pass→pass | 47,926 | 22,376 | -53% | 1 | 1 | 0% | 2,463 | 4,526 | +84% | 0 | 0 | — |
case-26 | fail→pass | 41,263 | 8,321 | -80% | 1 | 1 | 0% | 2,667 | 2,974 | +12% | 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. 26 cases were attempted, and 23 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 +42 percentage points is the difference between those two pass rates over the 23 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.