emulate
Local drop-in replacement services for CI and no-network sandboxes. Fully stateful, production-fidelity API emulation. Not mocks.
d3k is an agent-first local web debugging runtime. It starts your dev server, opens a monitored browser with a project-stable Chrome profile, and gives your coding agent one timeline of server logs, browser errors, network activity, interactions, and
$ npx -y skills add vercel-labs/dev3000 --agent claude-code
Run the curl in your terminal, the rest in Claude Code.
Repo: vercel-labs/dev3000
What's inside
d3k is an agent-first local web debugging runtime. It starts your dev server, opens a monitored browser with a project-stable Chrome profile, and gives your coding agent one timeline of server logs, browser errors, network activity, interactions, and screenshots.
Every app gets a stable Portless URL by default, so browser state and callbacks do not move when the underlying development port changes.
The primary interface is the d3k skill: tell your agent what you want, and let it own the runtime.
"Let me test this project with d3k."
"Debug the checkout flow with d3k."
"Run this app with d3k and watch for errors while I reproduce the bug."
The TUI is still available for people who want a standalone terminal dashboard, but it is not required for the agent workflow.
Node.js 24 or newer is required.
Install the runtime globally:
bun install -g dev3000
npm also works:
npm install -g dev3000
Install the d3k skill for your coding agents:
bunx skills add vercel-labs/dev3000 --skill d3k --agent '*' -g -y
The skill teaches agents to start d3k non-interactively, retain the background process, reuse the managed browser, and inspect the unified evidence instead of launching a separate dev server or browser.
When you ask to use d3k, the agent should:
d3k status --json and reuse an active project session.d3k --no-agent --no-tui -t in a retained background tool session when needed.d3k agent-browser, depending on your request.d3k errors --context and the unified logs after reproduction.That gives the user one stable URL, one browser, one evidence stream, and one dev server.
"Let me test with d3k" means the agent prepares the headed monitored browser and hands control to you. It should wait while you reproduce the issue, then inspect what d3k captured.
"Test/debug this with d3k" means the agent can drive the managed browser and investigate autonomously.
# Is this project's runtime ready?
d3k status --json
# Start the runtime manually in agent-safe mode
d3k --no-agent --no-tui -t
# Inspect unified evidence
d3k errors --context
d3k logs -n 200
d3k logs --type browser
d3k logs --type server
# Drive the exact browser d3k is monitoring
d3k agent-browser snapshot -i
d3k agent-browser click @e2
d3k agent-browser fill @e3 "text"
d3k agent-browser --require-d3k-browser open http://localhost:3000
Do not run npm run dev or bun run dev alongside d3k. d3k is the dev-server owner for the session.
Portless is automatic. Use --no-portless or PORTLESS=0 only when direct localhost routing is specifically required. If Portless cannot initialize, d3k falls back to localhost instead of blocking startup.
Each project gets a persistent Chrome profile under ~/.d3k/<project>/chrome-profile/. Login state, cookies, and local storage survive across debugging sessions.
d3k also connects browser activity to server output, so an agent can see the interaction that preceded an error instead of reasoning from disconnected terminal and browser snapshots.
For OAuth and other auth-sensitive flows, let d3k launch Chrome. A separate Playwright, browser MCP, raw Chrome, or custom agent-browser --profile session is a different browser identity and can break sign-in flows.
d3k status --jsonArtifacts are stored per project:
| Artifact | Location |
|---|---|
| Active session | ~/.d3k/<project>/session.json |
| Consolidated log | ~/.d3k/<project>/d3k.log or logs/ |
| Screenshots | ~/.d3k/<project>/screenshots/ |
| Chrome profile | ~/.d3k/<project>/chrome-profile/ |
| Crash log | ~/.d3k/crash.log |
Run d3k directly when you want the interactive terminal experience:
d3k
You can also launch an agent beside the TUI in tmux:
d3k --with-agent claude
d3k --with-agent codex
d3k --with-agent opencode
The split-screen workflow requires tmux. The agent-first background workflow does not.
d3k --help
| Option | Purpose |
|---|---|
-p, --port <port> | Override the detected dev-server port |
-s, --script <script> | Override the detected package script |
-c, --command <command> | Run a custom dev-server command |
--app-url <url> | Open a specific URL in the managed browser |
--profile-dir <dir> | Override the project Chrome profile |
--no-portless | Disable the default stable Portless URL |
--headless | Run Chrome headlessly for CI |
--servers-only | Intentionally disable browser monitoring |
--no-tui | Disable the interactive dashboard |
--no-agent | Skip the standalone agent-selection prompt |
-t, --tail | Stream the consolidated log |
--debug | Print verbose runtime diagnostics |
Prefer auto-detection. Use overrides only when the project has an unusual dev command, port, or target URL.
d3k errors
d3k errors --context
d3k errors --all
d3k logs
d3k logs --type browser
d3k logs --type server
d3k logs --json
d3k fix
d3k fix --focus build
d3k crawl
d3k crawl --depth all
d3k detects common web projects, including:
--commandUse d3k itself as the local runtime for this repository:
d3k --no-agent --no-tui -t
After code changes:
bun run lint
bun run typecheck
For CLI or TUI changes under src/:
bun run canary
MIT
.agents/
skills/
analyze-bundle/
SKILL.md
deepsec/
SKILL.md
.biomeignore
.github/
workflows/
release.yml
test-release.yml
.gitignore
.husky/
pre-commit
pre-push
.node-version
.npmignore
AGENTS.md
bin/
dev3000
biome.json
bun.lock
bunfig.toml
CHANGELOG_README.md
CHANGELOG.md
CLAUDE.md
cli.jpg
CONTRIBUTING.md
docs/
RELEASE_PROCESS.md
vercel-deployment-setup.md
example-apps/
bundle-size-optimizer/
.gitignore
app/
catalog-data.ts
globals.css
layout.tsx
page.tsx
pulse-simulator.tsx
bun.lock
bunfig.toml
eslint.config.mjs
next.config.ts
package.json
postcss.config.mjs
README.md
tsconfig.json
vercel.json
client-side-fetch-optimizer/
.gitignore
app/
api/
queue-stats/
route.ts
globals.css
layout.tsx
page.tsx
bun.lock
bunfig.toml
eslint.config.mjs
next.config.ts
package.json
postcss.config.mjs
README.md
tsconfig.json
vercel.json
cls-fix/
.gitignore
app/
favicon.ico
globals.css
late-banner.tsx
layout.tsx
page.tsx
bun.lock
bunfig.toml
eslint.config.mjs
next.config.ts
package.json
postcss.config.mjs
public/
file.svg
globe.svg
next.svg
vercel.svg
window.svg
README.md
tsconfig.json
vercel.json
design-guidelines/
.gitignore
app/
favicon.ico
globals.css
layout.tsx
page.tsx
bun.lock
bunfig.toml
eslint.config.mjs
next.config.ts
package.json
postcss.config.mjs
public/
file.svg
globe.svg
next.svg
vercel.svg
window.svg
README.md
tsconfig.json
vercel.json
eliminate-waterfalls/
.gitignore
app/
globals.css
layout.tsx
page.tsx
service-health.tsx
bun.lock
bunfig.toml
eslint.config.mjs
next.config.ts
package.json
postcss.config.mjs
README.md
tsconfig.json
vercel.json
re-render-optimizer/
.gitignore
app/
globals.css
layout.tsx
page.tsx
bun.lock
bunfig.toml
eslint.config.mjs
next.config.ts
package.json
postcss.config.mjs
README.md
tsconfig.json
vercel.json
react-performance/
.gitignore
app/
expensive-chart.tsx
favicon.ico
globals.css
layout.tsx
page.tsx
bun.lock
bunfig.toml
eslint.config.mjs
next.config.ts
package.json
postcss.config.mjs
public/
file.svg
globe.svg
next.svg
vercel.svg
window.svg
README.md
tsconfig.json
vercel.json
README.md
server-side-perf-optimizer/
.gitignore
app/
account-console.tsx
data.ts
globals.css
layout.tsx
page.tsx
bun.lock
bunfig.toml
components/
account-header.tsx
activity-panel.tsx
eslint.config.mjs
next.config.ts
package.json
postcss.config.mjs
README.md
tsconfig.json
vercel.json
turbopack-bundle-analyzer/
.gitignore
app/
favicon.ico
globals.css
layout.tsx
mega-catalog.json
page.tsx
promo-feed.json
bun.lock
bunfig.toml
eslint.config.mjs
next.config.ts
package.json
postcss.config.mjs
public/
file.svg
globe.svg
next.svg
vercel.svg
window.svg
README.md
tsconfig.json
vercel.json
extensions/
react-devtools-chrome/
build/
backendManager.js
background.js
fallbackEvalContext.js
fileFetcher.js
hookSettingsInjector.js
importFile.worker.worker.js
installHook.js
installHook.js.map
main.js
panel.js
parseSourceAndMetadata.worker.worker.js
prepareInjection.js
proxy.js
react_devtools_backend_compact.js
react_devtools_backend_compact.js.map
icons/
128-deadcode.png
128-development.png
128-disabled.png
128-outdated.png
128-production.png
128-restricted.png
128-unminified.png
16-deadcode.png
16-development.png
16-disabled.png
16-outdated.png
16-production.png
16-restricted.png
16-unminified.png
32-deadcode.png
32-development.png
32-disabled.png
32-outdated.png
32-production.png
32-restricted.png
32-unminified.png
48-deadcode.png
48-development.png
48-disabled.png
48-outdated.png
48-production.png
48-restricted.png
48-unminified.png
deadcode.svg
development.svg
disabled.svg
outdated.svg
production.svg
restricted.svg
main.html
manifest.json
panel.html
popups/
deadcode.html
development.html
disabled.html
outdated.html
production.html
restricted.html
shared.css
shared.js
unminified.html
husky
LICENSE
logs.jpg
package.json
packages/
d3k-darwin-arm64/
bunfig.toml
package.json
d3k-linux-x64/
bunfig.toml
package.json
d3k-windows-x64/
bunfig.toml
package.json
README.md
scripts/
build-binaries.ts
build-skill-runner-shell-artifact.ts
build.sh
canary-smoke-test.ts
canary.sh
check-install.js
claim-d3k-npm.sh
generate-changelog-md.ts
get-repo-info.sh
prepare-platform-packages.sh
release.sh
reset-demo-bugs.sh
run-cls-detection.ts
smoke-skill-runner-install.ts
test-cloud-fix.sh
test-cloud-with-cdp-fix.sh
test-local-quick.sh
test-release.sh
typegen.sh
update-changelog.ts
skills/
d3k/
agents/
openai.yaml
PUBLISH.md
SKILL.md
src/
cdp-monitor.test.ts
cdp-monitor.ts
cli.ts
commands/
crawl.ts
errors.ts
fix.ts
logs.ts
resume.test.ts
resume.ts
skill-runner.test.ts
skill-runner.ts
status.test.ts
status.ts
components/
AgentSelector.tsx
PackageSelector.tsx
constants/
log-colors.ts
dev-environment.test.ts
dev-environment.ts
index.ts
loading.html
portless.test.ts
portless.ts
runtime-compat.test.ts
screencast-manager.ts
services/
parsers/
error-detectors/
__tests__/
base.test.ts
nextjs.test.ts
base.ts
index.ts
nextjs.ts
index.ts
log-parsers/
base.ts
index.ts
standard.ts
output-processor.test.ts
output-processor.ts
skills/
d3k/
internal-skill.md
index.test.ts
index.ts
tui-interface-impl.test.ts
tui-interface-impl.tsx
tui-interface-opentui.test.ts
tui-interface-opentui.ts
tui-interface.ts
types/
global.d.ts
utils/
agent-browser.ts
agent-detection.test.ts
agent-detection.ts
agent-selection.test.ts
agent-selection.ts
browser-command-argv.test.ts
browser-command-argv.ts
build-version.test.ts
build-version.ts
cli-options.test.ts
cli-options.ts
d3k-dir.test.ts
d3k-dir.ts
log-filename.test.ts
log-filename.ts
project-detector.ts
project-metadata.test.ts
project-metadata.ts
project-name.test.ts
project-name.ts
repo-validate.test.ts
repo-validate.ts
session.test.ts
session.ts
... 395 moreLocal drop-in replacement services for CI and no-network sandboxes. Fully stateful, production-fidelity API emulation. Not mocks.
Browser automation CLI for AI agents. Fast native Rust CLI.
The Generative UI framework. Generate dynamic, personalized UIs from prompts without sacrificing reliability. Predefined components and actions for safe, predictable output.
FAQ
dev3000 is a Claude Code plugin with 1 hand-picked skill for development work, indexed on Flowy. Install it with the command on its page. It includes d3k. Its skills do not fire on their own yet. Request auto-invocation to have Flowy route them as you prompt. Free and open source.