weekly-brief
Build a 3-page Adology Weekly Competitive Intelligence Brief (PDF) from a project's scope.
Skill by adologyai
Install
Works with Claude Code, Claude apps, Codex, Cursor, Gemini CLI, GitHub Copilot, VS Code, OpenCode, Goose, Windsurf. Read the repository before you give any tool access to your data.
npx agentmarket install skill/adologyai-weekly-brief
Asks which of your tools to add it to (Claude Code, Codex, Cursor, VS Code, Windsurf, Gemini CLI, Claude Desktop) and shows the change first. See https://agentmart.dev/cli.
Get the weekly diff
The weekly diff: one email a week with new agent tools, notable updates and grade changes, plus security alerts for tools you follow. Double opt-in, one-click unsubscribe.
About
Use cases: documents, design, testing, data
Reviews
Write a reviewNo reviews yet. Installed it? Reviews come from verified installers only. How reviews work
Permissions
What this skill can do and what it asks for, from its SKILL.md. Checked Oct 25, 2026.
- Tools
- No tools found
- Secrets
- None asked for
- Install scripts
- None found
- Runs as
- Python package
Network hosts it talks to 1
codeload.github.com· found in install command
Files it touches
~/.claude/skills/weekly-brief
What's inside
- Skill name
weekly-brief- Description
- Build a 3-page Adology Weekly Competitive Intelligence Brief (PDF) from a project's scope. Produces Page 1 (Visual Scoreboard + Intel Strip), Page 2 (Market Signals), and Page 3 (Social Trends + Coaching) — each built independently, then assembled into a single QA'd PDF with real thumbnails. Use this skill whenever the user says "weekly brief", "competitive brief", "run the brief", "weekly report", "competitive recap", "generate the report", "build the brief", or references the 3-page Adology report. Also trigger when the user asks for a competitive intelligence PDF, a weekly scoreboard, or says "brief me on [brand]". Trigger liberally — if it sounds like they want a multi-page competitive analysis document from Adology data, this is the skill.
- License
- Apache-2.0
- Instructions
- 439 lines in SKILL.md · view on GitHub
Before installing
- Ships executable scripts
Files (13)
- SKILL.md
- P1_output_schema.yaml · references/
- P1_prompt.txt · references/
- P1_render_package.html · references/
- P2_output_schema.yaml · references/
- P2_prompt.txt · references/
- P2_render_package.html · references/
- P3_output_schema.yaml · references/
- P3_prompt.txt · references/
- P3_render_package.html · references/
- assemble_pdf.py · scripts/
- download_thumbnails.py · scripts/
- qa_check.py · scripts/
SKILL.md (first lines)
# Weekly Competitive Intelligence Brief
Build a polished 3-page PDF competitive intelligence report from an Adology project's scope.
Each page is a self-contained "slide" with its own data pipeline, rendered as HTML via
WeasyPrint, then merged into a single PDF. Every page includes real post thumbnails.
## Architecture Rules
**DO NOT use subagents.** Build all 3 pages yourself, sequentially, in the main thread.
Subagents caused cascading failures in production — they made unchecked decisions,
crashed the sandbox disk, and couldn't be course-corrected.
**Thumbnails are MANDATORY.** Every scoreboard card, spotlight, trend card, and coaching
card must have a real thumbnail image from the actual post. The skill includes a bundled
script (`scripts/download_thumbnails.py`) that handles downloading, resizing, and
base64-encoding. You run this script — it produces a JSON file mapping image URLs to
small base64 data URIs. Then you insert those data URIs into the HTML `<img>` tags.
There is no alternative to this. Do not skip thumbnails. Do not use CSS placeholders.
Do not use colored rectangles with initials. Download the real images.
**Coverage is part of the brief, not a caveat you drop.** A weekly brief is a claim about
a window. Say which sources actually cover that window and name the ones that don't — by
name, on the page. A stale source that goes unmentioned turns a data gap into a false
finding ("Brand X went quiet this week" when nobody fetched Brand X).
## Path Conventions
This skill's shell examples use two literal placeholders that you must substitute
before running any command:
- `{skill_path}` — the absolute path to this skill's directory (the directory
containing this `SKILL.md`). At runtime this resolves to something like
`/Users/<you>/.../skills/weekly-brief`. Use it to invoke bundled scripts under
`scripts/` and to read reference files under `references/`.
- `{output_dir}` — the working/output directory for this brief's HTML, JSON,
and final PDF artifacts. Pick a fresh directory per run (e.g.
`outputs/<project_name>-<week_end>/`) and substitute it consistently across the
whole workflow.
If you see either placeholder in a command, **replace it with the actual path
before executing**. Do not pass the literal string `{skill_path}` to a shell.
## Overview
The brief has three pages:
- **Page 1 — Visual Scoreboard + Intel Strip**: Top 6 posts across brands (scoreboard
grid with real thumbnails), primary brand spotlight, stat pills, insight bar, and a
3-column intel strip with hook/creative/AI analysis.
- **Page 2 — Market Signals**: Industry news headlines with strategic signals, audience
conversation, hook performance charts, brand engagement leaderboard, paid presence,
and a 3-card action board (Defend / Attack / Watch).
- **Page 3 — Social Trends + Coaching**: 5 trend cards (with real thumbnails and source
links), plus 3 coaching cards with real thumbnails showing how to optimize existing
primary brand posts with specific data-backed tweaks.
## Workflow
### Phase 0 — Orient and Fix the Scope
1. **Ask for inputs** (if not already provided):
- `primary_brand` — the brand being briefed
- the portfolio or project to brief on
- `week_start` / `week_end` — the Monday–Sunday window (default: last full week)
2. **Orient**: `whoami` → `list_portfolios` → `list_projects({ portfolioId })`. Reuse an
existing project whose scope matches the brief, or `create_project` for a fresh one.
The project IS the scope — everything the brief reports comes from what that project
covers.
3. **Read the scope and its coverage**: `get_project({ projectId })` returns `dataScope`
plus the full per-source access state — `access.expiredSources` (covered only through
a date) and `access.ungrantedSources` (tracked but never acquired). Write these two
lists down now; they become the coverage note on the delivered brief. A project with
an empty scope reads the portfolio's whole tracked universe; `update_project_scope`
with `replace` pins it to exactly the sources this brief is about.
4. **Check the window has enough behind it**: `aggregate` over the brief window —
`groupBy: ['brand']`, `filters: { feedType: ['brand'], from: week_start, to: week_end }`,
`measures: [{ field: '*', fn: 'count', as: 'n' }]`. Three or more brands and 20+ items
is a workable brief. Below that, say so before building.
5. **If the window is thin because coverage is stale**, plan a pull: `pull_data({ projectId,
candidates })` splits the targets into `readyNow` (attached free, already current) and
the gap it quotes. **`confirm_pull` charges credits** — show the user the quoted cost
and the sources it covers, and call it only after they approve. Then `check_pull({ runId })`
to watch it land. If they decline, build the brief on what's covered and name the gap.
### Phase 1 — Pull Shared Data (One Pass)
Pull the core data once; multiple pages read from it. This keeps the pages consistent with
each other and keeps the round-trips down.
**Step 1A — Discover the label vocabulary.** Call `list_labels({ projectId })` (or
`get_table_data({ projectId, listDimensions: true })`) to see which dimensions this scope
actually carries. Use those exact dimension names in every later call — a dimension the
scope doesn't have produces an empty table, not an error.
**Step 1B — Time series and leaderboard (P1 stat pills + P2 leaderboard).**
`aggregate` with `groupBy: ['time','brand']`, `timeBucket: 'week'`,
`measures: [{ field:'*', fn:'count', as:'n' }, { field:'likes', fn:'median', as:'medianLikes' }]`,
`filters: { feedType:['brand'], from: week_start, to: week_end }`. Every row carries `n`.
A ranking call comes back split: `rows` cleared the reliability floor, `directionalRows`
sat below it. **Rank from `rows`.** A `directionalRows` entry may appear as texture with
its `n` stated ("two posts, so read it as a signal"), never as a leaderboard position.
Run the same call with `filters.excludeBoosted: true` for the organic-only cut. The
difference between the two is the paid-presence read on Page 2 — and if you report the
organic number, say that you excluded boosted posts.
**Step 1C — This week's outliers (P1 scoreboard + P3 trends).**
`query_items` with `projectId`, `feedType: ['brand']`, `startDate`/`endDate` set to the
window, `sortBy: 'likesMultiple'`, and `outlierMetric: 'likes'` + `minOutlierMultiple: 2`.
This ranks posts by lift against their own source baseline, so a small brand's breakout
can outrank a big brand's routine post — which is what a competitive brief is for. Each
row carries `likesMultiple` alongside `sourceMedianLikes`: **never print a lift multiple
without its baseline.** Rows also carry `isOutlier`, `boosted`, and `externalUrl`.
Walk the ranked list top-down and keep the first post per brand until you have 6 uniqueFrom adologyai/content-intelligence-plugin, Apache-2.0.
More from adologyai/content-intelligence-plugin
- 0.563score
tone-of-voice
adologyai
Build a distinctive, actionable tone of voice for a brand — grounded in Jungian archetypes, audited from Adology data, pressure-tested against competitors…
SkillBFreshness: B★ 2Claude Code +9 - 0.563score
audience-deep-dive
adologyai
Build a rich, behaviorally grounded audience profile that goes well beyond demographics — surfacing the fears, desires, jobs-to-be-done, category tensions…
SkillBFreshness: B★ 2Claude Code +9 - 0.563score
content-strategist
adologyai
Turns competitive creative data into briefable creative direction.
SkillBFreshness: B★ 2Claude Code +9 - 0.563score
creative-toolkit
adologyai
Builds a living creative toolkit for a campaign or brand — a curated library of hooks, angles, copy lines, scripts, and content concepts sourced from…
SkillBFreshness: B★ 2Claude Code +9 - 0.563score
data-explorer
adologyai
Guides querying, filtering, and curation across a project's scope.
SkillBFreshness: B★ 2Claude Code +9 - 0.563score
research-analyst
adologyai
Guides competitive analysis and benchmarking inside a project's scope.
SkillBFreshness: B★ 2Claude Code +9 - 0.557score
brand-marketing-mode
adologyai
Activates Brand Marketing Mode for Adology — a way of thinking about content and brands that blends what we can observe in the data with brand science…
SkillBFreshness: B★ 2Claude Code +9 - 0.557score
getting-started
adologyai
Introduces Adology's competitive and audience intelligence platform.
SkillBFreshness: B★ 2Claude Code +9 - 0.557score
influencer-coach
adologyai
Personal performance coach for influencers and creators.
SkillBFreshness: B★ 2Claude Code +9 - 0.557score
thumbnails
adologyai
Work with Adology thumbnails — the poster frame on every item.
SkillBFreshness: B★ 2Claude Code +9 - 0.557score
brand-builder
adologyai
Builds out a portfolio's tracked universe and the project scopes analysis reads from.
SkillBFreshness: B★ 2Claude Code +9 - 0.548score
influencer-vetting
adologyai
Vet, score, and select influencer/creator partners for brand campaigns using content intelligence.
SkillBFreshness: B★ 2Claude Code +9
Signals
- Stars
- 2
- Forks
- 1
- Open issues
- 0
- Last commit (this folder)
- Jul 31, 2026 (2 months ago)
- Last release
- Jul 31, 2026 (2 months ago)
From GitHub (fetched Oct 24, 2026).
Details
- License
- Apache-2.0
- Website
- adologyai.com
- First seen
- Oct 24, 2026
- Last checked
- Oct 24, 2026
- Source
- GitHubgithub-graphql
More from adologyai
- 0.563score
data-explorer
adologyai
Guides querying, filtering, and curation across a project's scope.
SkillBFreshness: B★ 2Claude Code +9 - 0.563score
research-analyst
adologyai
Guides competitive analysis and benchmarking inside a project's scope.
SkillBFreshness: B★ 2Claude Code +9 - 0.563score
audience-deep-dive
adologyai
Build a rich, behaviorally grounded audience profile that goes well beyond demographics — surfacing the fears, desires, jobs-to-be-done, category tensions…
SkillBFreshness: B★ 2Claude Code +9 - 0.563score
content-strategist
adologyai
Turns competitive creative data into briefable creative direction.
SkillBFreshness: B★ 2Claude Code +9 - 0.563score
creative-toolkit
adologyai
Builds a living creative toolkit for a campaign or brand — a curated library of hooks, angles, copy lines, scripts, and content concepts sourced from…
SkillBFreshness: B★ 2Claude Code +9 - 0.563score
tone-of-voice
adologyai
Build a distinctive, actionable tone of voice for a brand — grounded in Jungian archetypes, audited from Adology data, pressure-tested against competitors…
SkillBFreshness: B★ 2Claude Code +9
Cite this page
weekly-brief skill. Agent Mart. https://agentmart.dev/skills/adologyai-weekly-brief (last updated 2026-10-24)