Portfolio skill · read-only · no account, no keys

npm download radar

One HTTP GET pulls the trailing-7-day npm download count — shape-asserted, value-fresh, read-only.

A real, replayable Reelier skill against a live public API. Every replay proves the same thing: npm's downloads API answers with a numeric weekly count — and writes a receipt saying exactly which assertions held.

What this checks

One step: an HTTP GET to npm's downloads API for the trailing-7-day count of the reelier package. Three assertions hold it to account: the API answered 200, downloads is a non-negative number, and the package name comes back as a string.

The assertions check the shape, never the value. The count changes every week, so the skill binds it onto the receipt (downloads = json.downloads) instead of pinning it — every replay records the fresh number, and a healthy pull is always the same shape.

StepsAssertionsEffectSeed run (2026-07-21)
13read1/1 passed · 167ms · 0 LLM tokens

Endpoint it hits:

  • https://api.npmjs.org/downloads/point/last-week/reelier

The skill file

This is the whole artifact — a markdown file with an assertion on every step. Copy it, check it into your repo, replay it anywhere.

npm-download-radar.skill.md — verbatim
---
name: npm-download-radar
description: Trailing-7-day npm download count for the reelier package — shape-asserted, value-fresh, read-only
---

<!-- synced from seldonframe/reelier examples/portfolio — edit there -->

# npm download radar

Inputs: (none — this file replays green as-is; see the personalization note)

<!--
  Personalization: swap the one literal `reelier` at the end of the URL for
  your own package name (the portfolio README's "Point these at YOUR project"
  section has the one-command version). The skill grammar deliberately has no
  default-value syntax for {{var}} holes — an unbound {{var}} is an explicit
  error, never a guessed fallback — so this file ships with a literal that
  works with zero flags instead of a hole that fails without one.

  Endpoint verified live on 2026-07-21: 200, body
  {"downloads":263,"start":"2026-07-14","end":"2026-07-20","package":"reelier"}.
-->

The assertions check the **shape**, never the value: the count changes every
week, but a healthy pull is always a 200 with a numeric `downloads` and the
package name echoed back as a string.

## Steps

### Step 1 — Last-week downloads
- intent: Fetch the trailing-7-day npm download count for the reelier package
- action: http.get {"url": "https://api.npmjs.org/downloads/point/last-week/reelier"}
- assert: status == 200
- assert: json.downloads >= 0
- assert: json.package is string
- bind: downloads = json.downloads
- effect: read
synced from seldonframe/reelier examples/portfolio · the file is the artifact

Run it yourself

reelier run takes a local file, so fetch the canonical copy first (or clone the repo). The replay is read-only, needs no account and no keys, and writes its receipt to .reelier/runs/.

sh
# straight from the repo's main branch (the canonical copy):
curl -fsSL https://raw.githubusercontent.com/seldonframe/reelier/main/examples/portfolio/npm-download-radar.skill.md -o npm-download-radar.skill.md
npx -y reelier@latest run npm-download-radar.skill.md

# or from a clone:
git clone https://github.com/seldonframe/reelier
cd reelier && npx -y reelier@latest run examples/portfolio/npm-download-radar.skill.md

The receipt

The portfolio README records a real seed run of this skill, replayed with the published CLI on 2026-07-21. Verbatim output:

run receipt · 2026-07-21 · reelier@0.12.1
✓ Step 1 — Last-week downloads [passed] 167ms

PASSED: 1/1 steps ok, 0 failed, 167ms total
[measured] 0 LLM tokens
replayed with the published CLI on 2026-07-21 · run record confirms passed: true, 0 LLM tokens (input + output)

And the proof keeps accumulating without anyone touching it: a GitHub Action replays all five portfolio skills every 6 hours (plus on demand) — the public Actions tab is the standing audit log. A failing endpoint produces an honestly failing receipt there, never a retried-until-green one.

Point it at your project

Swap the one literal `reelier` at the end of the URL for your own package name. The skill grammar has no default-value syntax for {{var}} holes — an unbound {{var}} is an explicit error, never a guessed fallback — so this file ships with literals that replay green with zero flags.

sh
sed 's/reelier/YOUR-PACKAGE/g' npm-download-radar.skill.md > my-download-radar.skill.md \
  && npx -y reelier@latest run my-download-radar.skill.md