weekly-report
Skill64 starsChanged 7 months agoApache-2.0View on GitHub
Generate a weekly summary report across all platforms. Use when the user asks for a weekly report, summary, recap, end-of-week review, or weekly digest. Also use when the user asks in Japanese (週次レポート / 今週のまとめ / 週報を作成して).
49 other projects use a version of this.
Adopted by
Most recently taken up by
- Adonis0123/adonis-skillstheir own version, first seen Nov 7, 2026
- CatCatUncle/openworkbuddytheir own version, first seen Nov 5, 2026
- kudeerliu48-web/CloseCodetheir own version, first seen Nov 1, 2026
- Srltas/claude-skillstheir own version, first seen Oct 31, 2026
- Gahotx/skillstheir own version, first seen Oct 29, 2026
- 14790897/my-skillstheir own version, first seen Oct 28, 2026
Used with
Projects with it also use agency-clients, cross-post-video and 10 more.
Other files people use alongside this one.
Files found in the same public projects as a version of this one, more often than they turn up anywhere else. Each project counts once, large collections count for less, and this file's own repository is left out.
posteverywhereSkillagency-clients
Work safely across several clients or brands in PostEverywhere. Use when the user manages social media for more than one client, brand or business, mentions a client by name, asks to switch clients, or when the connected accounts belong to different companies.
Also in 3 projects that use this
posteverywhereSkillcross-post-video
Post one video to several platforms with PostEverywhere, with the right title and caption for each. Use when the user wants to share a video, Reel, Short or TikTok across TikTok, Instagram Reels, YouTube Shorts, LinkedIn and Facebook Reels, or asks to "post this video everywhere".
Also in 3 projects that use this
CodeWithSulemanSkillapproval-workflow
Manage human-in-the-loop approval workflows for sensitive actions like payments, emails to new contacts, social media posts, and other actions requiring human oversight.
Also in 3 projects that use this
flintfromthebasementSkillwrite-blog-post
Write or edit a long-form blog post in a specific author's voice, then run it through six editorial passes (substance, structure, human voice, de-AI scrub, house style + O'Reilly word list, fresh-context critic) before delivering. Handles drafting from a brief, filling an outline, editing a draft, refreshing an old post, and applying revision notes. Use when the user wants a blog post that sounds like a real person wrote it, not a one-shot generation.
Also in 3 projects that use this
- +8 more from posteverywhere
Other versions49 projects use a version of this.
Word for word · 0
None found.
Edited · 0
None found.
Wrote their own version · 49
- genspark-ai/genoffice★ 12ksame name
- anthropics/cwc-workshops★ 2.3ksame name
- yunshu0909/yunshu_skillshub★ 760same name
- Azure/azure-dev★ 573same name
- claude-office-skills/skills★ 433same name
- CatCatUncle/openworkbuddy★ 398same name
- Itsokay-co/bio-vibing★ 17same name
- kudeerliu48-web/CloseCode★ 14same name
- calven-ai/marketing-as-code★ 10same name
- weklund/fiduciary★ 10same name
39 more not listed
How matches are found. Word for word: the exact same text. Edited: shares passages with this file (“99% same” means 99% of its five-word phrases also appear here; 10% or more counts). Their own version: similar meaning, or, weakest, the same name. We can’t tell which project had it first. Projects are counted among the 200 most-starred candidates, and mentions are links to the repository we found, up to 50 per site, so both counts are a floor.
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
- goal-reviewSkill
- 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
The file
We split this skill into the rules it gives an agent
5 rules. 0 are common, 2 are distinctive, and 3 are very specific to this project.
0
Common
Most of the 25 edited versions we read keep these.
2
Distinctive
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 26
Load context: Read STRATEGY.md and STATE.json (the same mureo_state_get response from step 0 on MCP hosts).
- Very specific: line 40
Actions taken: Read action_log from STATE.json, filter to the reporting period.
- Distinctive: line 52
If Search Console data is available, include organic search trend summary (clicks, impressions, CTR WoW change) and paid/organic keyword …
- Distinctive: line 64
Do NOT present pending observations as confirmed wins
“Common” is measured: kept by at least 6 in 10 of the 25 edited versions of this file we could read. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.
Files
Weekly Report
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.
Generate a weekly marketing operations report.
Prerequisites
- STRATEGY.md with Goals (run the
onboardskill first) - STATE.json with action_log (actions must have been logged during the week)
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: it fixes the 7-day reporting window in step 3, whichaction_logentries fall inside it, and every observation-window comparison below. 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 and STATE.json (the same
mureo_state_getresponse from step 0 on MCP hosts). - Discover platforms: Identify all configured platforms and available data sources — built-in,
mcp__mureo__<plugin>_*plugin platforms, and any hosted official-MCP connector present in the session (e.g. TikTok'stt-ads-*tools, keytiktok_ads). See../_mureo-shared/SKILL.md→ Plugin platforms and Hosted-connector platforms; pull a hosted connector's numbers from its own reporting tools and omit mureo-only value-adds. - Period: Determine the reporting period — the last 7 days ending on
server_now's date from step 0, never on a date inferred from STATE.json. - Goal progress: For each Goal, pull performance data from the relevant platforms:
- Google Ads: prefer mureo native
google_ads_performance_report(withperiod: "LAST_7_DAYS"thenperiod: "LAST_14_DAYS"and subtract the first 7 from the next 7 for previous-week comparison). If mureo's Google Ads tools are unavailable (e.g.MUREO_DISABLE_GOOGLE_ADS=1aftermureo providers add google-ads-official), fall back to the officialgoogle-ads-officialMCP's equivalent performance-report tool over the same two windows and perform the WoW subtraction the same way. - Meta Ads: prefer mureo native
meta_ads_insights_reportsimilarly. When summing Meta "results" across campaigns, group byresult_indicator— never aggregatelink_clicktotals together withpixel_leadtotals (PR #61). If mureo's Meta Ads tools are unavailable, fall back to the officialmeta-ads-officialhosted MCP for the raw insights over the same two windows; the official MCP does not surface aresult_indicatorfield, so you must inspect each campaign's optimization goal / actions list yourself and avoid aggregatinglink_click-optimized totals withoffsite_conversion.fb_pixel_lead-optimized totals — note this caveat in the report. - mureo BYOD data is centralized in the workspace
byod/directory (or~/.mureo/byod/for legacy CLI users) and is only accessible through mureo MCP tools — do not look for raw CSVs in the project directory. - Auth failure is not data — it is a hole in the report. Any tool result carrying
"status": "auth_error"means mureo could not read that platform for this period at all:auth_causeisno_credentials(nothing is configured) ortoken_invalid(a credential exists and the platform rejected it — typically an expired token), anddetailis the operator-facing sentence. Never renderdetailwhere a metric belongs, and never read that platform's missing or empty numbers as "quiet" — unreadable and quiet are different facts. Record the platform name with itsauth_causeand carry both into steps 10 and 12, then keep going for every other platform: one platform's credentials failing degrades the report, it never aborts the run. - Show week-over-week change for each Goal metric. If GA4 is available, include website-level metrics (sessions, conversion rate, revenue) for a holistic view.
- A partial week is not comparable to a complete one. A platform that answered
auth_errorcontributes nothing to either window — the same credential failed both pulls — so its week-over-week line is unknown, not flat and not a decline: render it as unread with itsauth_cause, never as0, never as-100%, never as a blank cell a reader fills in as zero. And never set a cross-platform or blended total computed without that platform beside a prior week's total that included it, whether that prior total comes from the previousreports.weeklykpisor from a fresh pull: that arithmetic manufactures a decline out of a credential problem, and this report is quoted onward. Either restate both weeks over the same set of platforms that answered this week — and label the total with that set — or withhold the comparison and name the platform whose absence blocks it.
- Google Ads: prefer mureo native
- Actions taken: Read
action_logfrom STATE.json, filter to the reporting period. Present as a timeline:Date Command Action Platform Summary - Impact assessment: For each action taken, evaluate impact using the relevant platform's trend/analysis tools. Cross-reference with GA4 data if available to validate on-site impact.
- Example: "Added 5 negative keywords on Mon → CPA decreased 8% by Thu"
- Example: "Shifted 20% budget to Platform A on Tue → impressions increased 15%"
- Cross-platform insights:
- Compare performance across platforms (CPA, CVR, ROAS)
- Identify platforms gaining or losing efficiency
- If Search Console data is available, include organic search trend summary (clicks, impressions, CTR WoW change) and paid/organic keyword overlap changes
- Suggest cross-platform shifts if one platform significantly outperforms others toward Goal achievement
- Next week recommendations:
- Based on Goal trajectory, suggest focus areas
- Recommend specific commands to run (
/rescue,/budget-rebalance,/creative-refresh,/goal-review) - Suggest Operation Mode change if appropriate (e.g., "Goals on track — consider switching from TURNAROUND_RESCUE to EFFICIENCY_STABILIZE")
- Evidence pipeline: Include an evidence assessment section:
- List actions with
observation_duedates that passed this week — "this week" is the step-3 window derived fromserver_now, so compare eachobservation_dueagainstserver_now's date, never against anotheraction_logtimestamp — then evaluate their outcomes by comparingmetrics_at_actionwith current metrics - List actions still in observation — note them as "pending, do not draw conclusions"
- Rate confidence in reported improvements: low (< 1 week data), medium (1 observation period), high (2+ consistent periods)
- Do NOT present pending observations as confirmed wins
- List actions with
Present report in a structured format suitable for sharing with stakeholders:
Partial report — this goes FIRST, above the executive summary. If any platform came back
"status": "auth_error"in step 4, this report is partial: open it by saying so, naming each affected platform with itsauth_causeand the recovery (no_credentials→ configure the credential viamureo configure/mureo auth setup;token_invalid→ re-authorize, the credential is present and dead). Then withhold every goal-progress verdict, week-over-week comparison and recommendation that depends on that platform's numbers — an unreadable platform has no performance to judge, and cross-platform advice (budget shifts, "scale here, cut there") derived only from the platforms that did answer is not the advice you would give with all of them. Report the platforms that did answer as usual, and make clear which is which. Because this report is shared with stakeholders and its totals get quoted onward, the partial marking must appear in the executive summary itself, not only in a footnote.- Executive summary (2-3 sentences)
- Goal progress table
- Cross-platform performance comparison
- Key actions and their impact (with confidence level)
- Evidence pipeline summary
- Recommendations for next week
- Log to action_log in STATE.json that a weekly report was generated, including the reporting period. 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. Persist the report summary (best-effort): Call
mureo_state_report_setwithreport="weekly"and a concisesummaryobject so the read-only dashboard can render this report without re-running you. Follow this convention:generated_at: ISO 8601 timestamp of this run — useserver_nowperiod: the reporting window from step 3 (e.g."LAST_7_DAYS"or an explicit date range ending onserver_now's date)totals: 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: the per-platform split (spend, conversions, cpa, week-over-week change) — 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 (platform, yen, cpa, week-over-week change). Keep detail inparams, NOT baked into the code — write{"code":"cpa_over_target","params":{"cpa":15200}}, never a slug likemeta_ads_cpa_up_15pct.- 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":"goals_met"}]
narrative: the executive summary — the verdict 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.
Never persist a number you did not read. For a platform that came back
"status": "auth_error", omit itskpisentry entirely rather than writing0— this rollup is the baseline the NEXT weekly run compares against, so a fabricated zero turns one week's credential problem into two weeks of phantom movement. Omit it from the blended totals too, or label those totals with the platforms they cover. Record the partial read as a flag —{"code":"custom","severity":"action","label":"<platform> not read: <auth_cause>"}— which is where a finding goes; thenarrativestates the verdict, not the list.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 — what next week turns on, e.g."CPA up 9% on Meta — shift ¥60k to Google Search". 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 week's campaigns andadgroupswhere you broke the week down that far. 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 week's headline comparisons:{"label": "WoW CPA", "value": "+9%"},{"label": "actions taken", "value": 5}. 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.
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.

