# Agent catalog > **GENERATED — do not edit.** Regenerate with `node agents/catalog.mjs` > (source of truth: the `@agent-manifest` header in each script). An **agent** = an LLM orchestrator script + its role prompt (`prompt:`) + its skills (MCP servers, `skills:`) + its tools (`api/cli/*.php` bridges and `lib/*.mjs`, `tools:`). To port an agent to another SeedProject clone, satisfy its manifest: copy its prompts, ensure its tools exist, migrate each table in `reads:`/`writes:`, configure its MCP servers. `agents.json` is the machine-readable version — diff it against a clone to find gaps. ## content Cron/manual-triggered producers of gated drafts (events auto-publishes). | agent | trigger | model | skills | tools | reads → writes | description | |---|---|---|---|---|---|---| | **news-radar** ([agents/scripts/news-radar.mjs](../agents/scripts/news-radar.mjs)) | manual / cron-capable (maintains news-queue.json for the writer) | research=claude-opus-4-8 | — | lib/claude.mjs | — → — | Discover timely niche news and maintain news-queue.json; the daily writer drains it first. | | **research** ([agents/scripts/research.mjs](../agents/scripts/research.mjs)) | manual (auto-invoked by writer when the evergreen backlog runs low) | research=claude-opus-4-8 | — | lib/claude.mjs, lib/calendar.mjs | — → — | Top up the evergreen backlog in calendar.json (additive, deduped); timely news is the news radar's job. | | **reviser** ([agents/scripts/revise.mjs](../agents/scripts/revise.mjs)) | manual (auto-invoked when the SEO gate fails and autoRevise is on) | writer=claude-sonnet-4-6 | — | lib/claude.mjs | — → — | Feed the SEO audit's fixes back to the writer and re-audit until the draft passes or attempts run out. | | **seo-review** ([agents/scripts/seo-review.mjs](../agents/scripts/seo-review.mjs)) | manual (auto-invoked by writer/approve gates) | reviewer=claude-opus-4-8 | — | lib/claude.mjs | — → — | Audit one article for EEAT / spam-policy / on-page SEO / AEO / readability → seo-review.json. | | **writer** ([agents/scripts/write-daily.mjs](../agents/scripts/write-daily.mjs)) | cron:run.sh write-daily.mjs(daily) | writer=claude-sonnet-4-6 | mcp__claude_ai_Higgsfield | lib/claude.mjs, lib/calendar.mjs | — → — | Draft one article (MDX + cover + sources) — today's news first, else next evergreen calendar topic. | ## plumbing Deterministic helpers — not agents (no LLM), catalogued for completeness. | agent | trigger | model | skills | tools | reads → writes | description | |---|---|---|---|---|---|---| | **approve** ([agents/scripts/approve.mjs](../agents/scripts/approve.mjs)) | manual [--force] | - | — | lib/publish.mjs | — → — | Approve a draft: SEO gate, then promote it into the blog, build, go live. No LLM. | | **list-drafts** ([agents/scripts/list-drafts.mjs](../agents/scripts/list-drafts.mjs)) | manual | - | — | — | — → — | List pending drafts awaiting review. No LLM. | | **publish-tick** ([agents/scripts/publish-tick.mjs](../agents/scripts/publish-tick.mjs)) | cron:run.sh publish-tick.mjs(15m) | - | — | lib/publish.mjs | — → — | Once per day after the morning floor, publish ONE eligible draft (SEO-gated) with a randomized earlier-today timestamp. No LLM. |