goal-review
Skill64 starsChanged 7 months agoApache-2.0View on GitHub
Review Goal progress against STRATEGY.md targets. Use when the user asks to evaluate goal achievement, review KPI progress, assess strategy performance, or check if targets are being met. Also use when the user asks in Japanese (目標の進捗を確認 / KPIレビュー / ゴール達成状況は / 目標に届きそうか).
In this repository30 other files it gives its agents.
- AGENTS.mdAGENTS.md
- CLAUDE.mdCLAUDE.md
- ad-fatigue-checkSkill
- audience-reviewSkill
- budget-pacingSkill
- budget-rebalanceSkill
- competitive-scanSkill
- creative-generateSkill
- creative-refreshSkill
- daily-checkSkill
- experimentSkill
- incident-postmortemSkill
- lead-form-createSkill
- learnSkill
- monthly-reportSkill
- _mureo-amazon-adsSkill
- _mureo-google-adsSkill
- _mureo-learningSkill
- _mureo-meta-adsSkill
- _mureo-pro-diagnosisSkill
- _mureo-report-persistSkill
- _mureo-sharedSkill
- _mureo-state-schemaSkill
- _mureo-strategySkill
- onboardSkill
- rescueSkill
- search-term-cleanupSkill
- sync-stateSkill
- tracking-healthSkill
- weekly-reportSkill
The file
We split this skill into the rules it gives an agent
8 rules. About 0 are common, 5 are distinctive, and 3 are very specific to this project.
≈0
Common · estimate
Many files like this have a rule of this kind.
≈5
Distinctive · estimate
This author's own choices. Worth a look.
3
Very specific
Tied to their project's names, files or tools. Probably skip.
- Common
- Distinctive
- Very specific
- Very specific: line 22
Before you start: Run the Diagnostic preamble from ../_mureo-shared/SKILL.md — load learning insights (mureo_learning_insights_get) and …
- Very specific: line 27
Load context: Read STRATEGY.md (all Goal sections, Data Sources) and STATE.json (the same mureo_state_get response from step 0 on MCP …
- Distinctive: line 34
Search Console (if available): Organic search metrics for SEO-related goals
- Very specific: line 54
Consult evidence: Before recommending actions, check action_log for past actions with evaluated outcomes:
- Distinctive: line 57
Do NOT attribute goal progress to specific actions without checking observation windows and sample sizes
- Distinctive: line 61
If cross-platform rebalancing could help, suggest it
- Distinctive: line 64
Prefer actions backed by past validated evidence over unproven strategies
- Distinctive: line 68
Update Current values in STRATEGY.md Goal sections if approved
≈ “Common” is an estimate: at least 1 in 5 of the 350,495 skill files we read have a rule of the same kind, not the same words. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.
Files
Goal Review
PREREQUISITE: Read
../_mureo-shared/SKILL.mdfor auth, security rules, output format, and Tool Selection (Read/Write on Code,mureo_strategy_*/mureo_state_*MCP on Desktop / Cowork).
Tool names below refer to the built-in platforms; a namespaced variant (see
_mureo-shared→ Namespaced built-in variants) is used with its prefix substituted.
Review progress toward all marketing goals across all platforms.
Prerequisites
- STRATEGY.md with at least one Goal section (run the
onboardskill first) - STATE.json (run
/sync-statefirst)
Steps
Before you start: Run the Diagnostic preamble from ../_mureo-shared/SKILL.md — load learning insights (mureo_learning_insights_get) and consult advisors (mureo_consult_advisor) before drawing conclusions.
- Establish today: call
mureo_state_getfirst, on every host (including Claude Code, where you would otherwiseReadthe file) and takeserver_nowfrom its response — ISO 8601 with UTC offset, e.g.2026-07-28T10:12:33+09:00. Its date is the only source of the current date for this run: every "days remaining until deadline" and required-pace calculation in step 4 is measured from it, so a stale date silently flips on-track / at-risk / off-track. Do not shell out (this skill must run in Bash-less headless hosts) and do not read the date off STATE.json —last_synced_at,reports.*.periodandaction_logtimestamps are history, never evidence of what day it is now. Never writeserver_nowinto STATE.json: it is a response field, and a persisted copy becomes tomorrow's stale "today". - Load context: Read STRATEGY.md (all Goal sections, Data Sources) and STATE.json (the same
mureo_state_getresponse from step 0 on MCP hosts). - Discover platforms: Identify all configured platforms and available data sources. Also include any hosted official-MCP connector present in the session (e.g. TikTok, key
tiktok_ads) — drive it via its own tools and skip mureo-only value-adds; see../_mureo-shared/SKILL.md→ Hosted-connector platforms. For each Goal, gather current metrics from all relevant platforms and data sources:
- Ad platforms: Use performance reporting tools for each platform
- GA4 (if available): Website conversion data, user behavior metrics
- Search Console (if available): Organic search metrics for SEO-related goals
- CRM (if available): Lead quality, pipeline data for LTV-related goals
For goals that span multiple data sources, synthesize a unified view. Example: "Total leads = Platform A 62 + Platform B 28 + Organic 15 = 105 total"
- Evaluate progress for each Goal:
- Compare current value against target
- Calculate % of target achieved
- Calculate days remaining until deadline — the Goal's
Deadlineminusserver_now's date - Assess trajectory: on-track / at-risk / off-track
Present Goal dashboard:
Goal Target Current Progress Deadline Status Status indicators:
- On track — current value meets or exceeds the pace needed to hit target by deadline
- At risk — current value is within 20% of target but trajectory is concerning
- Off track — current value is more than 20% away from target pace
- Consult evidence: Before recommending actions, check
action_logfor past actions with evaluated outcomes:- Reference validated findings when proposing similar actions ("Negative keyword cleanup has consistently improved CPA by 10-20% on this account")
- Flag previously rejected actions ("Device bid adjustments had no significant impact in the last 2 attempts")
- Do NOT attribute goal progress to specific actions without checking observation windows and sample sizes
- Recommend actions for off-track Goals:
- Tie recommendations to the specific platform(s) where the Goal is off-track
- If cross-platform rebalancing could help, suggest it
- Suggest specific commands to run (
/rescue,/budget-rebalance,/creative-refresh) - Prioritize recommendations by Goal priority (P0 > P1 > P2)
- Prefer actions backed by past validated evidence over unproven strategies
- Update STATE.json:
- Log the review to
action_logwith a summary of Goal statuses. Give every entry a display line:display_title(at most 40 characters) anddisplay_summary(at most 120) — what this action WAS, in the operator's words, as plain text with no markdown (**bold**reaches a person as asterisks). The dashboard row shows those two and stops there; the fullsummaryis drill-down only, so keep writing it as fully as the next agent needs and let the display line be the short one. Over either bound the append is refused, never truncated. - Update Current values in STRATEGY.md Goal sections if approved
- Log the review to
Persist the report summary (best-effort): Call
mureo_state_report_setwithreport="goal"and a concisesummaryobject so the read-only dashboard can render this review without re-running you. Follow this convention:generated_at: ISO 8601 timestamp of this run — useserver_nowperiod: the assessment window or "as of" date — the "as of" date isserver_now's datetotals: the account's headline figures, using the canonical metric vocabulary —spend,conversions,cpa,ctr,clicks,impressions. This is the block the dashboard renders as figures. Raw numbers only:773957, not"¥773,957";0.0466, not"4.66%"— one of those keys carrying a string is refused, because it sits where the view reads a figure and renders as nothing. A key outside the vocabulary may ride along: it is stored, just not shown as a headline number. Omittotalsentirely if this run gathered no account-level figures.kpis: per-Goal numbers (target, current, % of target achieved) — the breakdown, not the headline rowflags: a list of structured flags — each a small object{code, severity, params}so the dashboard renders a coarse, localizable chip with the numbers on drill-down:code: a canonical vocabulary key — one ofgoals_met,cpa_over_target,cpa_under_target,cv_below_target,cv_above_target,spend_spike,cpa_spike,invalid_traffic_suspected,zero_cv_adspots,budget_overspend,budget_drift,tracking_suspect,zero_conversions,supply_tools_unconfigured,anomaly_baseline_insufficient,pending_observations,search_console_no_property,ga4_not_configured.severity: one ofaction/watch/info/positive(omit to take the code's default —info/positivekeep informational and good-news flags visually distinct from alarms).params: an object holding the DETAIL (target, current, % of target). Keep detail inparams, NOT baked into the code — write{"code":"cpa_over_target","params":{"cpa":15200}}, never a slug likegoal_cpa_off_track.- For a finding outside the vocabulary use
{code:"custom", severity, label}wherelabelis a string or a{"ja":…,"en":…}map. Unknown non-customcodes are rejected. (A legacy bare-string flag still works but renders without the drill-down — prefer the object form.) - Example:
[{"code":"cpa_over_target","params":{"cpa":15200}}, {"code":"cv_below_target","params":{"cv":18}}]
narrative: the overall Goal-health verdict (on-track / at-risk / off-track) and what you propose next, at most 400 characters — the tool refuses a longer one rather than truncating it (a sentence cut in half is worse than a long one). Do not restate the figures and do not list the findings here: numbers belong intotals, findings inflags.
This is best-effort: if
mureo_state_report_setis unavailable (e.g. a pure file-mode host without the context MCP), skip it silently — the rest of this skill still works.Persist the display contract (best-effort): Call
mureo_state_display_setwith what the DASHBOARD shows. This is a different audience from the summary above — STATE.json is written for the next agent, and this small bounded section is the only thing the operator's screen reads. Write it in the SAME pass as the report, from the SAME figures, and reach no new verdict here: every value below is one you already decided, and this step only renders it.source: your own skill name — REQUIRED whenever you write any section, at most 24 characters. The contract is replaced wholesale by whoever writes it last, so this is what lets the card say whose answer it is showing.generated_atis stamped by the server — do not compute it.nav_message: the ONE line the operator should act on today — the goal that needs attention, e.g."CPA goal is off track with 11 days left — cut the two worst ad groups". One line, not a summary of the report.highlights: at most 3 chips, and thetonemust match the verdict you already gave —goodfor a target met or a clear win,watchfor something to keep an eye on,badfor something deteriorating. Choose the three that matter; a fourth is refused and nothing is dropped for you. Map a finding's severity to a chip tone: action → bad / watch → watch / positive → good. info does NOT become a highlight — a neutral note would spend one of the 3 chips an action or a win needed, and it is still in the report for whoever wants it.breakdown.campaigns/.adgroups: one row per entity you judged, carrying figures you ALREADY hold —spend,mcpa(the measured CPA) andtarget_cpa— plusstatefrom the closed set (target_met/improving/watch/worsening/no_data) and anoteof at most 40 characters. Usecampaignsfor the campaigns carrying each goal andadgroupswhere you judged that level; a review that judged neither omitsbreakdownrather than inventing rows. Omit a figure you do not have:0states a perfect CPA rather than the absence of one, andno_datais the state for an entity with too little delivery to judge.proposals: the recommendations you did NOT carry out, one entry each —title(what to do) plusbody(why, in one line) plusdate=server_now's date asYYYY-MM-DD. Something you DID apply this run is the same entry withstatus: "done".stated_values: label + figure chips ONLY ({"label": "…", "value": …}) — the goal figures:{"label": "goals on track", "value": "2 of 4"},{"label": "days to deadline", "value": 11}. No prose notes here. A sentence lands in a numeric column and the tool refuses it; anything that needs a sentence stays in the report'snarrativeabove, exactly where it goes today.
The bounds, verbatim from the tool: The dashboard reads THIS section and nothing else — keep your reasoning where it already goes. Every bound below refuses the write rather than truncating it, because a sentence cut in half is worse than a long one. nav_message: one line, at most 80 characters. highlights: at most 3 items of {tone, text}, tone one of good/watch/bad, text at most 60 characters. proposals: {title, body, status, date}, title at most 30 and body at most 80 characters, status one of proposed/done. breakdown.campaigns / breakdown.adgroups: rows of {name, spend, mcpa, target_cpa, state, note} — the three figures are raw numbers, state is one of target_met/improving/watch/worsening/no_data, note at most 40 characters. stated_values: {label, value}, label at most 24 characters and value a raw number or a string of at most 12 characters — a sentence there is refused, because it lands in a numeric column. Do NOT write the KPI funnel or the daily chart: mureo computes both from the stored totals.
Over a bound the write is REFUSED — shorten and rewrite, do not re-send the same sentence trimmed. Lead with the point and drop the connectives; a noun phrase is fine (
CPA 12% over target, notThe CPA is currently running about 12% above the target we agreed). Trimming one character at a time and calling again spends the run's context on a bound one rewrite would have met.You may not be the first writer today.
displayis REPLACED WHOLE and the last writer wins — there is no merge. Before you write it, read the current one (mureo_state_get). Of what another skill wrote TODAY, carry exactly one thing into your own write: itsproposalsthat are still live — not yet done, and not contradicted by what you just found. Everything else you write from your own run alone, because a screen assembled from two runs shows a moment that never happened. And carry over NOTHING ELSE: never copy another skill'snav_message,highlights,breakdownorstated_values, which would put its judgement under your name when you cannot vouch for it. Name yourself insourceso the screen says whose answer it is.This is best-effort: if
mureo_state_display_setis unavailable (e.g. a pure file-mode host without the context MCP), skip it silently — the rest of this skill still works.
IMPORTANT: When updating Goal "Current" values in STRATEGY.md, ask for approval first.
Does it work?
Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.
No reviews yet
People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.
- It worked
- Partly
- It didn't
Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.
Your trail
Files you open will collect here, so you can find them again.
Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.
Now do this for your own.
Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.

