Getting it into your agent
It runs from inside its repository, so the clone comes first — what it calls does not travel with the file alone.
git clone --depth 1 https://github.com/wenlan-app/wenlannpx agentmods add skills/wenlan-app/wenlan/run-wenlanWrote this? Show the measurements
A badge with what this costs and how it scanned, read live from this page, so it follows the numbers instead of freezing them. Markdown for a README, HTML for a documentation site or a project page.
[](https://agentmods.dev/skills/wenlan-app/wenlan/run-wenlan)<a href="https://agentmods.dev/skills/wenlan-app/wenlan/run-wenlan"><img src="https://agentmods.dev/badge/skills/wenlan-app/wenlan/run-wenlan/github.svg" alt="Measured on agentmods" height="20"></a>Or the 80×15 button, for a site that already has a row of RSS and ATOM ones. Only the verdict fits; the numbers stay here.
<a href="https://agentmods.dev/skills/wenlan-app/wenlan/run-wenlan"><img src="https://agentmods.dev/badge/skills/wenlan-app/wenlan/run-wenlan.svg" alt="Reviewed on agentmods" width="80" height="20"></a>What it costs to keep this loaded
Counted locally with the o200k_base tokenizer, which is exact for GPT models; Claude uses its own tokenizer and its counts differ. Treat this as one consistent yardstick across the catalogue rather than a bill. Prices are per million input tokens.
| Model | Per session | Once invoked |
|---|---|---|
| Fable 5.1 | $0.00053 | $0.02700 |
| Opus 5.5 | $0.00021 | $0.01080 |
| Sonnet 5.5 | $0.00011 | $0.00540 |
| Haiku 4.5 | $0.00005 | $0.00270 |
Grade C, and why
run-wenlan scanned grade C with 2 findings against 26 rules in 11 categories — prompt injection, anti-refusal, data exfiltration, privilege escalation, supply chain, agent snooping, system-prompt leakage, SSRF and excessive agency — measured 4d ago.
A static scan of the body, not an audit. Every finding is printed with the line that produced it so you can judge whether it matters here. A mod is markdown that instructs an agent; that is exactly why what it instructs is worth reading.
Recursive force deletehighDestructive command
rm -rf with a variable or a broad path is one typo away from removing the wrong tree.
# its own `rm -rf`; the daemon is handed the native spelling. `cygpath -m` Makes network callslowCapability
Not a fault in itself. Listed so you know the mod talks to something, and to what.
# ready: curl -sf --max-time 2 http://127.0.0.1:17878/api/health (poll up to ~120s) How it starts
The opening of the file, as written. The whole thing — 196 lines — stays where its author put it; the contents beside it link to each section on GitHub.
Run wenlan-server (dev)
Build: cargo build -p wenlan-server -p wenlan (add -p wenlan-mcp for the MCP bridge).
Ports — one allocation, no guessing
Three ports exist and they are not interchangeable. Stopping "the isolated daemon" on the wrong one leaves a live daemon behind and reports success.
| Port | Owner | Notes |
|---|---|---|
| 7878 | the user's real daemon | never kill casually, never verify against |
| 17878 | manual isolated instance (this skill) | the recipes below |
| 17881 | scripts/smoke-cli.sh |
PORT= overrides |
| 17882 | scripts/smoke-mcp.sh |
PORT= overrides; runs alongside the CLI smoke |
The smokes own their own ports so both can run at once. Do not repoint them at 17878 — a manual daemon and a smoke would then fight over one listener, and the smoke's ownership assertion would fail on a daemon it did not start.
Isolated instance (default for verification)
Never verify against the shared prod daemon on :7878 — dev and prod share the
platform data dir by default. Isolating the port and WENLAN_DATA_DIR is not
enough: the default pages folder is .wenlan/pages under the OS user-home, NOT
under WENLAN_DATA_DIR, so a capture will write into the user's real notes
unless knowledge_path is set explicitly. Write the scratch config.json
BEFORE the daemon starts, then read the live value back from
/api/knowledge/path — the daemon reloads config per request, so a value
written afterwards proves nothing about what was already ingested.
WENLAN_NO_AUTOSTART=1 belongs on every harness command: without it a failed
connect starts the user's registered background service.
DATA_DIR="$(mktemp -d "${TMPDIR:-/tmp}/run.XXXXXX")"
mkdir -p "$DATA_DIR/pages"
printf '{"knowledge_path":"%s"}' "$DATA_DIR/pages" >"$DATA_DIR/config.json.tmp"
mv "$DATA_DIR/config.json.tmp" "$DATA_DIR/config.json" # atomic, before spawn
WENLAN_NO_AUTOSTART=1 WENLAN_PORT=17878 WENLAN_DATA_DIR="$DATA_DIR" \
./target/debug/wenlan-server &
# ready: curl -sf --max-time 2 http://127.0.0.1:17878/api/health (poll up to ~120s)
# check: curl -sf http://127.0.0.1:17878/api/knowledge/path → must be $DATA_DIR/pages
# stop: lsof -ti :17878 | xargs kill -9
What this file has done since we first saw it
Hashed on every crawl. A supply-chain change to an agent config is a question of when, not whether, so the history is kept rather than the latest state alone.
- 4d ago First seen · 196 lines · 53 tokens per session scan C 14b8fc9b0bc2
run-wenlan is a skill published in the GitHub repository wenlan-app/wenlan (82 stars, last pushed yesterday), licensed Apache-2.0. It adds 53 tokens to every session and 2,700 once invoked, about $0.0002 per session on Opus 5.5. A static security scan graded it C with 2 findings (recursive force delete, makes network calls). No closer match exists in the catalogue, so it is treated as the original; first seen 2026-10-11.
Other skills, from other repositories
run-wenlan-app
Build, launch, screenshot, and drive the wenlan-app Tauri desktop app in dev mode on macOS (WKWebView) or Windows (WebView2). Use when asked to run or start the app, verify a UI change in the real running app (not just tests), or take a screenshot of it.
help
Show a one-screen Codex reference for the Wenlan plugin. Use when the user asks for Wenlan help, command list, invokes /help, or explicitly asks about import progress.
verify
Drive/evidence recipe for verifying wenlan changes at their real surfaces (daemon HTTP, CLI, MCP stdio). The handle file the built-in verify protocol expects; launch primitives live in the run-wenlan skill, deeper machinery (mutation audit, behavior trace, weekly sweep) in the prove skill.
run-wenlan
Build, launch, and stop the wenlan daemon (wenlan-server) for local dev and verification. Use when asked to run or restart the daemon, or before driving any surface (HTTP, CLI, MCP) against a live instance.
setup
Frictionless Wenlan setup for Codex. Detects a missing local runtime, installs or repairs it, and verifies the plugin to MCP to local runtime round-trip. Run when the user says "set up wenlan", "is wenlan working", or "fix wenlan".
forget
Delete a Wenlan memory by exact id from Codex. Destructive and confirmation gated. Invoked as /forget .