bootstrap-content-agent
Skill3 starsChanged 3 months agoMITView on GitHub
Scaffold a new autonomous content agent from this kit. Use when the user says "build me an agent that <does X>", "set up a content/social/news agent", or "bootstrap an agent from content-agent-kit". Interviews the user, then generates their project-specific playbook, knowledge doc, scripts, state, schedule, and (on Claude Code) runtime skills.
- Reads credentials
In this repository16 other files it gives its agents.
- AGENTS.mdAGENTS.md
- ads-reportSkill
- audit-and-fixSkill
- crawl-and-queueSkill
- create-videoSkill
- daily-runSkill
- daily-topic-videoSkill
- design-campaignSkill
- geo-optimizeSkill
- motion-craftSkill
- new-templateSkill
- repurposeSkill
- research-and-captureSkill
- review-gateSkill
- topic-radarSkill
- video-and-postSkill
The file
We split this skill into the rules it gives an agent
11 rules. About 0 are common, 4 are distinctive, and 7 are very specific to this project.
≈0
Common · estimate
Many files like this have a rule of this kind.
≈4
Distinctive · estimate
This author's own choices. Worth a look.
7
Very specific
Tied to their project's names, files or tools. Probably skip.
- Common
- Distinctive
- Very specific
- could be automatic: a setting could enforce it
- Very specific: line 12
Read docs/01-architecture.md and docs/03-conventions.md in full.
- Very specific: line 16
If the agent will make video, also read docs/20-video-backends.md.
- Distinctive: line 22
Ask (batch related questions.
- Very specific: line 34
If yes: how many per week.
- Distinctive: line 59
Ask for 1–2 samples they consider good — you'll mine them for the before/after pairs.
- Very specific: line 99
Add to the generated .env.example: TTS_PROVIDER + that provider's key copied verbatim from the kit's .env.example (vbee's is VBEE_TOKEN, …
- Very specific: line 133
Run each script with --help to confirm it loads (env-only.
- Very specific: line 142
Never hardcode a secret: If the API needs a token, reference an env var and add it to .env.example.
- Distinctive: line 145
Copyright: if crawling, excerpt-only + original writing.
- Very specific: line 149
Look at the output: After the first render, run contact-sheet.mjs and actually look.
- Distinctive: line 152
Keep it "little but high quality" — a tight cadence beats volume.
≈ “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
Bootstrap a content agent
You are turning this kit into a working, project-specific content agent. Work in phases. Do not skip the interview — the answers drive everything you generate.
Phase 1 — Read the method
Read docs/01-architecture.md and docs/03-conventions.md in full. Then skim
docs/02-playbook-spec.md, docs/05-publishing.md, docs/06-scheduling.md,
docs/07-review-gate.md, docs/08-audit-maintain.md, docs/10-crawl-discovery.md and
docs/11-social-posting.md.
If the agent will make video, also read docs/20-video-backends.md; if it will use skills or
connectors from elsewhere, docs/17-skills-registry.md and docs/18-ads-and-marketing.md.
Internalize the six parts (playbook / knowledge / state / scripts / discovery / schedule)
and the non-negotiable conventions (env-only, review-gate, idempotent, cleanup).
Phase 2 — Interview the user
Ask (batch related questions; propose sensible defaults):
- Domain & goal — what content, for whom, published where?
- Item types & schema — what kinds of items (article / long serialized / case / …), and the exact fields each needs. Get one concrete example per type.
- Cadence — how many per day; rotate phases? (phase = day mod N).
- Publish target — is there an ingest API? Base URL + endpoint paths + auth. If none, is it social-only?
- Discovery — should it crawl sources for ideas (crawl4ai)? If yes, list a few source index pages + the article-link pattern. (Copyright: excerpt+link only.)
- Social — post to Make.com/n8n/Zapier? Which platforms (tiktok / youtube_shorts /
facebook_reels / instagram_reels / plain page posts)? Media host (Cloudinary/Catbox)?
6b. Video — does this agent make short videos as well as (or instead of) text+image?
If yes: how many per week; channel name + brand URL for the outro; which TTS provider
(a cloud key is enough — only
omnivoiceneeds a local server); whether scenes should use real footage (needs a Pexels or Pixabay key) and screenshots (needs nothing extra — Chrome is already required); and where finished video is hosted (r2is the default; nevercatboxfor anything published). Confirm the render machine has FFmpeg and Chrome — GitHub Actions cannot do this step at all (docs/06-scheduling.md). 6c. Personal or business? This picks a profile (VIDEO_BACKENDplusprofiles/personal.jsonorprofiles/business.json): backend, voice, palette, brand slots and a spend ceiling. Both default to the freehtmlbackend — only move toapifor a deliberate hero video, never for a daily queue (Veo bills $0.40/s, so a 60-second video is $24). - Scheduling — GitHub Actions cron / Windows schtasks / manual?
- Access tiers — free/login/paid split; anything forbidden.
8b. Measurement (optional) — do they run ads for this content? If yes,
.mcp.jsonhas Pipeboard servers for Meta/Google/TikTok/Snap/Reddit and theads-reportskill turns what they report into next week's queue. Warn them those connections are read AND write on live accounts. 8c. Images (optional) — do they need campaign visuals rather than stock photos? Canva's MCP is declared in.mcp.json, and thedesign-campaignskill exports a file, not a Canva link. Ask which plan they are on: resize needs Pro, autofill needs Enterprise, so the canvas size has to be decided before designing. - Voice & craft (do not skip — this is what makes output not read like AI):
- Publication language + tone; who is the implied author?
- One register per content type — how should each sound, and how do they differ?
- Which clichés/phrases are overused in this language & genre? (get 5–10 concrete ones)
- Any hard genre contract? (e.g. mystery fair-play, journalism sourcing, brand rules)
- Ask for 1–2 samples they consider good — you'll mine them for the before/after pairs.
Phase 3 — Scaffold (generate into the user's project)
From templates/ + scripts/, produce:
PLAYBOOK.md— filltemplates/PLAYBOOK.template.mdwith the interview answers.WRITING_CRAFT.md— filltemplates/WRITING_CRAFT.template.md(seedocs/12-writing-craft.md). Start fromtemplates/INDUSTRIES.template.json. Find the user's vertical, and use itspost.typesto fill the register sections,post.proofto define what evidence looks like here, andpost.avoidfor the banned list. If the entry has alegalblock — healthcare, finance and property all do — copy those rules in with their source links. They are the difference between a post that is merely weak and one that costs a fine. Write it in the publication language, one register section per content type, a concrete banned-cliché list, and 2–3 BEFORE/AFTER pairs you author yourself (never copy copyrighted prose). End with the §7 rubric using countable fail thresholds. This file is what stops the output from reading like AI — do not skip or stub it.KNOWLEDGE.md— filltemplates/KNOWLEDGE.template.mdwith the real API contracts..env.example— only the env keys this agent needs (copy from kit.env.example, trim).- State:
history.json,ledger.json(if serialized),queue.json— start from the examples intemplates/state/. - Scripts: copy the needed ones from
scripts/(publish/append/update/queue-client/ social/scheduler/crawl). Adjust default endpoint paths (--path/QUEUE_PATH) to the user's API. Do NOT hardcode secrets — env-only. - Video (if chosen in 6b):
VIDEO_CRAFT.md— filltemplates/VIDEO_CRAFT.template.md, written in the publication language. §5 (voice + banned narration clichés) is the part only the user can answer; §2's number table stays as-is for Vietnamese, and must be rewritten for any other TTS language.- Copy
scripts/video/ANDscripts/media/(whole folders, including theirlib/), plusvideo-templates/(all templates and everyNOTICE.md— attribution is a licence condition — and the rootNOTICE.mdtoo). Withoutscripts/media/the render cannot resolve B-roll or screenshots and cannot upload anything. - Copy
templates/VIDEO_SCRIPT.template.jsonas the writer's starting point,templates/VIDEO_GENRES.template.json(scene sequences for review / tutorial / news / listicle / testimonial — it answers "which frames, in what order", which the catalogue does not), andtemplates/stock-sources.yaml.templateif they want clips from sites with no API. - Copy the chosen profile from
profiles/and set itsbrandfields from the interview. Leave a brand field EMPTY rather than guessing — an empty slot is dropped, a guessed one is published. - Add to the generated
.env.example:TTS_PROVIDER+ that provider's key copied verbatim from the kit's.env.example(vbee's isVBEE_TOKEN, notVBEE_API_KEY— this exact mismatch shipped once and made vbee unusable for anyone following the docs),MEDIA_HOST(defaultr2) + its keys,PEXELS_API_KEY/PIXABAY_API_KEYif using B-roll, andSOCIAL_PLATFORMS. - Tell them to run
node scripts/media/host-check.mjsandnode scripts/video/tts-check.mjsbefore the first real render — both fail loudly on a misconfigured key, which is much cheaper than finding out mid-render.
- Discovery (if chosen):
sources.yamlfrom the template +crawl.py+ the cron workflow fromtemplates/workflows/crawl.yml.template. schedule-prompt.md— from the template, wired to this agent's phases.- On Claude Code: copy the runtime skills into
.claude/skills/:daily-run,review-gate,crawl-and-queue(if crawling),audit-and-fix, pluscreate-videoandvideo-and-postandresearch-and-captureif the agent makes videos,topic-radar+daily-topic-videoif the agent works from a topic the user names each morning rather than from a crawled queue (they need no keys — every source is keyless — anddaily-topic-videois the whole radar→video→publish chain in one ask),ads-report(it works with no ad spend too — pasted numbers),repurposeif they publish to more than one channel,geo-optimizeif anything they publish is meant to be found — it carriesscripts/geo-audit.mjs, which gates a draft on whether a passage still means anything once an answer engine quotes it alone — anddesign-campaignif Canva is connected.new-templateandmotion-craftbelong in a kit checkout rather than a generated agent: they editvideo-templates/and the gates around it, which a downstream agent does not own. - Skills from elsewhere (optional):
node scripts/install-skills.mjs --listshows an SEO auditor, design skills, Opus 5.5 code-video & media skills (opus-55-videos,opus-video-skills,opus-video-styles,motion-video-kit,explainroo,video-lens), and marketing skills, fetched on demand rather than vendored. Suggestseoandmkt-context(plusopus-55-videosandopus-video-stylesfor video agents) as the ones with the broadest payoff. On Antigravity, tell the user the scheduled task should say "Read PLAYBOOK.md and execute today's phase".
Phase 4 — Wire & verify
node -ceach generated.mjs;python -m py_compile crawl.pyif present.- Run each script with
--helpto confirm it loads (env-only; missing env → clear error). - Check one real caption through
node scripts/social/validate-post.mjs <file> --strict. Captions render no Markdown, so a##heading or aMeta:/Slug:block reaches the reader verbatim.make-post.mjsrefuses to send text that fails, so a writer who does not know this will hit the wall at publish time rather than at write time. - Grep the generated project for accidental secrets (see
docs/09-security.md). - Show the user: the file tree created, how to fill
.env, and how to trigger the first run.
Guardrails
- Never hardcode a secret. If the API needs a token, reference an env var and add it to
.env.example. - Always include the review gate in the generated PLAYBOOK §2b.
- Copyright: if crawling, excerpt-only + original writing; prefer public-domain.
- Never leave someone else's brand in a slot default. Templates ship with empty brand fields on purpose: an empty slot is removed, a leftover one is published on the user's video. This has been fixed twice; do not reintroduce it.
- Look at the output. After the first render, run
contact-sheet.mjsand actually look. Two templates once rendered landscape inside a 9:16 video with the render succeeding and the validator passing — only the contact sheet caught it. - Keep it "little but high quality" — a tight cadence beats volume.
Antigravity note: this file is also a plain instruction doc. Follow the phases directly; "copy skills into
.claude/skills/" becomes "keep theSKILL.mdfiles as reference docs the scheduled agent reads."
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.

