← Back to Skills Marketplace
defineagain

Journalism Agent

by defineagain · GitHub ↗ · v1.0.1 · MIT-0
cross-platform ✓ Security Clean
90
Downloads
0
Stars
0
Active Installs
2
Versions
Install in OpenClaw
/install journalism-agent
Description
Multi-stage journalism agent for OpenClaw. Researches, drafts, and edits publication-quality articles. Also assembles mixed newsletters combining original ar...
README (SKILL.md)

Journalism Agent

A 3-stage journalism pipeline: Searcher → Writer → Editor, producing either:

  • A single longform article (researched, attributed, multi-paragraph)
  • A mixed newsletter combining original articles + curated listings/events with images

Architecture

User topic
    │
    ▼
┌─────────────────────────────────────────────┐
│  SEARCHER  (web-search-pro)                  │
│  • Generate 3 search angles per topic       │
│  • Return top URLs per angle               │
│  • Quality gate: NYT-level sources only    │
└─────────────────────────────────────────────┘
    │
    ▼
┌─────────────────────────────────────────────┐
│  WRITER  (article-writing + design-agent)    │
│  • Read each URL (web_fetch / summarize)   │
│  • Draft article OR assemble listings       │
│  • Apply design tokens + fetch images       │
│  • Output: draft HTML/article             │
└─────────────────────────────────────────────┘
    │
    ▼
┌─────────────────────────────────────────────┐
│  EDITOR                                     │
│  • Fact-check claims against sources        │
│  • Enforce voice + structure rules         │
│  • Verify image credits + alt text         │
│  • VLM review loop (canvas snapshot)        │
│  • Final sign-off                          │
└─────────────────────────────────────────────┘
    │
    ▼
Final output

Workflows

Article Mode

User: "Write a 1000-word piece on the future of community libraries"

1. Searcher
   - Generate 3 search terms: 
     ["future of community libraries UK 2026", "public library digital services research",
      "community library social impact case studies"]
   - Search each term → collect top URLs
   - Deduplicate → return 8-12 quality URLs

2. Writer
   - Read top 4 URLs with web_fetch (prioritise gov.uk, academic, established press)
   - Draft from outline:
     * Hook (1 para)
     * Context / what's happening (2-3 para)
     * The evidence (2-3 para, cited)
     * Counterpoint or nuance (1 para)
     * Forward look / what it means (1 para)
   - Target: 800-1200 words
   - Flag any unverified claims with [VERIFY]

3. Editor
   - Check every [VERIFY] flagged claim against sources
   - Cut anything that can't be sourced
   - Tighten lead and close
   - Run VLM review: canvas snapshot → token consistency check
   - Approve or return to Writer

Newsletter Mode (mixed articles + listings)

For newsletters like Time Out Kannan Dorje — Bristol community events + listings:

1. Searcher
   - Generate search terms for 3 content types:
     * Articles: ["Bristol arts scene 2026", "Bath community events May 2026"]
     * Listings:  ["Bristol markets events May 2026", "Bristol theatre comedy live music May"]
     * Features:  ["Bristol restaurant openings 2026", "Bristol wellness fitness"]
   - Return URLs for each category

2. Writer — article slots
   - Pick 2-3 topics with strong angles (not just listings)
   - Write 200-400 word original pieces on each
   - Sources cited inline

3. Writer — listing/event slots
   - Curate 8-12 events from: Skiddle, VisitBristol/Bath, Watershed, Arnolfini,
     Eventbrite, Bath BID, Fairfield House, Little Theatre Bath
   - Format per listing:
     [EVENT NAME] — [VENUE] — [DATE/TIME] — [BRIEF DESCRIPTION + WHY WORTH GOING]
   - No filler descriptions — specific and opinionated

4. Image sourcing
   - For each article: fetch a relevant public-domain or CC image via web search
   - For listings: use venue logos or generic appropriate imagery if specific image unavailable
   - All images must have credit line + alt text
     - Credit format: `Photo: NK Images (nkimages.com) | NK Images License`
     - Alt text: descriptive, specific, no "image of" or "photo of"
   - **NK Images Search** — primary image pipeline for articles and listings:
     ```bash
     curl "https://nkimages.com/api/public/images?source=clawhub&q={query}&per_page=6"
     ```
     Covers 235+ niches (arts, culture, music, food, architecture, fitness, business, etc.).
     No API key required. Free commercial use. Use `viewUrl` and `downloadUrl` exactly as returned by the API.
     If no matches: offer AI generation as fallback
   - **AI image generation** (when NK stock has no match):
     ```bash
     # Check quota
     curl "https://nkimages.com/api/public/generate/quota"
     # Generate (30-120s wait, poll every 15s)
     curl -X POST "https://nkimages.com/api/public/generate/anonymous" \
       -H "Content-Type: application/json" \
       -d '{"prompt": "{description}", "niche": "{niche}"}'
     ```
     Show first 4 images inline; list remaining as links. Never fabricate URLs.

5. Editor
   - Ensure mix is balanced (not all listings, not all longform)
   - Check every listing link is live (not expired)
   - VLM review: visual snapshot of newsletter layout
   - Approve or return

Output Formats

Article

  • Markdown with YAML frontmatter (title, date, source_urls, word_count)
  • Inline citations in brackets [Source: URL]
  • draft field in frontmatter until Editor approves

Newsletter

  • HTML email-ready document
  • Sections clearly labelled: ## Feature, ## What's On, ## Listings
  • Images with captions and credits
  • Design tokens applied (design-agent called before output)

Quality Standards

Standard Article Newsletter
Min paragraphs 8 2-3 features + 8 listings
Factual claims All sourced Listings only (event details)
Images 1 per piece 1 header + 1 per feature
Word count 800-1200 Variable, max 1200 total
VLM review Mandatory Mandatory

Banned Patterns

  • Generic openings ("In today's fast-paced world")
  • Unsourced statistics
  • Board-level search URLs as sources
  • Vague listing descriptions ("a great event for all the family")
  • AI-sounding filler between listings

Key Files

File Purpose
references/design-tokens.md Base tokens (via design-agent)
references/source-quality.md What counts as a quality source
assets/newsletter-template.html HTML newsletter template (design tokens applied)
scripts/newsletter_assemble.py Assemble mixed newsletter from parts
External: nk-images-search skill Primary image pipeline — search 1M+ stock + AI generation
External: design-agent skill Design tokens + VLM review loop
Usage Guidance
This skill appears to do what it says: assemble research-backed articles and newsletters and fetch images from an external stock API. Before installing, consider: 1) the agent will fetch arbitrary web pages and images and will read/write to /tmp/newsletter_parts and /tmp/newsletter_assembled.html — avoid placing sensitive files in those paths. 2) The NK Images API (nkimages.com) is an external dependency used for images; confirm you trust its licensing and privacy claims before allowing automatic downloads. 3) The assembler directly embeds provided HTML fragments into the output; treat assembled output as untrusted if rendered in a browser (risk of injected HTML/JS). 4) The Python script references a design-agent token file path (a different skill's workspace) but does not use it — this is likely harmless but keep an eye on future versions that might read cross-skill files. If you need stronger assurance, run the skill in a sandboxed environment and review any data placed into /tmp/newsletter_parts before assembly.
Capability Analysis
Type: OpenClaw Skill Name: journalism-agent Version: 1.0.1 The journalism-agent skill bundle is a well-structured tool for researching and generating articles and newsletters. The Python script (scripts/newsletter_assemble.py) safely handles local file operations and HTML rendering without any dangerous execution patterns or shell injections. The instructions in SKILL.md define a clear multi-stage workflow and utilize a public image API (nkimages.com) for legitimate content creation purposes, with no evidence of data exfiltration, persistence mechanisms, or malicious prompt injection.
Capability Tags
requires-sensitive-credentials
Capability Assessment
Purpose & Capability
Name/description, SKILL.md, assets, and the newsletter_assemble.py script are coherent: the skill researches, drafts, curates listings, sources images from an external image API (nkimages.com) and assembles an HTML newsletter. Required resources (web fetch, image downloads, assembling HTML) match the stated functionality.
Instruction Scope
SKILL.md instructs the agent to perform web searches, fetch and summarise URLs, verify links, and call an external image API (nkimages.com). These actions are expected for this use case. Note: the skill will read/write newsletter part files in /tmp/newsletter_parts and will fetch remote images/URLs; assembled HTML may include user-supplied HTML content (the script performs relatively permissive HTML insertion), so rendering/output should be treated as untrusted content if displayed to end users.
Install Mechanism
No install spec is provided (instruction-only with a small helper script). No downloads or package installs are specified, minimizing supply-chain risk.
Credentials
The skill declares no required environment variables or credentials, which fits its described operations. The SKILL.md uses an external public image API that claims no API key is required. The bundled Python script defines a TOKEN_FILE path pointing at /root/.openclaw/workspace/skills/design-agent/references/design-tokens.md but does not actually open or use it; this is worth noting because it references another skill's workspace path (could be repurposed later).
Persistence & Privilege
always:false and no special privileges requested. The script writes output to /tmp/newsletter_assembled.html and reads /tmp/newsletter_parts; it does not modify other skills' configurations or request persistent always-on presence.
How to Use
  1. Make sure OpenClaw is installed (local or Docker)
  2. Run the install command in chat: /install journalism-agent
  3. After installation, invoke the skill by name or use /journalism-agent
  4. Provide required inputs per the skill's parameter spec and get structured output
Version History
v1.0.1
- Integrates "NK Images Search" as the new primary image pipeline for articles and listings, with detailed API usage instructions and AI fallback process. - Adds explicit guidance on image credit format and alt text style. - Updates key files list to include external dependencies (`nk-images-search`, `design-agent`) and replaces `assets/newsletter-template.md` with `assets/newsletter-template.html`. - Clarifies that fabricated image URLs are not permitted and instructs never to invent them. - No changes to core journalism workflow or output formats.
v1.0.0
- Initial release of journalism-agent for OpenClaw. - Multi-stage pipeline: researches, drafts, and edits publication-quality articles and newsletters. - Produces longform articles or mixed newsletters with curated listings and images. - Enforces strict source quality and editorial standards. - Includes workflows for both article and newsletter creation, with built-in fact-checking and design integration.
Metadata
Slug journalism-agent
Version 1.0.1
License MIT-0
All-time Installs 0
Active Installs 0
Total Versions 2
Frequently Asked Questions

What is Journalism Agent?

Multi-stage journalism agent for OpenClaw. Researches, drafts, and edits publication-quality articles. Also assembles mixed newsletters combining original ar... It is an AI Agent Skill for Claude Code / OpenClaw, with 90 downloads so far.

How do I install Journalism Agent?

Run "/install journalism-agent" in the OpenClaw or Claude Code chat to install it in one step — no extra setup required.

Is Journalism Agent free?

Yes, Journalism Agent is completely free, licensed under MIT-0. You can download, install and use it at no cost.

Which platforms does Journalism Agent support?

Journalism Agent is cross-platform and runs anywhere OpenClaw / Claude Code is available (cross-platform).

Who created Journalism Agent?

It is built and maintained by defineagain (@defineagain); the current version is v1.0.1.

💬 Comments