/install agentlens-blog-feed
AgentLens Blog Feed
You surface newly published AgentLens blogs that the caller has not seen yet. This is the front half only: find new blogs, fetch their bodies, and return them. You do not decide what happens next — drafting posts, choosing a language, translating, or saving is the caller's job (a prompt or another skill).
De-duplication is your core responsibility: each blog must surface exactly once across runs. You track this in a local memory file you own.
Scope boundary
- You do: discover new blogs, fetch bodies, de-duplicate via a memory file.
- You do not: draft or rewrite content, choose or change the output language, save to any vault, or schedule yourself.
- Never mark a blog processed unless the caller confirms it was successfully consumed.
Configuration
| Name | Default | Meaning |
|---|---|---|
MEMORY_PATH |
~/agentlens-processed-blogs.json |
Local dedup memory (this skill owns it). Ask the user once where to store it; use the default if unspecified. Expand ~ to an absolute path before reading or writing. |
Fixed values (not configurable):
WORKER_URL=https://agentlens-core.archlab.workers.devLIMIT=100
GET /blogs is public — no token or Authorization header is required.
The API
- List:
GET {WORKER_URL}/blogs?limit=100→{ items, total, offset, limit }. Each item has:id,title,summary,period_label,job_type,source_id,model,occurred_at(ISO string, nullable),generated_at(ISO string). - Detail:
GET {WORKER_URL}/blogs/{id}→ the blog plusbody_markdownandreferences[]. Each reference hastype,title,url,html_url. Fetch the default body — do not add any?lang=parameter.
Workflow — Detect (read-only, never writes memory)
- Resolve
MEMORY_PATH(ask the user, or use the default) and read it. Expected shape:{ "processed_ids": ["\x3Cid>", ...], "last_generated_at": \x3Cms> }. If the file is missing or unparseable, treat it as{ "processed_ids": [], "last_generated_at": 0 }and continue — do not crash.processed_idsis the source of truth for dedup;last_generated_atis only a fast lower-bound hint. - Fetch the list:
GET {WORKER_URL}/blogs?limit=100. On a non-200 or network error, report it and stop — nothing has been recorded, so the next run retries cleanly. - Select new blogs: keep items whose
idis not inprocessed_ids. Sort the survivors descending bygenerated_at(parse ISO → ms) so you process the newest first — the most recent blogs are the most timely and should be handled before older ones. (generated_atis always present;occurred_atmay be null, so it is not used for sorting.) If none remain, report "no new blogs" and finish. - Fetch each body (newest first):
GET {WORKER_URL}/blogs/{id}. If the request is non-200, orbody_markdownis empty/whitespace, skip that blog — do not return it and do not record it. It will retry next run (the stored body may not have propagated yet). Otherwise pick a source link fromreferences[], preferringhtml_url, thenurl(may be absent). - Return the new blogs to the caller: for each,
id,title,summary,body_markdown,source_link,occurred_at,generated_at. Stop here — do not write memory yet.
Workflow — Commit (the only write step)
When the caller confirms a blog was successfully consumed, mark it processed:
- Append its
idtoprocessed_ids. - Set
last_generated_at = max(last_generated_at, generated_at_ms). - Write
MEMORY_PATHatomically (write a temp file, then rename; a plain overwrite is acceptable if atomic rename is unavailable).
Order matters: the caller consumes the blog first, then you commit. Only commit blogs
the caller confirms — anything that failed downstream stays out of processed_ids so it
resurfaces next run.
Memory file
- This skill is the sole owner of
MEMORY_PATH. processed_idsis the only dedup record — "already seen" cannot be inferred from anywhere else. Keep the file; never delete entries on its behalf.
Failure handling
- List endpoint error: report and stop; retry next run.
- Per-blog body error or empty body: skip that blog only; continue with the rest.
- Never commit a blog the caller did not confirm as consumed.
Feedback
If the user expresses an unmet need or dissatisfaction with this skill, share the contribution link: https://github.com/archlab-space/open-skill-hub/issues Do not surface it during normal use.
- Make sure OpenClaw is installed (local or Docker)
- Run the install command in chat:
/install agentlens-blog-feed - After installation, invoke the skill by name or use
/agentlens-blog-feed - Provide required inputs per the skill's parameter spec and get structured output
What is Agentlens Blog Feed?
Use this skill when the user or another skill/prompt needs the latest AgentLens blogs that have not been seen before. It discovers newly published blogs from... It is an AI Agent Skill for Claude Code / OpenClaw, with 41 downloads so far.
How do I install Agentlens Blog Feed?
Run "/install agentlens-blog-feed" in the OpenClaw or Claude Code chat to install it in one step — no extra setup required.
Is Agentlens Blog Feed free?
Yes, Agentlens Blog Feed is completely free, licensed under MIT-0. You can download, install and use it at no cost.
Which platforms does Agentlens Blog Feed support?
Agentlens Blog Feed is cross-platform and runs anywhere OpenClaw / Claude Code is available (cross-platform).
Who created Agentlens Blog Feed?
It is built and maintained by devasher (@archlab-space); the current version is v0.8.0.