Standalone CLI with Devframe Devframe released a standalone CLI framework that lets developers ship a single `npx my-tool` command serving a Vue, Nuxt, or React SPA over type-safe RPC, with `build` and `mcp` subcommands. The tool's `build --out-dir` flag produces a self-contained static deploy, and the `mcp` command exposes the tool to AI agents. Devframe's Nuxt helper sets `app.baseURL: './'` and `vite.base: './'`, while Next.js App Router static export requires `output: 'export'`, `assetPrefix: '.'`, `trailingSlash: true`, and `images: { unoptimized: true }`. Standalone CLI with Devframe npx my-tool starts a dev server serving a Vue/Nuxt/React SPA over type-safe RPC, plus build / mcp . What you ship what-you-ship my-tool/ ├── bin.mjs shebang + import './dist/cli.mjs' ├── src/ │ ├── cli.ts defineDevframe + createCac │ ├── rpc.ts your RPC function definitions │ └── data.ts your domain-specific logic ├── app/ Nuxt / Vue / React SPA source ├── dist/ │ ├── public/ built SPA output served at / │ └── cli.mjs bundled node entry └── package.json Minimal CLI minimal-cli python import process from 'node:process' import { defineDevframe, defineRpcFunction } from 'devframe' import { createCac } from 'devframe/adapters/cac' import { colors as c } from 'devframe/utils/colors' import { resolve } from 'pathe' const clientAssets = resolve import.meta.dirname, '../dist/public' const myDevframe = defineDevframe { id: 'my-tool', name: 'My Tool', clientAssets, cli: { command: 'my-tool', port: 7777, portRange: 7777, 9000 , open: true, // auth defaults to on; --open embeds the current OTP so the tab lands authenticated configure cli { cli .option '--config