shellfish.computer
v1.0.0
Published
Make Claude Code, Codex, and Gemini work properly in your Replit shell.
Downloads
5,413
Maintainers
Readme
((( Shellfish
The shell companion for Replit builders.
Think. Brief. Fix. Review. Manage. Think for free. Fix fast. Ship better. Ship while you sleep.
Built for Replit. Powered by Replit's Claude. Zero setup. Zero API keys.
____ _ _ _ __ _ _ v0.2.3
/ ___|| |__ ___| | |/ _(_)___| |__ shellfish.computer
\___ \| '_ \ / _ \ | | |_| / __| '_ \ built for replit
___) | | | | __/ | | _| \__ \ | | |
|____/|_| |_|\___|_|_|_| |_|___/_| |_|
think · brief · fix · review · manage · run `shellfish help`Install
npm install -g shellfish.computer
npx playwright install chromium
# Linux: also run `sudo npx playwright install-deps chromium`The npm package is
shellfish.computer(the bareshellfishname on npm is owned by an unrelated CI/CD tool). The bin name is stillshellfish— you typeshellfish ...after install, same as ever.
That's it. Runs inside Replit. Uses Replit's Claude integration — no keys, no
env vars for the default Claude REPL. Want a second opinion from Codex /
Gemini / Grok? Bring your own API key for those (see think codex below).
Think · Brief · Fix · Review · Loop · Manage
Five pillars. One CLI.
🧠 Think — shellfish think
Claude in your shell. Free. Save agent credits for building.
Open a Claude REPL right in your terminal. Plan a feature, pressure-test an idea, debug out loud — without burning a single agent credit on prose.
shellfish think🦐 Thinking Partner
Claude in your shell.
Thinking is free. Agent credits are for building.
Type 'exit' to close.
──────────────────────────────────────────────────
you ▸ how should I structure my supabase RLS policies for a multi-tenant app?Conversation history lives in the session. Type exit, quit, or hit
Ctrl-D / Ctrl-C to leave.
Second opinions — shellfish think codex|gemini|grok
Want a different model in the loop? Pick one. Claude stays free via Replit AI Integrations; the others are strictly bring-your-own-key:
| Subcommand | Provider | Required env var |
| ----------------------- | ----------------- | ------------------ |
| shellfish think | Claude (Anthropic) | provided by Replit |
| shellfish think codex | OpenAI / GPT-5 | OPENAI_API_KEY |
| shellfish think gemini| Google Gemini | GEMINI_API_KEY |
| shellfish think grok | xAI Grok (live web) | XAI_API_KEY |
export OPENAI_API_KEY=sk-...
shellfish think codexSame REPL, same history, same exits — just a different brain.
Council — shellfish think council
Fan one prompt out to every model with a key set, render each answer in its own panel, then have Claude write the final synthesis with a single clear recommendation.
shellfish think council "should I use server actions or a REST route here?"
echo "review my migration plan: ..." | shellfish think councilMembers without a configured key are skipped (and listed in the welcome banner). Claude is required for the synthesis step.
📝 Brief — shellfish brief
Turn a rough idea into a paste-ready Replit-agent prompt.
Interactive 4-question interview, or fully non-interactive via flags / piped
stdin. The output is structured markdown with ## Goal, ## Done looks like,
## Constraints, ## Files to touch, ## Notes — copy it straight into the
agent chat.
# interactive
shellfish brief
# one-shot
shellfish brief --goal "add dark mode toggle" --done "persists across reloads" \
--constraints "use existing Tailwind tokens"
# from stdin
echo "wire stripe checkout into the pricing page" | shellfish brief🔧 Fix — shellfish connect · shellfish fix · shellfish watch · shellfish cache
Stuck connecting something? Goes fishing. Comes back with what you need.
shellfish connect <service>
Get exact, paste-ready steps to wire up an external service:
shellfish connect supabase
shellfish connect google-oauth # aliases: google, googleoauth
shellfish connect google-workspace # aliases: gmail, drive, calendar, admin-sdk, workspace
shellfish connect google-sheets # aliases: sheets, gsheets, googlesheets
shellfish connect google-docs # aliases: docs, gdocs, googledocs
shellfish connect stripe
shellfish connect clerk # aliases: clerkjs, clerk-auth
shellfish connect neon # aliases: neondb, neon-postgres
shellfish connect notion # alias: notion-api
shellfish connect resend # aliases: resend-email, resendemail
shellfish connect sendgrid # aliases: send-grid, twilio-sendgrid
shellfish connect postmark # alias: postmarkapp
shellfish connect mailgun # alias: mail-gun
shellfish connect ses # aliases: aws-ses, amazon-ses
shellfish connect nodemailer # aliases: smtp, node-mailer
shellfish connect asana
shellfish connect box
shellfish connect calendly # alias: cal
shellfish connect confluence
shellfish connect discord # aliases: discord-bot, discordjs
shellfish connect dropbox
shellfish connect todoist
shellfish connect spotify
shellfish connect zendesk
shellfish connect elevenlabs # aliases: eleven, eleven-labs, 11labs
shellfish connect figma
shellfish connect revenuecat # aliases: revcat, revenue-cat
shellfish connect agentmail # alias: agent-mail
shellfish connect firecrawl # alias: firecrawl-api
shellfish connect apify # aliases: apify-actors, apify-client
shellfish connect browserless # aliases: browserless-api, browserless-io
shellfish connect scrapingbee # aliases: bee, scraping-bee, scrapingbee-api
shellfish connect slack # aliases: slack-api, slack-bot
shellfish connect github # aliases: gh, github-api, octokit
shellfish connect linear # aliases: linear-api, linear-graphql
shellfish connect jira # aliases: atlassian-jira, atlassian
shellfish connect hubspot # aliases: hubspot-api, hubspot-crm
shellfish connect twilio # aliases: twilio-sms, twilio-voice
shellfish connect google-maps # aliases: gmaps, maps, google-maps-platform
shellfish connect mapbox # aliases: mb, mapbox-gl, mapbox-api
shellfish connect whatsapp # aliases: meta-whatsapp, whatsapp-meta, whatsapp-cloud, whatsapp-business
shellfish connect whatsapp-twilio # aliases: twilio-whatsapp, whatsapp-twilio-api
shellfish connect tiktok # aliases: tiktok-api, tiktok-developers, tt
shellfish connect instagram # aliases: ig, instagram-graph, instagram-api, ig-graph
shellfish connect facebook # aliases: fb, facebook-graph, facebook-api, meta-graph
shellfish connect linkedin # aliases: linkedin-api, linkedin-marketing, li
shellfish connect reddit # aliases: reddit-api, snoowrap, reddit-oauth
shellfish connect twitter # aliases: x, x-api, twitter-api, tweepy, x-twitterFetched docs are cached for 24 hours under ~/.shellfish/cache/, so re-running
the same connect command is near-instant. Pass --fresh to bypass the cache:
shellfish connect stripe --freshShellfish Memory
After every successful connect, Shellfish appends a short, structured entry
to your project's REPLIT.md under a ## Shellfish Memory section so the
Replit Agent automatically remembers what's been wired up:
## Shellfish Memory
- stripe: connected on 2026-05-01, env vars: STRIPE_SECRET_KEY, STRIPE_WEBHOOK_SECRET
- clerk: connected on 2026-05-01, env vars: CLERK_SECRET_KEYRe-running connect stripe updates the existing stripe line in place rather
than appending a duplicate. Connecting a different service adds a new line
under the same section without touching anything else in REPLIT.md. If
REPLIT.md doesn't exist yet, Shellfish creates one containing only the
Shellfish Memory section.
If you'd rather keep REPLIT.md to yourself, opt out per-run:
shellfish connect stripe --no-memoryshellfish fix [error]
Paste an error and get a one-line cause + numbered fix steps. If the error mentions a service Shellfish knows, it pulls live docs first for grounding. It also recognizes two common Replit pain points:
- CORS errors — diagnoses the wrong-origin / missing-credentials / missing-preflight cases against Replit's dev vs deployed domain split.
- Drizzle ORM errors — pulls live Drizzle docs so the diagnosis cites real Drizzle APIs.
Service hints take precedence over framework hints — a Supabase error that also mentions CORS still grounds against Supabase docs.
Before generating the prompt, shellfish fix quietly scans your local
project for grounding context (best-effort, anything missing is silently
skipped):
- Stack detection from
package.json— primary framework / runtime cues and the package manager (e.g.Stack: Node + Express + Drizzle (pnpm)). - Stack-trace excerpts — if the pasted error references files that
exist in the project, a ~20-line window around the cited line for the
top 1-3 frames (skips
node_modulesand dotfile dirs). - Recent changes —
git diff HEAD~1andgit status --porcelain, capped and clearly truncated when long.
Scanning runs in parallel with the docs fetch so it doesn't add wall-clock
latency. When something useful is gathered you'll see a single dim line
like 🦐 grounded in 2 files + recent diff. Pass --no-scan to skip the
scan entirely.
shellfish fix "TypeError: supabase.from is not a function"
# Skip the local codebase scan:
shellfish fix --no-scan "TypeError: supabase.from is not a function"
# CORS:
shellfish fix "Access to fetch at 'https://api.example.com' from origin 'https://my-app.replit.app' has been blocked by CORS policy: No 'Access-Control-Allow-Origin' header is present on the requested resource."
# Drizzle:
shellfish fix 'DrizzleError: relation "users" does not exist'
# Or pipe a build/run log:
npm run dev 2>&1 | shellfish fixshellfish env-check
Scan the project for required env vars and report which are set, missing, or
set-but-empty. Reads .env.example / .env.sample / .env.template plus
process.env.X and import.meta.env.X references in your source. Exits
non-zero when anything required is missing — wire it into your dev workflow.
shellfish env-checkshellfish audit
Dependency-health snapshot for Node projects. Auto-detects npm / pnpm / yarn
from the lockfile, verifies the lockfile is in sync with package.json,
runs the manager's outdated and audit commands, and prints a brand-styled
summary highlighting major-version drift and severity counts. Exits non-zero
when there are critical or high security advisories, when the lockfile is
out of sync with package.json, or when the package manager itself fails to
run (e.g. not installed). Outdated packages alone never fail.
shellfish auditshellfish checkpoint / shellfish rollback
Git-based safety net for "the agent broke something — back me up." Stays on
the current branch and uses git reset --keep so uncommitted work that
doesn't conflict is preserved. Confirms before any destructive action.
shellfish checkpoint # default name = timestamp
shellfish checkpoint before-refactor # named checkpoint, tagged shellfish/before-refactor
shellfish rollback # list every shellfish checkpoint
shellfish rollback before-refactor # restore the working tree to that checkpointshellfish watch [-- <cmd>...]
Tail your dev server (or any piped log stream) and auto-diagnose errors as
they fire — no more notice error → copy → paste → run fix. Two ways to
use it:
# Spawn mode: Shellfish runs your command, streams its output through to
# your terminal unchanged, and watches for errors in real time.
shellfish watch -- npm run dev
shellfish watch -- node server.js
# Pipe mode: Shellfish reads piped stdin instead.
npm run dev 2>&1 | shellfish watchWhen Shellfish recognizes an error block (Node Error: + stack trace,
Python Traceback, Vite/Next plugin errors, unhandled rejections), it
prints 🦐 Error detected. Diagnosing..., runs the same fix pipeline
(service detection + doc grounding) against the captured block, prints the
paste-ready agent task, and resumes streaming the underlying process
output. Repeats of the same error within ~30s are silently ignored so a
single failure can't trigger a flood of diagnoses.
Flags:
--quiet— suppress the🦐 Error detected. Diagnosing...marker line (the final fix block still prints).--once— exit cleanly after the first diagnosis. Useful for one-shot scripts (shellfish watch --once -- node broken.js).
Ctrl-C cleanly forwards to the child process (when spawned) and exits the watcher.
shellfish cache
Inspect or clear the local docs cache (~/.shellfish/cache/).
shellfish cache list # show each cached service, age, and size
shellfish cache prune # remove only expired entries (keeps fresh ones)
shellfish cache clear # remove every cached entry
shellfish cache clear stripe # remove just one service's entriesThe cache directory honors SHELLFISH_CACHE_DIR if you'd rather keep cached
docs somewhere else.
🔍 Review — shellfish review <url> · shellfish perf <url>
Brutal honest feedback on your app. Formatted as Replit agent tasks.
Visit a deployed app, screenshot it, and get a brutally honest senior-designer scorecard with the top 3 paste-ready fixes:
shellfish review https://your-app.replit.app
shellfish review https://shellfish.computerYou'll see three score bars (COPY / DESIGN / UX), a green ✅ list of what's working, a red ❌ list of what needs fixing, and three cyan boxes — each one a fully-formed task you can paste straight into the Replit agent chat.
The whole point is the loop: run review → fix the top 3 → run review
again → score goes up. Works on any public http(s) URL.
shellfish perf <url>
Same shape, but for speed instead of taste. Headless-Chromium loads the page, captures Navigation Timing + Resource Timing + FCP/LCP, and prints a performance scorecard with three paste-ready agent tasks for the biggest wins:
shellfish perf https://your-app.replit.appReports time-to-first-byte, FCP, LCP, total transfer size, request count, and the biggest render-blocking resources. Desktop viewport only for v1.
shellfish style <reference>
Pull a real design system out of any URL or screenshot — paste-ready tokens for the agent, plus a sticky design-memory line in
REPLIT.md.
Hand it a URL or a local image and Shellfish will extract a full token set (palette with named roles, type scale, spacing, radii, shadows, motion) and render it in the right shape for your stack — Tailwind, Tailwind+shadcn, plain React, or Expo+NativeWind:
shellfish style https://linear.app
shellfish style https://stripe.com --stack tailwind
shellfish style ./inspiration.png
shellfish style ./mockup.png --no-memory
shellfish style https://shellfish.computer --freshStack is auto-detected from your package.json and components.json. Override
with --stack tailwind|shadcn|react|expo.
After every successful run, Shellfish upserts a compact ## Shellfish Design
Memory section into your REPLIT.md so every future agent edit has something
concrete to align to. Pass --no-memory to skip that write. URL renders are
cached the same way connect caches docs — pass --fresh to bypass.
🔁 Loop — shellfish loop until
Hand off the boring fix-then-rerun cycle. Walk away. Come back to a green check.
Shellfish's first autonomous command. Point it at a check (tests, lint, typecheck — anything that exits non-zero on failure) and it will run the check, ask Claude to fix the first failing test, and re-run, looping until the check goes green or it hits a cap. Designed for the boring, recoverable failures: typos in tests, off-by-one boundaries, a renamed export that broke 30 callers — the stuff you don't want to do by hand at midnight.
shellfish loop until "pnpm test"
shellfish loop until # auto-detects from package.json scripts
shellfish loop until --max 5 --budget 0.50
shellfish loop until "pnpm typecheck && pnpm lint" --time 10m
shellfish loop stop # from another shell, kills a running loopIf you don't pass a command, Shellfish auto-detects one from your package.json
scripts (test, then check, then ci) and invokes it via the right runner
(pnpm/yarn/npm based on your lockfile).
Caps (hard, default-on)
--max 20iterations--budget 2USD--time 30mwall clock
Hit any one → loop stops with a one-line summary that always looks like:
🦐 Stopped. 4 iterations, 2m elapsed, $0.0823 spent. Check passed. Next: run `shellfish review` to see how it looksSafety, by default
- Refuses to start if your git tree is dirty (override with
--no-checkpoint). You should always be able togit diffto see what the loop did. - Holds a PID lock at
.shellfish/loops/.lockso a second loop can't trample the first. Useshellfish loop stopfrom another shell to kill the running one. - Stops automatically if the same error appears 3 iterations in a row, or if Claude makes zero file changes 3 iterations in a row. No infinite spin.
- Each iteration is a single, focused edit — designed to keep the diff reviewable, not to "rewrite everything until it passes".
Lessons (.shellfish/lessons.md)
After a successful run Shellfish asks once for an optional "anything we should
remember?" note. It's appended to .shellfish/lessons.md (dated, ~4KB cap with
oldest entries trimmed first) and shown to Claude on every future loop run in
this project. Project-specific muscle memory, no extra setup.
Run artifacts (.shellfish/loops/)
{ISO-timestamp}.log— append-only structured log of every iterationlast.summary.md— human-readable summary of the most recent run
Coming soon
shellfish loop freeform— loop on a freeform goal (no test command — Claude judges its own progress).shellfish loop prd— loop against a PRD/spec file, ticking off acceptance criteria as it goes.
🤖 Manage — shellfish manage
Autonomous propose · execute · review · approve loop. Ship while you sleep.
Sets up a long-running loop in your repl that proposes small tasks, executes
them with Claude (shell + read/write file + git tools), self-reviews the
result, and either approves or asks you for sign-off — all gated by a policy
file you control. Watch it on the live dashboard at
/manage, approve risky moves from your
phone.
# 1. write a starter policy
mkdir -p .shellfish
cat > .shellfish/manage.toml <<'TOML'
autonomy = "pause-on-risky" # full | pause-on-risky | approve-each
max_usd = 5
max_minutes = 30
max_tasks = 8
review_threshold = 0.7
risky_actions = [
"write:/lib/auth/**",
"write:/.env*",
"shell:rm -rf",
"shell:git push",
]
blocked_commands = ["rm -rf /", "shutdown", "reboot"]
TOML
# 2. start a goal-mode run (the shorthand and the long form are equivalent)
shellfish manage "ship onboarding v2"
# same as: shellfish manage start --goal "ship onboarding v2"
# 3. watch + control
shellfish manage status
shellfish manage tail --follow
shellfish manage approve <approval-id> [--note "ship it"]
shellfish manage reject <approval-id> [--note "scope creep"]
shellfish manage stopThree backlog modes. Pick one with --mode:
--mode goal --goal "<one-liner>"— Claude decomposes the goal into a small task queue.--mode roadmap— readsROADMAP.md(or--roadmap <file>) and queues unchecked items in order.--mode discovery— scans the repo forTODO/FIXME/XXXmarkers and queues them by priority.
State is persisted. Every run, task, event, approval, review and
spend snapshot lives in Postgres (manage_runs, manage_tasks,
manage_events, manage_approvals, manage_reviews,
manage_spend_snapshots) so the dashboard, the CLI and a fresh terminal all
see the same truth. The runner is detached (pid file at
.shellfish/manage.pid); kill it any time with shellfish manage stop or
the kill button in the dashboard.
Safety rails.
- Every shell/write_file action is classified by
lib/manager/policy.js(actionCategory()) and gated bygateAction(). Withpause-on-risky, matches againstrisky_actionspause the run and create an approval row; withapprove-each, every action requires sign-off; withfull, onlyblocked_commandsare blocked. - The executor caps each task at MAX_TURNS=12 with loop detection.
- Spend is snapshotted every cycle and surfaced on the dashboard with a
budget gauge — runs auto-pause when they hit
max_usd/max_minutes/max_tasks. - Nothing is force-pushed; tasks land on local git checkpoints
(
manage/<task-id>) so you can roll back any approved task with onegit reset.
End-to-end smoke check from this repo:
./scripts/manage-demo.sh # default goal
./scripts/manage-demo.sh /path/to/project "tighten copy" # custom📱 Dispatch — approve from your phone via Discord
The same Manage approvals, delivered as a DM. Tap Approve / Reject / Reply in Discord without leaving the conversation.
Manage already pauses on risky actions and asks for sign-off. Dispatch
delivers that ask to a phone you actually carry. The api-server hosts a
small Discord bot that DMs you whenever an approval lands and renders three
buttons: Approve, Reject, Reply… (Reply opens a modal so you can
attach a note before approving). Buttons resolve the same manage_approvals
row the dashboard and the CLI write to — first one to act wins, the message
edits in place.
Pairing happens in the dashboard. Open
/manage, find the Dispatch card,
click get linking code, and DM the shellfish bot the printed
/link <CODE> command in Discord. The code is 8 characters, single-use,
10-min TTL. The bot replies ✅ Linked and from then on every Manage run
that hits a risky action will DM you the approval card. Unlink with one
click on the same card.
The CLI is read-only — shellfish dispatch just reports the current
pairing so you can confirm what's wired up:
shellfish dispatch
# → status: linked
# channel: discord
# discord user: @you
# linked since: 2026-04-30 17:24:08
# point at a non-default api-server
SHELLFISH_API_URL=http://localhost:8080/api shellfish dispatchServer setup (one time, on the api-server). Set two env vars and restart:
DISCORD_BOT_TOKEN— bot token from Discord Developer Portal → Bot. Required.DISCORD_CLIENT_ID— your application's client/app id. Optional; used to render an "open bot DM" deeplink in the dashboard.
Bot scopes when inviting: bot + applications.commands. The bot only
needs DM access — no guild permissions required. With no token configured,
the api-server boots normally and the dashboard shows the Dispatch card as
disabled; nothing else changes.
How it works under the hood. The api-server runs a 2-second poller that
watches manage_approvals for newly-inserted pending rows and sends a DM
to the linked Discord account, recording the message id back on the
approval row. Button clicks and modal submissions go through the same
decideApprovalById() helper the dashboard and CLI use, so authorship is
attributed (actor.via = "discord", handle = "@you") and the orchestrator
unblocks the gated task immediately. Single-channel (Discord) and
single-user (userId = "default") for v1; the schema is multi-channel /
multi-user ready.
🐝 Swarm — shellfish swarm
Fan out a list of project briefs into a fleet of parallel autonomous agents.
shellfish swarm is the flagship buildathon feature: instead of running one
agent overnight, you run a coordinated fleet and ship N builds in parallel —
all tracked in the same database the manage dashboard reads.
Quick start
# 1. Write a briefs.yaml describing each build
cat > briefs.yaml <<'YAML'
- name: "Weather Dashboard"
goal: "Build a weather dashboard using the OpenWeatherMap free API"
constraints: "Use React and Tailwind CSS"
tags: [react, api]
- name: "URL Shortener"
goal: "Build a URL shortener with click analytics"
tags: [backend, saas]
- name: "Pomodoro Timer"
goal: "Build a Pomodoro timer with session history and streaks"
constraints: "No backend — localStorage only"
tags: [react, productivity]
YAML
# 2. Launch the fleet (up to 5 runs in parallel by default)
shellfish swarm start briefs.yaml
# 3. Check progress
shellfish swarm status
# 4. Stop everything if needed
shellfish swarm stop swm_<id>Brief schema
Each brief is a YAML list item (or a JSON array object) with these fields:
| Field | Required | Description |
| ------------- | -------- | ---------------------------------------------------------- |
| name | ✅ | Short display name for the run |
| goal | ✅ | One-sentence goal passed to the manage runner |
| constraints | — | Extra requirements appended to the goal |
| tags | — | List of labels (visible in swarm status) |
A JSON equivalent is also accepted:
[
{ "name": "Weather Dashboard", "goal": "Build a weather dashboard", "tags": ["react"] },
{ "name": "URL Shortener", "goal": "Build a URL shortener with analytics" }
]Concurrency
# Default: 5 parallel runs
shellfish swarm start briefs.yaml
# Dial up to burn more credits faster
shellfish swarm start briefs.yaml --concurrency 10
# Conservative (one at a time)
shellfish swarm start briefs.yaml --concurrency 1The controller polls every few seconds; when a slot opens (a run finishes or is killed), the next queued brief launches automatically. The controller runs in the foreground — Ctrl-C detaches safely, runs continue in the background.
shellfish swarm status [swarm-id]
────────────────────────────────────────────────────
shellfish swarm — status
swm_abc1234567890ab running briefs: 8 concurrency: 5 started: 3m ago
runs: 3 running 2 done 1 killed tasks: done 14 pending 7
id status done pending elapsed goal
────────────────────────────────────────────────────────────────────────────────
run_aa112233… running 4 2 12m Build a weather dashboar…
run_bb334455… done 6 0 18m Build a URL shortener wit…
run_cc556677… running 2 3 8m Build a Pomodoro timer wi…Omit the swarm id to list the 10 most recent swarms. Per-run details
match shellfish manage status — you can also use shellfish manage tail
<run-id> to follow a specific run's event stream.
shellfish swarm stop <swarm-id>
Marks the swarm as stopped and sends SIGTERM to every running agent.
Runs that are already done or killed are unaffected.
How it works
Each brief becomes a manage start --goal "..." equivalent — a full
manage_run row in the same manage_runs table, tagged with the swarm's
swarm_id. From there it's indistinguishable from a standalone run:
- The same orchestrator loop (propose → execute → review → approve)
- The same approval flow (Discord DMs,
/managedashboard) - The same event log (
manage_events), readable viamanage tail - The same budget controls from
.shellfish/manage.toml
The swarm layer is a thin scheduler: it reads briefs, creates runs, spawns background runner processes, and keeps the concurrency within the requested limit.
📊 Meter — shellfish meter
Live terminal credit-spend widget for Replit.
A live, full-screen terminal widget that shows your Replit credit spend in real time — session spend, last hour, today's spend, current burn rate, and how much runway is left at that pace. It refreshes every ~30 seconds.
shellfish meter --setup # one-time: paste your Replit session cookie
shellfish meter # live widget; Ctrl+C exits with a one-line summary
shellfish meter --once # single snapshot to stdout — pipe it anywhereHow --setup works: open replit.com in your browser, open DevTools → Application
→ Cookies, copy your session cookie, then paste it into the prompt. Shellfish
validates it against your Replit dashboard, then stores it locally at
~/.shellfish/meter-config.json with mode 0600 (owner read/write only). It
never leaves your machine — every fetch is a direct request from your terminal
to Replit, just like your browser.
If your cookie expires or Replit logs you out, you'll see a clear message
pointing you back at shellfish meter --setup — no stack traces, no surprises.
Supported targets
connect <service> — alphabetized:
connect agentmailconnect apifyconnect asanaconnect boxconnect browserlessconnect calendlyconnect clerkconnect confluenceconnect discordconnect dropboxconnect elevenlabsconnect expo-eas(Expo / EAS Build + Submit + Update for React Native)connect figmaconnect firecrawlconnect freshbooks(aliases:fresh-books,freshbooks-api)connect google-docsconnect google-maps(aliases: gmaps, maps, google-maps-platform)connect google-oauthconnect google-sheetsconnect google-workspace(Gmail, Drive, Calendar, Admin SDK)connect mailgunconnect mapbox(aliases: mb, mapbox-gl, mapbox-api)connect neonconnect nodemailerconnect notionconnect plaidconnect play-console(Google Play Console — Android Play Store releases & API uploads)connect postmarkconnect quickbooks(aliases:qbo,intuit)connect resendconnect revenuecatconnect scrapingbeeconnect sendgridconnect sesconnect spotifyconnect stripeconnect supabaseconnect testflight(TestFlight + App Store Connect for iOS releases)connect todoistconnect wave(aliases:waveapps,wave-apps,wave-accounting)connect xero(aliases:xero-accounting,xero-api)connect zendeskconnect zoho-books(aliases:zoho,zohobooks,zoho-accounting)connect slackconnect githubconnect linearconnect jiraconnect hubspotconnect twilioconnect solana— Web3 & crypto: Solana via@solana/web3.jsconnect evm— Web3 & crypto: Ethereum / EVM chains viaethersorviem(aliases:ethers,viem,ethereum,wagmi)connect walletconnect— Web3 & crypto: WalletConnect / Reown AppKit wallet-connect modal (aliases:reown,appkit,wc)connect privy— Web3 & crypto: embedded-wallet auth + JWT verification (aliases:privy-io,embedded-wallets)connect whatsapp(Meta Cloud API)connect whatsapp-twilioconnect tiktokconnect instagramconnect facebookconnect linkedinconnect redditconnect twitter(X)fix [error]— with built-in detection for every service above plus CORS and Drizzle ORM errorswatch [-- <cmd>]— tail logs and auto-diagnose errors as they fireenv-check— scan for required env vars and report what's missing or emptyaudit— dependency health snapshot (npm / pnpm / yarn auto-detected)checkpoint [name]— save a named git checkpointrollback [name]— list checkpoints, or restore the working tree to onereview <url>— brutal-judge scorecard for any deployed appperf <url>— performance scorecard (TTFB, FCP, LCP, weight) for any deployed appstyle <reference>— extract a design system from a URL or image, paste-ready tokens +REPLIT.mdmemorymeter— live terminal credit-spend widget (runmeter --setupfirst)play— offline ASCII fishing minigame (zero network, zero auth) for when the agent is overloadedcache listcache prunecache clear [service]
Changelog
v0.2.3 — Overnight runs & buildathon command
- Overnight / non-stop runs — Pro users can now let
shellfish managerun unattended for up to 8 hours. The default policy switches toautonomy: fullfor Pro accounts so the runner powers through safe edits without pausing. - Relaxed Pro guardrails — free-tier caps (3 tasks / 30 min) no longer
apply to Pro users; their
manage.tomlsettings are trusted as-is. - Detached background runner —
manage startnow spawns a detached child process so closing the terminal doesn't kill the run. - Replit Workflow registration — the runner registers itself in
.repliton start so the platform can revive it after a container sleep or restart. shellfish buildathon "<idea>"— new command that wrapsmanage startwith buildathon-friendly defaults (8 h cap, $10 spend ceiling,pause-on-riskyautonomy, detached background) — go from a one-liner to a working demo by morning.
v0.2.2 and earlier
See git history.
Hack on it
git clone <repo-url> shellfish
cd shellfish
npm install
npx playwright install chromium
node index.js thinkFrom the workspace root, pnpm shellfish <args> is the shortcut for running the local CLI (e.g. pnpm shellfish help, pnpm shellfish think).
License
MIT
