Agent skill

Run Futon

by rasengan-dev in rasengan-dev/rasenganjs

Build, run, and smoke-test @rasenganjs/futon (with @rasenganjs/runtime).

MITAuto-check passedTesting & QA

Install Run Futon

skills CLI
$ npx skills add rasengan-dev/rasenganjs --skill run-futon -a claude-code

Project install by default; add -g for ~/.claude/skills/.

GitHub CLI
$ gh skill install rasengan-dev/rasenganjs run-futon --agent claude-code

Project scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).

Manual copy
$ 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-src

Use ~/.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/

Facts

Skill name
run-futon
GitHub stars
124
Token cost
~1.9k tokens
SKILL.md length
715 words
Files
3
Skills in repo
13
Repo updated
First seen
Licence
MIT

At a glance

Build, run, and smoke-test @rasenganjs/futon (with @rasenganjs/runtime).

  • Works in 2 steps: HTTP demo (futon + runtime, real server,… → Direct invocation (in-process, no port,…
  • Curl its demo HTTP server
  • SKILL.md covers Prerequisites, Build, Run (agent path) and Run (human path), plus 3 more sections
  • Runs JavaScript and Shell scripts from its folder; calls pnpm, node and bash

What it does

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.

When your agent uses it

  • Curl its demo HTTP server
  • Smoke test the futon + runtime pairing
  • Verify Futon.fetch() works in-process without a real server

Example prompts

  • “/run-futon”

Requirements

  • Node.js
  • A Bash shell

Workflow steps

2 steps, taken from the step headings in SKILL.md.

  1. HTTP demo (futon + runtime, real server, real port)
  2. Direct invocation (in-process, no port, no runtime adapter)

What it can do on your machine

Read from SKILL.md and the folder at commit 3fb89eb. It shows what the files ask for, not the result of running them.

  • Tool permissions

    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.

  • Runs code

    Ships script files (JavaScript and Shell), which the agent can run.

    Shell commands in SKILL.md call:

    • pnpm
    • node
    • bash
    • curl
    • git

    From the folder's file list and the shell code blocks in SKILL.md.

  • Network

    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.

  • Credentials

    Names no API keys, tokens, secrets or passwords.

    From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.

Context cost

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.

Always · name and description, kept in context so the agent knows when to use it
~66
When it runs · the whole SKILL.md, loaded when a task matches
~1.9k

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.

Safety

Auto-check passed

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.

SKILL.md

The full file from rasengan-dev/rasenganjs at commit 3fb89eb, republished under its MIT licence (© rasengan-dev). 715 words, ~1,873 tokens.

Download SKILL.mdSave it as .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.
name
run-futon
description
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.

@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.

Prerequisites

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.

bash
node -v   # v22.22.0 (or newer per package.json engines)
pnpm -v   # 10.9.0

Build

Both @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:

bash
cd <repo-root>
pnpm --filter @rasenganjs/futon build
pnpm --filter @rasenganjs/runtime build

Expect tsup output ending in DTS ⚡️ Build success for each package (ESM + CJS + .d.ts).

Run (agent path)

Two independent checks. Run both — they cover different layers.

1. HTTP demo (futon + runtime, real server, real port)
bash
bash .claude/skills/run-futon/driver.sh

What 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:

requestexpects
GET /200, HTML body
GET /hello/World200, {"message":"Hello, World!"}
POST /echo (JSON body)200, body has an echo key (see Gotchas — it's always null)
GET /does-not-exist404 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 failed

This 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.

2. Direct invocation (in-process, no port, no runtime adapter)
bash
node .claude/skills/run-futon/direct-invoke.mjs

What 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 failed
Show full SKILL.md (268 more words)Show less

Run (human path)

bash
cd ../../../apps/playground/rasengan-runtime-node-demo   # from packages/framework/futon/
pnpm start
# → http://localhost:5330  (Ctrl-C to stop)
curl http://localhost:5330/hello/World

Test

bash
pnpm test              # vitest run — futon's own suite

Real result from this session: Test Files 27 passed (27) / Tests 334 passed (334).

bash
cd ../../platform/runtime && pnpm test   # runtime's own suite, if touching the adapter layer

Real result from this session: Test Files 14 passed | 3 skipped (17) / Tests 98 passed | 36 skipped (134).


Gotchas

  • 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.
  • Stale 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.

Troubleshooting

  • 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

Files

SKILL.md and 2 other files in packages/framework/futon/.claude/skills/run-futon of rasengan-dev/rasenganjs.

  • SKILL.md
  • direct-invoke.mjs
  • driver.sh

Open the folder on GitHubat commit 3fb89eb

Compare with similar skills

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.

Run Futon compared with similar skills
SkillStarsUsed inTokensAuto-checkLicenceRepo updated
Run Futon this skillrasengan-dev/rasenganjs124—~1.9kAutomated safety check: PassMIT
DeerFlow Smoke Testbytedance/deer-flow84k—~2.5kAutomated safety check: NotesMIT
OpenWork Desktop CDP Driverdifferent-ai/openwork24k—~465Automated safety check: PassCustom licence
Desktop Dual Repo TestEynzof/Hermes-CN-Desktop1.8k—~1.8kAutomated safety check: PassCustom licence
Ya Runkzahel/yepanywhere534—~957Automated safety check: PassMIT
OpenWork Electron Browser Automationdifferent-ai/openwork24k—~780Automated safety check: PassCustom licence

Similar skills

  • 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.

    84k GitHub stars~2.5k tokensUpdated today
    Testing & QAAuto-check: notes
  • OpenWork Desktop CDP Driver

    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.

    24k GitHub stars~465 tokensUpdated today
    Testing & QAAuto-check passed
  • Desktop Dual Repo Test

    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…

    1.8k GitHub stars~1.8k tokensUpdated 18 days ago
    Testing & QAAuto-check passed
  • Ya Run

    kzahel/yepanywhere

    Launch and drive Yep Anywhere — an isolated dev server plus real browser interaction — and run the repository's check suite.

    534 GitHub stars~957 tokensUpdated today
    Testing & QAAuto-check passed
  • 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.

    24k GitHub stars~780 tokensUpdated today
    Testing & QAAuto-check passed
  • Run SEO Office

    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…

    135 GitHub stars~1.1k tokensUpdated 3 mo ago
    Testing & QAAuto-check passed

More from rasengan-dev/rasenganjs

All 13 skills in this repo
  • Code Review Excellence

    rasengan-dev/rasenganjs

    Master effective code review practices to provide constructive feedback, catch bugs early, and foster knowledge sharing while maintaining team morale.

    124 GitHub starsUsed in 18 repos~3.3k tokens
    Auto-check passed
  • Rasengan Config

    rasengan-dev/rasenganjs

    Project configuration and rendering mode patterns for Rasengan.js.

    124 GitHub stars~1.1k tokensUpdated yesterday
    Auto-check passed
  • Rasengan Data Fetching

    rasengan-dev/rasenganjs

    Data fetching and SSG static path patterns for Rasengan.js. An agent skill from rasengan-dev/rasenganjs.

    124 GitHub stars~938 tokensUpdated yesterday
    Auto-check passed
  • Rasengan Deployment

    rasengan-dev/rasenganjs

    Deployment patterns for Rasengan.js. An agent skill from rasengan-dev/rasenganjs.

    124 GitHub stars~624 tokensUpdated yesterday
    Auto-check passed
  • Rasengan Ecosystem

    rasengan-dev/rasenganjs

    Rasengan.js ecosystem package patterns. An agent skill from rasengan-dev/rasenganjs.

    124 GitHub stars~1.5k tokensUpdated yesterday
    Auto-check passed
  • Rasengan Optimizing

    rasengan-dev/rasenganjs

    Optimization patterns for Rasengan.js. An agent skill from rasengan-dev/rasenganjs.

    124 GitHub stars~980 tokensUpdated yesterday
    Auto-check passed

Works with

Categories

Questions about Run Futon

What does Run Futon do?

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).

When should I use Run Futon?

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.

How do I install Run Futon in Claude Code?

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.

How do I install Run Futon in Codex?

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.

Can I use Run Futon in Cursor, Gemini CLI or GitHub Copilot?

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.

What does Run Futon need to run?

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.

Does Run Futon access the network?

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.

Is Run Futon safe to install?

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.

What licence does Run Futon use?

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.

How many tokens does Run Futon use?

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.

What are the alternatives to Run Futon?

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.

Who maintains Run Futon?

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.