The interesting question about cheap or free language models is not whether they can “browse the web.” It is whether they can run the same dull workflow correctly every single morning. That is a different problem, and it is the one worth solving.
Most low-cost models fail at web automation because they are asked to do too much at once: understand the goal, inspect the page, decide where to click, recover from layout changes, parse the result, and then write something useful. A single weak link breaks the whole run. The fix is to stop asking the free model to operate the browser at all. Instead, it works as a dispatcher: a tool called MediaUse drives the browser through site-specific plugins, while the model simply issues semantic commands such as “get the Hacker News top stories” or “read this Reddit thread.” MediaUse turns those commands into stable browser actions and returns structured JSON.
What the pipeline does
The result is a daily pipeline that uses OpenClaw with a free OpenRouter model as the orchestrator, MediaUse for the actual site interactions, and an optional stronger model for the final writing. It gathers signals from Hacker News and Reddit each morning and produces a draft article ready for a human to finish.
Why this beats asking a model to browse
A general browser agent has to reason over raw pixels and HTML. A site plugin does not. MediaUse packages website actions into predictable, named commands. For Hacker News, a call looks like this:
mediause hackernews get top --limit 20 --json
mediause hackernews read item --id <ID> --depth 2 --replies 20 --max-length 2000 --jsonAnd for Reddit:
mediause reddit search posts --query "open source AI agent" --subreddit "LocalLLaMA" --sort relevance --time day --limit 10 --json
mediause reddit read item --post-id <ID> --sort top --limit 30 --depth 3 --max-length 3000 --jsonThe model never needs to know where Reddit’s search box sits or how to scroll nested comments. It just calls an operation. Weaker models struggle with open-ended tasks but perform far better when the action space is small, named, and structured, which is exactly what this setup provides.
The pipeline at a glance
10:00 AM
-> OpenClaw wakes the workflow
-> OpenRouter owl-alpha chooses the plan
-> MediaUse Hacker News skill fetches today's top stories
-> MediaUse Reddit skill searches for matching reactions
-> Research JSON is normalized into one brief
-> MediaUse ChatGPT skill writes a Medium draft
-> Draft saved to ./drafts/YYYY-MM-DD-medium-draft.mdStep 1 — Install and configure MediaUse
On Windows, install or update the MediaUse CLI, set the API key, and add the site plugins:
powershell -C "iwr https://release.mediause.dev/install.ps1 -UseBasicParsing | iex"
mediause --version
mediause manage key --json
mediause plugin add hackernews --json
mediause plugin add reddit --json
mediause plugin add chatgpt --jsonThen connect the accounts. Hacker News allows guest reads, Reddit tends to work best in visible mode, and ChatGPT needs account context if it will handle the writing:
mediause use account hackernews:guest --policy balanced --json
mediause use account reddit: --policy balanced --show --json
mediause use account chatgpt: --policy balanced --json
mediause auth health --jsonStep 2 — Point OpenClaw at OpenRouter’s Owl Alpha
Create an OpenRouter API key, set it in the shell, and configure the orchestration model. The exact OpenClaw configuration changes between versions, but the parts that matter are the provider, the base URL, and the model. Free models come and go, so the model page is worth checking before depending on one in production.
$env:OPENROUTER_API_KEY = "<your-key>"provider: openrouter
base_url: https://openrouter.ai/api/v1
model: openrouter/owl-alpha
api_key_env: OPENROUTER_API_KEY
temperature: 0.2Step 3 — Give the agent a tight brief
The model should not be creative with the workflow. It is told to call a small set of commands and return strict output, supplied through the OpenClaw system prompt:
You are a daily technical research dispatcher.
Your job is to collect material for one Medium article draft.
Rules:
- Use MediaUse commands only for website data collection.
- Prefer structured JSON outputs.
- Do not browse manually. Do not invent article facts.
- Keep the final research bundle under 12,000 words.
- Stop if a site returns a risk prompt, captcha, or account challenge.
Workflow:
1. Get today's top Hacker News stories.
2. Select 3-5 about developer tools, AI infrastructure, open source, or software engineering.
3. Read each selected HN item with comments.
4. For each, search Reddit for matching discussion and read the most relevant thread.
5. Build a research bundle (title, source URL, why it matters, HN summary, Reddit feedback, notable disagreement, possible angle).
6. Send the bundle to ChatGPT via the MediaUse skill to draft the article.
7. Save the draft as Markdown.This is where a free model earns its place: it is not performing delicate web interactions, it is choosing from a menu.
Step 4 — Collect Hacker News and Reddit signals
Begin from the Hacker News guest context, then read each selected item along with its comments:
mediause hackernews get top --limit 30 --json | Out-File ./run/hn-top.json -Encoding utf8
mediause hackernews read item --id <ID> --limit 50 --depth 3 --replies 30 --max-length 4000 --json | Out-File ./run/hn-<ID>.json -Encoding utf8For each story, search Reddit for related discussion and pull the threads worth keeping. A little friction here is healthy; the quality of the final article depends on the quality of these signals.
mediause reddit search posts --query "<title>" --sort relevance --time day --limit 10 --json | Out-File ./run/reddit-search.json -Encoding utf8
mediause reddit read item --post-id <ID> --sort top --limit 50 --depth 3 --replies 30 --max-length 5000 --json | Out-File ./run/reddit-<ID>.json -Encoding utf8Step 5 — Normalize into one research bundle
Before requesting a draft, collapse the raw JSON files into a single compact brief. The exact schema matters less than the principle: hand the drafting model organized evidence rather than a pile of loose observations.
{
"date": "2026-06-08",
"article_goal": "Explain one practical developer trend from today's discussions.",
"stories": [{
"title": "Example project",
"source": "https://news.ycombinator.com/item?id=00000000",
"why_it_matters": "Short factual reason this is worth covering.",
"hn_summary": ["What HN liked", "What HN questioned", "Useful technical detail"],
"reddit_summary": ["What users tried", "Common praise or complaint", "Adoption signal"],
"disagreement": "The most interesting tension between the two communities.",
"article_angle": "A specific angle for the article."
}]
}Step 6 — Draft with a stronger model (optional)
This step can be skipped if everything is to be handled by the free OpenRouter model. The reason to keep it is simple: the orchestration model and the writing model do not have to be the same one. The free model is fine for issuing commands, while a stronger model may produce better final prose.
$research = Get-Content ./run/research-bundle.json -Raw
$prompt = @"
Write a Medium article draft from the research bundle below.
Style: technical teaching tone, concrete examples, no hype, no invented facts.
Include a clear title, image placeholders, and code blocks where they help.
Research bundle:
$research
"@
mediause chatgpt chat ask --prompt $prompt --timeout 120 --new true --json | Out-File ./run/chatgpt-draft.json -Encoding utf8
mediause chatgpt chat read --markdown true --json | Out-File "./drafts/$(Get-Date -Format yyyy-MM-dd)-medium-draft.md" -Encoding utf8Step 7 — Schedule it for 10:00 a.m.
OpenClaw’s own cron scheduler is the cleanest option, so the timing, model configuration, and workflow entry point all live in the agent layer rather than being split between OpenClaw and the operating system. The workflow lives in a file such as daily-medium-draft.openclaw.yaml:
name: daily-medium-draft
description: Collect HN and Reddit signals, then create a Medium draft through MediaUse.
schedule:
cron: "0 10 * * *"
timezone: "America/Vancouver"
model:
provider: openrouter
base_url: https://openrouter.ai/api/v1
model: openrouter/owl-alpha
api_key_env: OPENROUTER_API_KEY
run:
command: powershell.exe
args: ["-ExecutionPolicy", "Bypass", "-File", "C:\automation\daily-tech-brief\daily-medium-draft.ps1"]openclaw cron add ./daily-medium-draft.openclaw.yaml
openclaw cron listThe part worth leaving manual
Automatic publishing is the step to avoid. A daily draft is genuinely useful, but a fully unattended publishing pipeline is how a confident summary of something inaccurate, outdated, or based on a throwaway joke comment ends up live. A short human editing pass — roughly twenty minutes to cut weak claims, add a point of view, check links, and replace image placeholders with real screenshots — is what turns an automated draft into something worth reading.