goal-tracker
Compare current progress against goals with quantified status, velocity, trend, and a concrete next action per goal
التثبيت باستخدام Codex أو Claude انسخ هذا Prompt والصقه في Codex أو Claude أو مساعد آخر ليراجع صفحة Skill ويثبّتها لك.
القائمة
Compare current progress against goals with quantified status, velocity, trend, and a concrete next action per goal
التثبيت باستخدام Codex أو Claude انسخ هذا Prompt والصقه في Codex أو Claude أو مساعد آخر ليراجع صفحة Skill ويثبّتها لك.
استنادا إلى تصنيف SOC المهني
Audit every enabled skill's upstream file dependencies for staleness — flags chained skills about to consume yesterday's article or a long-dead topic file
Validate skill outputs against assertions, diff vs prior eval to flag regressions, file issues for new failures, and queue concrete fixes
First-touch review of newly opened PRs on [REPLACE: WATCHED_REPO] — verdict + welcoming comment + label
Summary of the [REPLACE: CHANNEL_PLATFORM] channel [REPLACE: CHANNEL_NAME] — top [REPLACE: TOP_N_THREADS] threads + open questions
Price and volume tracker for [REPLACE: TOKEN_SYMBOL] with anomaly alerts above [REPLACE: ALERT_THRESHOLD_PCT]% movement
Watch Vercel deploys for [REPLACE: VERCEL_PROJECT] — alert on [REPLACE: ALERT_ON] in the last [REPLACE: LOOKBACK_HOURS] hours
| name | Goal Tracker |
| description | Compare current progress against goals with quantified status, velocity, trend, and a concrete next action per goal |
| var | |
| tags | ["meta"] |
${var} — Specific goal title or slug to focus on. If empty, tracks all goals in MEMORY.md.
Read memory/MEMORY.md (for the goal list) and memory/goal-state.json (prior-run snapshot, if it exists).
Primary goal source: memory/MEMORY.md section titled ## Current Goals. If absent, fall back (in order) to ## Goals, then ## Next Priorities. If all are missing or empty, send ./notify "Goal Tracker — NO_GOALS (add a '## Current Goals' section to memory/MEMORY.md)" and exit.
Evidence sources (use every source that responds; record each in the source-status footer):
memory/logs/*.md — last 30 days. Case-insensitive whole-word match against keywords parsed from each goal title.git log --since="30 days ago" --pretty=format:"%ad|%s" --date=short — commit subjects.gh pr list --state=all --search "updated:>=$(date -d '30 days ago' +%F)" --json number,title,state,updatedAt,url — recent PRs.gh issue list --state=all --search "updated:>=$(date -d '30 days ago' +%F)" --json number,title,state,updatedAt,url — recent issues.memory/cron-state.json — skill health; relevant when a goal depends on a skill running (e.g., "run first digest").If ${var} is set, filter to the matching goal after loading.
For each goal entry, derive:
id — slugified title (stable across runs)title — original textkeywords — title minus stopwords (also include obvious aliases, e.g. "digest" ↔ "rss-digest")due / target — parse if present in the bullet, else nullIf memory/goal-state.json exists, load {goal_id: {status, activity_count_14d, last_activity_date, run_at}} for trend comparison.
Across all responsive sources, compute:
activity_count_14d — distinct matching entries in last 14 daysactivity_count_30d — same, 30-day windowlast_activity_date — most recent matching evidence (any source); null if nonedays_since_last_activity — today minus last_activity_datecompletion_signal — true if a log/commit/PR entry pairs the goal's keywords with phrases like "completed", "done", "shipped", "launched", "closed", "merged" (goal-specific PRs only)blocker_signal — true if a log entry in the last 14 days pairs keywords with "blocked", "waiting on", "stuck on"; capture the blocker phraseDedupe evidence by (source, date, ref) so a log mentioning a PR doesn't double-count.
| Status | Rule |
|---|---|
| DONE | completion_signal is true, OR the goal is already marked complete in MEMORY.md |
| BLOCKED | blocker_signal is true within the last 14 days |
| ON TRACK | activity_count_14d >= 2 AND days_since_last_activity <= 7 |
| NEEDS ATTENTION | activity_count_14d == 1 OR days_since_last_activity between 8 and 14 inclusive |
| AT RISK | activity_count_14d == 0 AND (days_since_last_activity > 14 OR no activity ever) |
improving — status moved up the ladder (AT RISK → NEEDS ATTENTION → ON TRACK → DONE) OR activity_count_14d rose by ≥50%flat — same status AND activity_count_14d within ±25%degrading — status moved down OR activity_count_14d fell by ≥50%new — no prior recordPick the single highest-leverage next step for each goal. Rules:
days_since_last_activity > 21 → name a specific Aeon skill to enable, a concrete commit, or a file to create (e.g., "Enable rss-digest in aeon.yml to produce the weekly digest evidence").Use one action verb. ≤15 words. No vague "continue monitoring" advice. No action = skip the line, don't fill with filler.
*Goal Tracker — ${today}*
Summary: N goals — X at risk, Y needs attention, Z on track, W blocked, V done (overall ↑ improving / → flat / ↓ degrading)
AT RISK (sorted by days_since_last_activity, descending)
• <goal title> — 18d idle, 0 activity/14d (was NEEDS ATTENTION ↓)
→ Action: <one-verb next step>
NEEDS ATTENTION
• <goal title> — 9d idle, 1 activity/14d (new)
→ Action: <one-verb next step>
BLOCKED
• <goal title> — waiting on <blocker> since <date>
→ Action: <unblock step>
ON TRACK
• <goal title> — 3d idle, 5 activity/14d (↑ improving)
DONE
• <goal title> — completed <date>
Sources: logs=ok, git=ok, gh_pr=ok, gh_issue=ok, cron-state=ok
Omit any status section that has zero goals.
## Recently Cleared section with completion date (if that section is absent, fall back to ## Completed Goals). Never delete goals silently.Write memory/goal-state.json (create if missing):
{
"run_at": "YYYY-MM-DDTHH:MM:SSZ",
"goals": {
"<goal-id>": {
"status": "AT_RISK",
"activity_count_14d": 0,
"last_activity_date": "YYYY-MM-DD"
}
}
}
Send the full formatted report via ./notify.
Append to memory/logs/${today}.md:
### goal-tracker
- Tracked: N goals (scope: ${var or "all"})
- Status: X at risk, Y needs attention, Z on track, W blocked, V done
- Trend: <notable shifts vs prior run, or "no prior snapshot">
- Actions proposed: <count>
- Sources: logs=ok, git=ok, gh_pr=ok, gh_issue=ok, cron-state=ok
This skill uses gh CLI and local file reads — both work inside the GitHub Actions sandbox. If gh pr list or gh issue list fails, record gh_pr=fail / gh_issue=fail in the source-status footer and proceed with logs + git evidence only. Do not abort the run on a single-source failure — the whole point of multiple sources is graceful degradation.