/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".
$ npx -y skills add 7xuanlu/wenlan --skill setup --agent claude-codeHow it fires
How this skill gets triggered: by you, by Claude, or both.
- Fires itselfAuto-invocation. Claude auto-loads it when your prompt matches the work.
- You can call itInvoke it directly when you want it.
- Slash command
/setup
Context preview
The summary Claude sees to decide when to auto-load this skill.
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".
SKILL.md
setup.SKILL.mdname: setup
description: >
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".
allowed-tools: ["Bash", "mcp__wenlan__brief"]
user-invocable: true
/setup
Self-healing setup for Codex. Default backend is local memory: no local model, no API key, no prompt ceremony. Local model and Anthropic key are optional upgrades after the basic path works.
Steps
Run in order. Stop and report at the first failure that needs human attention. Otherwise, push through automatically.
1. Health probe
for i in 1 2 3; do
curl -fsS -m 3 http://127.0.0.1:7878/api/health && break
sleep 1
done
- 200 OK: continue to version drift probe.
- Anything else: continue to bootstrap.
2. Version drift probe
Compare daemon version vs plugin manifest version:
PLUGIN_JSON="${CODEX_PLUGIN_ROOT:-plugin-codex}/.codex-plugin/plugin.json"
[ -r "$PLUGIN_JSON" ] || PLUGIN_JSON=".codex-plugin/plugin.json"
if command -v python3 >/dev/null 2>&1 && [ -r "$PLUGIN_JSON" ]; then
RESP="$(curl -fsS -m 3 http://127.0.0.1:7878/api/health)"
DAEMON_VER="$(printf '%s' "$RESP" | python3 -c 'import json,sys; print(json.load(sys.stdin).get("version",""))')"
EXPECTED_VER="$(python3 -c 'import json,sys; print(json.load(open(sys.argv[1])).get("version",""))' "$PLUGIN_JSON")"
RELEASE_VER="${EXPECTED_VER%%+*}"
printf 'daemon=%s expected=%s release=%s\n' "$DAEMON_VER" "$EXPECTED_VER" "$RELEASE_VER"
else
echo "version_check=skipped"
fi- Same version: continue to doctor.
- If the probe cannot run because the runtime is down: continue to bootstrap.
- If `PLUGIN_JSON` is unreadable or `python3` is missing: continue to doctor;
Codex will keep using this slice until the plugin cache is updated.
- If mismatch, check the direction before repairing. Compare the release part
of `daemon=` (strip the `+g<sha>` suffix) against `release=`, numeric per component, not lexicographic. Daemon release equal or newer → the plugin cache is stale, not the runtime: skip the repair below (it would only reinstall the same-or-latest runtime and restart a healthy daemon) and go straight to the stop message in step 4 — update the plugin, restart, rerun.
- Only if the daemon release is older than the plugin release, repair the
runtime:
PLUGIN_JSON="${CODEX_PLUGIN_ROOT:-plugin-codex}/.codex-plugin/plugin.json"
[ -r "$PLUGIN_JSON" ] || PLUGIN_JSON=".codex-plugin/plugin.json"
EXPECTED_VER="$(python3 -c 'import json,sys; print(json.load(open(sys.argv[1])).get("version",""))' "$PLUGIN_JSON")"
RELEASE_VER="${EXPECTED_VER%%+*}"
curl -fsSL https://raw.githubusercontent.com/7xuanlu/wenlan/v${RELEASE_VER}/install.sh | bash
export PATH="$HOME/.wenlan/bin:$PATH"
wenlan setup --basic
wenlan background onThen continue to the health and version re-probe below. The installer deliberately targets the latest stable runtime. Do not downgrade a newer runtime to match a stale plugin cache.
3. Bootstrap
Detect whether the `wenlan` CLI is on PATH:
command -v wenlan >/dev/null 2>&1 && echo present || echo absent
If absent, install and configure local memory:
curl -fsSL https://raw.githubusercontent.com/7xuanlu/wenlan/v0.15.4/install.sh | bash
export PATH="$HOME/.wenlan/bin:$PATH"
wenlan setup --basic
wenlan background on
If present but the local runtime is down:
wenlan setup --basic 2>/dev/null || true
wenlan background on
`wenlan setup --basic` is idempotent. `wenlan background on` starts the managed background process.
4. Re-probe health and version
for i in 1 2 3 4 5; do
curl -fsS -m 3 http://127.0.0.1:7878/api/health && break
sleep 1
done
If the local runtime still is not reachable after about five seconds, surface the error and stop. Likely causes: launchd load failure, port 7878 already in use, or a local runtime crash.
Once healthy, repeat the version comparison from step 2. If the versions still differ, stop instead of claiming setup succeeded:
Runtime and plugin versions still differ after repair; update the Wenlan plugin,
restart Codex, then run /wenlan:setup again.
This usually means the runtime is newer than the plugin cached by the current Codex process. Updating the plugin is safer than silently downgrading the runtime, and the restart is required before this session can load new plugin code.
5. Doctor
Run the Wenlan CLI doctor through the resolved binary path:
W="$(command -v wenlan || echo "$HOME/.wenlan/bin/wenlan")"
"$W" doctor
Expected: local memory configured. Capture the mode string for the final report.
6. MCP round-trip
Call the Wenlan MCP `brief` tool as a read-only round-trip.
brief()
If it fails, report: "wenlan-mcp did not respond through Codex. Start a new Codex thread after reinstalling the plugin so Codex respawns the MCP server."
7. Ready report
Print:
Wenlan ready.
Runtime: up on 127.0.0.1:7878
Mode: <mode from CLI doctor>
MCP: connected
Data: ~/.wenlan/
Try: /brief, /capture <thing>
Optional upgrades
Mention these only if the user asks for richer synthesis:
- `wenlan models install` for local model-backed distillation.
- `wenlan keys set anthropic` for stronger synthesis.
Installing a model or key only makes that provider available; it does not authorize background inference. If the user wants automatic enrichment, run `wenlan enrichment status`, help them choose the exact Everyday and Synthesis sources, then run `wenlan enrichment configure --everyday <source> --synthesis <source>`. The CLI itself shows the task mapping and cloud/on-device disclosure and obtains the one confirmation. Never add `--yes` unless the user already stated that exact mapping. `wenlan enrichment disable` reverses the consent without deleting
Read more
name: setup description: > 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". allowed-tools: ["Bash", "mcp__wenlan__brief"] user-invocable: true
/setup
Self-healing setup for Codex. Default backend is local memory: no local model, no API key, no prompt ceremony. Local model and Anthropic key are optional upgrades after the basic path works.
Steps
Run in order. Stop and report at the first failure that needs human attention. Otherwise, push through automatically.
1. Health probe
for i in 1 2 3; do curl -fsS -m 3 http://127.0.0.1:7878/api/health && break sleep 1 done
- 200 OK: continue to version drift probe.
- Anything else: continue to bootstrap.
2. Version drift probe
Compare daemon version vs plugin manifest version:
PLUGIN_JSON="${CODEX_PLUGIN_ROOT:-plugin-codex}/.codex-plugin/plugin.json"
[ -r "$PLUGIN_JSON" ] || PLUGIN_JSON=".codex-plugin/plugin.json"
if command -v python3 >/dev/null 2>&1 && [ -r "$PLUGIN_JSON" ]; then
RESP="$(curl -fsS -m 3 http://127.0.0.1:7878/api/health)"
DAEMON_VER="$(printf '%s' "$RESP" | python3 -c 'import json,sys; print(json.load(sys.stdin).get("version",""))')"
EXPECTED_VER="$(python3 -c 'import json,sys; print(json.load(open(sys.argv[1])).get("version",""))' "$PLUGIN_JSON")"
RELEASE_VER="${EXPECTED_VER%%+*}"
printf 'daemon=%s expected=%s release=%s\n' "$DAEMON_VER" "$EXPECTED_VER" "$RELEASE_VER"
else
echo "version_check=skipped"
fi- Same version: continue to doctor.
- If the probe cannot run because the runtime is down: continue to bootstrap.
- If `PLUGIN_JSON` is unreadable or `python3` is missing: continue to doctor;
Codex will keep using this slice until the plugin cache is updated.
- If mismatch, check the direction before repairing. Compare the release part
of `daemon=` (strip the `+g<sha>` suffix) against `release=`, numeric per component, not lexicographic. Daemon release equal or newer → the plugin cache is stale, not the runtime: skip the repair below (it would only reinstall the same-or-latest runtime and restart a healthy daemon) and go straight to the stop message in step 4 — update the plugin, restart, rerun.
- Only if the daemon release is older than the plugin release, repair the
runtime:
PLUGIN_JSON="${CODEX_PLUGIN_ROOT:-plugin-codex}/.codex-plugin/plugin.json"
[ -r "$PLUGIN_JSON" ] || PLUGIN_JSON=".codex-plugin/plugin.json"
EXPECTED_VER="$(python3 -c 'import json,sys; print(json.load(open(sys.argv[1])).get("version",""))' "$PLUGIN_JSON")"
RELEASE_VER="${EXPECTED_VER%%+*}"
curl -fsSL https://raw.githubusercontent.com/7xuanlu/wenlan/v${RELEASE_VER}/install.sh | bash
export PATH="$HOME/.wenlan/bin:$PATH"
wenlan setup --basic
wenlan background onThen continue to the health and version re-probe below. The installer deliberately targets the latest stable runtime. Do not downgrade a newer runtime to match a stale plugin cache.
3. Bootstrap
Detect whether the `wenlan` CLI is on PATH:
command -v wenlan >/dev/null 2>&1 && echo present || echo absent
If absent, install and configure local memory:
curl -fsSL https://raw.githubusercontent.com/7xuanlu/wenlan/v0.15.4/install.sh | bash export PATH="$HOME/.wenlan/bin:$PATH" wenlan setup --basic wenlan background on
If present but the local runtime is down:
wenlan setup --basic 2>/dev/null || true wenlan background on
`wenlan setup --basic` is idempotent. `wenlan background on` starts the managed background process.
4. Re-probe health and version
for i in 1 2 3 4 5; do curl -fsS -m 3 http://127.0.0.1:7878/api/health && break sleep 1 done
If the local runtime still is not reachable after about five seconds, surface the error and stop. Likely causes: launchd load failure, port 7878 already in use, or a local runtime crash.
Once healthy, repeat the version comparison from step 2. If the versions still differ, stop instead of claiming setup succeeded:
Runtime and plugin versions still differ after repair; update the Wenlan plugin, restart Codex, then run /wenlan:setup again.
This usually means the runtime is newer than the plugin cached by the current Codex process. Updating the plugin is safer than silently downgrading the runtime, and the restart is required before this session can load new plugin code.
5. Doctor
Run the Wenlan CLI doctor through the resolved binary path:
W="$(command -v wenlan || echo "$HOME/.wenlan/bin/wenlan")" "$W" doctor
Expected: local memory configured. Capture the mode string for the final report.
6. MCP round-trip
Call the Wenlan MCP `brief` tool as a read-only round-trip.
brief()
If it fails, report: "wenlan-mcp did not respond through Codex. Start a new Codex thread after reinstalling the plugin so Codex respawns the MCP server."
7. Ready report
Print:
Wenlan ready. Runtime: up on 127.0.0.1:7878 Mode: <mode from CLI doctor> MCP: connected Data: ~/.wenlan/ Try: /brief, /capture <thing>
Optional upgrades
Mention these only if the user asks for richer synthesis:
- `wenlan models install` for local model-backed distillation.
- `wenlan keys set anthropic` for stronger synthesis.
Installing a model or key only makes that provider available; it does not authorize background inference. If the user wants automatic enrichment, run `wenlan enrichment status`, help them choose the exact Everyday and Synthesis sources, then run `wenlan enrichment configure --everyday <source> --synthesis <source>`. The CLI itself shows the task mapping and cloud/on-device disclosure and obtains the one confirmation. Never add `--yes` unless the user already stated that exact mapping. `wenlan enrichment disable` reverses the consent without deleting
Showing the first part of this file.
Wenlan is a knowledge base for the AI-native age. Your AI agents capture what they learn, Wenlan keeps it current and distills it into source-cited wiki pages you can trust
Other skills on wenlan.
- /prove
Per-surface verification loops for wenlan — daemon, cli, mcp, plugin, suite strength (mutation), behavior trace, weekly sweep. Routes to scripts; every check records evidence via attest. Deeper than the built-in verify skill — use prove for mutation audits, behavior tracing, and
Open 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.
Open skill - /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
Open skill - /brief
Read the current Space-owned project Brief from Wenlan for Codex. With an optional topic, appends separately labeled related context from the same Space. Invoked as /brief [topic] when resuming work or asking to catch up.
Open skill - /capture
Save a durable memory to Wenlan from Codex. Use proactively when the user states a preference, makes a decision, corrects you, or shares a durable fact. Invoked as /capture <content>.
Open skill - /curate
Review pending Wenlan captures, revisions, or daemon refinements from Codex. Use for explicit audit walks after /brief or /handoff surfaces pending work. Invoked as /curate captures, /curate revisions, or /curate refinements.
Open skill

