DeerFlow Smoke Test
bytedance/deer-flow
Walks through an end-to-end smoke test of a DeerFlow deployment: pull the latest code, deploy with Docker or locally, verify services, run health checks and write a report.
Build, run, and smoke-test @rasenganjs/futon (with @rasenganjs/runtime).
$ npx skills add rasengan-dev/rasenganjs --skill run-futon -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install rasengan-dev/rasenganjs run-futon --agent claude-codeProject scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).
$ git clone --depth 1 https://github.com/rasengan-dev/rasenganjs.git skills-src && mkdir -p .claude/skills && cp -r skills-src/packages/framework/futon/.claude/skills/run-futon .claude/skills/run-futon && rm -rf skills-srcUse ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.
Claude Code skills documentation · loads skills from .claude/skills/
Install the "run-futon" agent skill from https://github.com/rasengan-dev/rasenganjs/tree/main/packages/framework/futon/.claude/skills/run-futon into .claude/skills/run-futon/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "run-futon", then confirm the skill loads.Claude Code copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$skill-installer install https://github.com/rasengan-dev/rasenganjs/tree/main/packages/framework/futon/.claude/skills/run-futonType this inside Codex. $skill-installer <name> installs a curated skill from openai/skills. The installer writes to $CODEX_HOME/skills (default ~/.codex/skills). Restart Codex if the skill does not show up.
$ npx skills add rasengan-dev/rasenganjs --skill run-futon -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install rasengan-dev/rasenganjs run-futon --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/rasengan-dev/rasenganjs.git skills-src && mkdir -p .agents/skills && cp -r skills-src/packages/framework/futon/.claude/skills/run-futon .agents/skills/run-futon && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "run-futon" agent skill from https://github.com/rasengan-dev/rasenganjs/tree/main/packages/framework/futon/.claude/skills/run-futon into .agents/skills/run-futon/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "run-futon", then confirm the skill loads.Codex copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add rasengan-dev/rasenganjs --skill run-futon -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install rasengan-dev/rasenganjs run-futon --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/rasengan-dev/rasenganjs.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/packages/framework/futon/.claude/skills/run-futon .cursor/skills/run-futon && rm -rf skills-srcUse ~/.cursor/skills/ instead of .cursor/skills for a personal install.
Cursor skills documentation · loads skills from .cursor/skills/, .agents/skills/, .claude/skills/, .codex/skills/
Install the "run-futon" agent skill from https://github.com/rasengan-dev/rasenganjs/tree/main/packages/framework/futon/.claude/skills/run-futon into .cursor/skills/run-futon/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "run-futon", then confirm the skill loads.Cursor copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gemini skills install https://github.com/rasengan-dev/rasenganjs.git --path packages/framework/futon/.claude/skills/run-futon--scope user (default) or --scope workspace; --path is the subfolder of the repo that holds the skill; --consent skips the security confirmation prompt.
$ npx skills add rasengan-dev/rasenganjs --skill run-futon -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install rasengan-dev/rasenganjs run-futon --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/rasengan-dev/rasenganjs.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/packages/framework/futon/.claude/skills/run-futon .gemini/skills/run-futon && rm -rf skills-srcUse ~/.gemini/skills/ instead of .gemini/skills for a personal install, then run /skills reload.
Gemini CLI skills documentation · loads skills from .gemini/skills/, .agents/skills/
Install the "run-futon" agent skill from https://github.com/rasengan-dev/rasenganjs/tree/main/packages/framework/futon/.claude/skills/run-futon into .gemini/skills/run-futon/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "run-futon", then confirm the skill loads.Gemini CLI copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gh skill install rasengan-dev/rasenganjs run-futonInstalls for Copilot at project scope by default; add --scope user for a personal install. Preview a skill first with gh skill preview. Needs GitHub CLI 2.90.0 or later (public preview).
$ npx skills add rasengan-dev/rasenganjs --skill run-futon -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/rasengan-dev/rasenganjs.git skills-src && mkdir -p .github/skills && cp -r skills-src/packages/framework/futon/.claude/skills/run-futon .github/skills/run-futon && rm -rf skills-srcUse ~/.copilot/skills/ instead of .github/skills for a personal install. Commit .github/skills so cloud agent and code review can use it.
GitHub Copilot skills documentation · loads skills from .github/skills/, .claude/skills/, .agents/skills/
Install the "run-futon" agent skill from https://github.com/rasengan-dev/rasenganjs/tree/main/packages/framework/futon/.claude/skills/run-futon into .github/skills/run-futon/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "run-futon", then confirm the skill loads.GitHub Copilot copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add rasengan-dev/rasenganjs --skill run-futon -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install rasengan-dev/rasenganjs run-futon --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/rasengan-dev/rasenganjs.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/packages/framework/futon/.claude/skills/run-futon .opencode/skills/run-futon && rm -rf skills-srcUse ~/.config/opencode/skills/ instead of .opencode/skills for a personal install.
OpenCode skills documentation · loads skills from .opencode/skills/, .claude/skills/, .agents/skills/
Install the "run-futon" agent skill from https://github.com/rasengan-dev/rasenganjs/tree/main/packages/framework/futon/.claude/skills/run-futon into .opencode/skills/run-futon/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "run-futon", then confirm the skill loads.OpenCode copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
run-futonBuild, run, and smoke-test @rasenganjs/futon (with @rasenganjs/runtime).
Run Futon is an agent skill from rasengan-dev/rasenganjs. Build, run, and smoke-test @rasenganjs/futon (with @rasenganjs/runtime). Use when asked to run, start, build, or test futon; curl its demo HTTP server; smoke test the futon + runtime pairing; or verify Futon.fetch() works in-process without a real server.
Its SKILL.md is about 1.9k tokens, which your agent loads only when the skill is triggered. The skill folder holds 2 other files (for example `driver.sh`).
It sits in Testing & QA, covering QA and bug reports. It works with pnpm. The repository describes itself as: Rasengan.js is a full-stack meta-framework for React — SSR, SSG, and a built-in backend, running anywhere from Node.js to the edge, without compromising on performance. The licence is MIT.
2 steps, taken from the step headings in SKILL.md.
Read from SKILL.md and the folder at commit 3fb89eb. It shows what the files ask for, not the result of running them.
Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.
From allowed-tools in the SKILL.md frontmatter.
Ships script files (JavaScript and Shell), which the agent can run.
Shell commands in SKILL.md call:
pnpmnodebashcurlgitFrom the folder's file list and the shell code blocks in SKILL.md.
No URLs in SKILL.md. Its commands use pnpm, curl and git, which can reach the network depending on how they are called.
From URLs in SKILL.md, links to its own repository left out.
Names no API keys, tokens, secrets or passwords.
From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.
Run Futon loads about 1.9k tokens when it runs. Until then it costs about 66 tokens; SKILL.md has 715 words of instructions outside code blocks.
Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.
The automated check found no risky patterns in SKILL.md.
Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); files beside SKILL.md are not scanned.
The full file from rasengan-dev/rasenganjs at commit 3fb89eb, republished under its MIT licence (© rasengan-dev). 715 words, ~1,873 tokens.
.claude/skills/run-futon/SKILL.md (or your agent's skills folder). This skill also uses 2 other files; get the full folder from GitHub.@rasenganjs/futon is a zero-dependency, WinterCG-compatible HTTP middleware/router library built on Web API primitives (Request/Response/Headers). It has no way to bind a TCP port on its own — that's @rasenganjs/runtime's job (RuntimeAdapters like NodeDevAdapter). This skill covers both: driving the real demo server (apps/playground/rasengan-runtime-node-demo, futon + runtime's NodeDevAdapter) via driver.sh, and exercising futon in-process via direct-invoke.mjs — the path most futon-only changes actually need, since futon is a library first and an HTTP-bound server second.
All paths below are relative to packages/framework/futon/ (the unit root). The driver's own path from there is .claude/skills/run-futon/driver.sh; the in-process script is .claude/skills/run-futon/direct-invoke.mjs.
Repo already cloned and pnpm install already run at the workspace root (this repo's node_modules/@rasenganjs/futon and the demo app's node_modules/@rasenganjs/{futon,runtime} are workspace symlinks — nothing extra to install for this skill). Node >=22.12 (verified with v22.22.0), pnpm 10.9.0.
node -v # v22.22.0 (or newer per package.json engines)
pnpm -v # 10.9.0Both @rasenganjs/futon and @rasenganjs/runtime ship from dist/, and the demo app (and this skill's direct-invoke.mjs) run against built output — rebuild both before treating a run as proof of anything, since a stale dist/ silently runs old code:
cd <repo-root>
pnpm --filter @rasenganjs/futon build
pnpm --filter @rasenganjs/runtime buildExpect tsup output ending in DTS ⚡️ Build success for each package (ESM + CJS + .d.ts).
Two independent checks. Run both — they cover different layers.
bash .claude/skills/run-futon/driver.shWhat it does: finds the repo root via git rev-parse --show-toplevel, kills anything already bound to port 5330, starts apps/playground/rasengan-runtime-node-demo (pnpm start, which runs NodeDevAdapter.serve(app) from server/index.mjs) in the background, polls http://localhost:5330/ until it responds, then curls and checks:
| request | expects |
|---|---|
GET / | 200, HTML body |
GET /hello/World | 200, {"message":"Hello, World!"} |
POST /echo (JSON body) | 200, body has an echo key (see Gotchas — it's always null) |
GET /does-not-exist | 404 via the custom notFound handler |
Prints PASS/FAIL per check, a final N passed, M failed line, and exits non-zero if anything failed. Server log is written to /tmp/futon-runtime-node-demo.log. The server is killed on exit (success, failure, or Ctrl-C) via a trap that also frees port 5330 directly — pnpm start's $! is the pnpm wrapper, which doesn't forward SIGTERM to the node child it spawns.
Real output from this session:
== futon + runtime demo driver ==
demo: /home/dilane3/Documents/Projects/React-Framework/rasenganjs/apps/playground/rasengan-runtime-node-demo
log: /tmp/futon-runtime-node-demo.log
-- starting server (pnpm start) in background --
-- waiting for http://localhost:5330/ to respond --
server is up (pid 48626)
-- checks --
PASS GET / returns 200 with HTML body
PASS GET /hello/World returns 200 with interpolated name
PASS POST /echo returns 200 with an echo key
PASS GET /does-not-exist returns 404 via custom notFound handler
4 passed, 0 failedThis demo app's app.mjs has no route that throws, so it can't exercise onError — that's covered by the in-process script below instead.
node .claude/skills/run-futon/direct-invoke.mjsWhat it does: imports Futon/json/text straight from dist/index.js (relative import via import.meta.url, not the bare @rasenganjs/futon specifier — works regardless of where/how it's invoked, no dependency on pnpm hoisting), builds a throwaway Futon app with a param route, a route that throws, and a custom notFound, and calls app.fetch(new Request(...)) directly — exactly the pattern src/__tests__/integration/application.test.ts uses. Checks the param route, the onError handler catching the thrown error, and the custom 404.
Real output from this session:
== futon direct-invocation smoke test (in-process, no server) ==
PASS GET /hello/:name returns 200 with interpolated param
PASS GET /boom is caught by onError and returns 500 with message
PASS GET /does-not-exist hits custom notFound handler
3 passed, 0 failedcd ../../../apps/playground/rasengan-runtime-node-demo # from packages/framework/futon/
pnpm start
# → http://localhost:5330 (Ctrl-C to stop)
curl http://localhost:5330/hello/Worldpnpm test # vitest run — futon's own suiteReal result from this session: Test Files 27 passed (27) / Tests 334 passed (334).
cd ../../platform/runtime && pnpm test # runtime's own suite, if touching the adapter layerReal result from this session: Test Files 14 passed | 3 skipped (17) / Tests 98 passed | 36 skipped (134).
POST /echo in the demo always returns {"echo":null}. apps/playground/rasengan-runtime-node-demo/server/app.mjs reads the parsed body via ctx.get('parsedBody'), but bodyParser()'s default storage key is 'body' (see src/middlewares/body.ts: const key = options.key ?? 'body'). This is a pre-existing bug in the demo app, not in futon — driver.sh only asserts the response has an echo key, not its value. Don't "fix" this by editing futon; the fix (if ever wanted) is either bodyParser({ key: 'parsedBody' }) or ctx.get('body') in app.mjs.dist/ silently runs old code. The demo app and direct-invoke.mjs both import from dist/, not src/. If you edit src/ and forget to rebuild, both will keep passing against the previous behavior — always rebuild (see Build section) before trusting a run.pnpm start's backgrounded PID is the wrapper, not the server. Killing $! alone can leave the Node process (and port 5330) bound. driver.sh handles this by also killing whatever's listening on the port; do the same if driving the demo manually in the background.driver.sh hangs in "waiting for ... to respond" then dumps a log and exits 1: port 5330 was already bound by a leftover process from a previous unclean run. The script already tries lsof -ti:5330 -sTCP:LISTEN | xargs -r kill before starting, but if that's insufficient, run it manually then retry: lsof -ti:5330 -sTCP:LISTEN | xargs -r kill.direct-invoke.mjs throws ERR_MODULE_NOT_FOUND for dist/index.js: @rasenganjs/futon hasn't been built yet (or was cleaned). Run the Build step above.© rasengan-dev, MIT. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file
SKILL.md and 2 other files in packages/framework/futon/.claude/skills/run-futon of rasengan-dev/rasenganjs.
Open the folder on GitHubat commit 3fb89eb
Run Futon next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.
| Skill | Stars | Used in | Tokens | Auto-check | Licence | Repo updated |
|---|---|---|---|---|---|---|
| Run Futon this skillrasengan-dev/rasenganjs | 124 | — | ~1.9k | Automated safety check: Pass | MIT | |
| DeerFlow Smoke Testbytedance/deer-flow | 84k | — | ~2.5k | Automated safety check: Notes | MIT | |
| OpenWork Desktop CDP Driverdifferent-ai/openwork | 24k | — | ~465 | Automated safety check: Pass | Custom licence | |
| Desktop Dual Repo TestEynzof/Hermes-CN-Desktop | 1.8k | — | ~1.8k | Automated safety check: Pass | Custom licence | |
| Ya Runkzahel/yepanywhere | 534 | — | ~957 | Automated safety check: Pass | MIT | |
| OpenWork Electron Browser Automationdifferent-ai/openwork | 24k | — | ~780 | Automated safety check: Pass | Custom licence |
bytedance/deer-flow
Walks through an end-to-end smoke test of a DeerFlow deployment: pull the latest code, deploy with Docker or locally, verify services, run health checks and write a report.
different-ai/openwork
Drives a running OpenWork desktop window over CDP from the shell to evaluate JS, take screenshots, start sessions and send prompts for hand checks.
Eynzof/Hermes-CN-Desktop
A skill your agent uses when starting or verifying Hermes Agent CN Desktop with the latest Hermes-CN-Desktop and Hermes-CN-Core branches — dev smoke test (pnpm tauri:dev), packaged beta/release…
kzahel/yepanywhere
Launch and drive Yep Anywhere — an isolated dev server plus real browser interaction — and run the repository's check suite.
different-ai/openwork
Attaches OpenCode browser tools to the OpenWork Electron dev app through CDP to explore its UI, send a composer task and debug, not to give test verdicts.
AgriciDaniel/seo-os
A skill your agent uses when asked to run, boot, start, dev-serve, smoke-test, or drive the SEO Office app, or to confirm a change works end-to-end in the real running app (UI → orchestrator → brain…
rasengan-dev/rasenganjs
Master effective code review practices to provide constructive feedback, catch bugs early, and foster knowledge sharing while maintaining team morale.
rasengan-dev/rasenganjs
Project configuration and rendering mode patterns for Rasengan.js.
rasengan-dev/rasenganjs
Data fetching and SSG static path patterns for Rasengan.js. An agent skill from rasengan-dev/rasenganjs.
rasengan-dev/rasenganjs
Deployment patterns for Rasengan.js. An agent skill from rasengan-dev/rasenganjs.
rasengan-dev/rasenganjs
Rasengan.js ecosystem package patterns. An agent skill from rasengan-dev/rasenganjs.
rasengan-dev/rasenganjs
Optimization patterns for Rasengan.js. An agent skill from rasengan-dev/rasenganjs.
Works with
Categories
Build, run, and smoke-test @rasenganjs/futon (with @rasenganjs/runtime). Run Futon is an agent skill from rasengan-dev/rasenganjs. Build, run, and smoke-test @rasenganjs/futon (with @rasenganjs/runtime).
Run Futon fits situations like: curl its demo HTTP server; smoke test the futon + runtime pairing; verify Futon.fetch() works in-process without a real server.
Run `npx skills add rasengan-dev/rasenganjs --skill run-futon -a claude-code`. Or copy the skill folder (packages/framework/futon/.claude/skills/run-futon in rasengan-dev/rasenganjs) into .claude/skills/run-futon in your project. Claude Code loads it when a task matches its description.
Run `npx skills add rasengan-dev/rasenganjs --skill run-futon -a codex`. Or copy the skill folder (packages/framework/futon/.claude/skills/run-futon in rasengan-dev/rasenganjs) into .agents/skills/run-futon in your project. Codex loads it when a task matches its description.
Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add rasengan-dev/rasenganjs --skill run-futon -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/run-futon, .gemini/skills/run-futon, .github/skills/run-futon and .opencode/skills/run-futon in your project.
Going by SKILL.md and its folder, Run Futon needs JavaScript and a shell for the scripts in its folder and the command-line tools its instructions call (pnpm, node, bash, curl and git). Our summary lists: Node.js; A Bash shell.
SKILL.md contains no URLs. Its commands use curl and git, which can reach the network depending on how they are called. This is read from the text; nothing was executed.
Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. Review the folder before installing.
Run Futon is published under the MIT licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.
About 1.9k tokens (SKILL.md is roughly 7.5k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.
Skills that share tags, products or a category with Run Futon: DeerFlow Smoke Test (bytedance/deer-flow, 84k stars), OpenWork Desktop CDP Driver (different-ai/openwork, 24k stars), Desktop Dual Repo Test (Eynzof/Hermes-CN-Desktop, 1.8k stars) and Ya Run (kzahel/yepanywhere, 534 stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
rasengan-dev (a GitHub organization) maintains it in rasengan-dev/rasenganjs, which has 124 GitHub stars. The repository holds 13 skills in this directory. The repository was last updated on October 7, 2026.
Source: rasengan-dev/rasenganjs on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.