Skip to content

feat(chat): experimental caveman mode 🪨#3199

Open
vibegui wants to merge 1 commit into
mainfrom
vibegui/caveman-mode
Open

feat(chat): experimental caveman mode 🪨#3199
vibegui wants to merge 1 commit into
mainfrom
vibegui/caveman-mode

Conversation

@vibegui
Copy link
Copy Markdown
Contributor

@vibegui vibegui commented Apr 27, 2026

Summary

Adds an opt-in caveman mode to the chat — a fun, experimental easter egg inspired by JuliusBrussee/caveman. When activated, the model responds in terse caveman-speak ("why use many token when few token do trick") and the context-window ring + cost tooltips re-skin themselves with a stone-and-clay palette.

Two-tier toggle:

  1. Settings → Profile & Preferences → Experimental → Caveman mode — gates the feature (off by default).
  2. 🪨 button in the chat input footer — only appears when the experimental flag is on; click to activate the skin and inject the caveman system prompt for the next message.

What changes when active

  • A <caveman-mode> system prompt is appended to the chat's system string, instructing the model to drop articles/filler, stay technically accurate, sprinkle 🪨, and skip greetings/sign-offs.
  • The context-window ring (SessionStats) turns clay-brown / warm-clay / burnt-umber by fill tier, with a butt linecap and a 🪨 prefix on the percentage.
  • The session, per-message, and thinking tooltips switch to a dark-stone background with parchment text. Labels swap: contextrock full, tokenswords, costshiny, in/outear/mouth, think/thinkingponder. Numbers stay numeric.

Two preference keys (experimental_caveman and caveman_active) live in usePreferences() and follow the existing experimental_vibecode pattern. No backend, migration, or new dependency.

Files

  • apps/mesh/src/web/lib/caveman-mode.ts (new)CAVEMAN_SYSTEM_PROMPT, CAVEMAN_LABELS, CAVEMAN_RING_COLORS, useCavemanMode, useCavemanFeatureEnabled, useCavemanToggle.
  • apps/mesh/src/web/hooks/use-preferences.ts — adds experimental_caveman and caveman_active.
  • apps/mesh/src/web/views/settings/profile-preferences.tsx — Switch row in ExperimentalSection + tracking event.
  • apps/mesh/src/web/components/chat/input.tsx — 🪨 toggle button in the left actions, gated on the experimental flag.
  • apps/mesh/src/web/components/chat/usage-stats.tsxSessionStats / MessageUsageStats / MessageStatsBar branch on useCavemanMode().
  • apps/mesh/src/web/components/chat/chat-context.tsx — appends CAVEMAN_SYSTEM_PROMPT to the system string in sendMessageInternal when both flags are on.

Test plan

  • Toggle off (default): chat looks/behaves identically to main.
  • Enable Settings → Experimental → Caveman mode, return to chat: 🪨 button appears in the input footer next to Tools.
  • Click 🪨: button expands to a clay-colored "Caveman" pill (matches Plan/Image/Web mode pill styling).
  • Send a message: response comes back in caveman-speak; cost/tokens tooltip shows rock full, words, shiny, ear, mouth, ponder.
  • After the assistant replies: ring indicator shows clay-brown stroke + 🪨 % label.
  • Click X on the pill (or click the pill again): toggle deactivates; subsequent messages return to normal.
  • Disable the experimental flag in Settings: 🪨 button disappears even if caveman_active was on; messages stop carrying the caveman prompt.

bun run fmt ✅. bun run check clean for files in this PR (the only error — task-row.tsx avatar "xs", from commit 61a4d81 — is pre-existing on main and untouched here).

🤖 Generated with Claude Code


Summary by cubic

Adds an opt-in caveman mode for chat. A Settings flag unlocks a 🪨 button that injects a caveman system prompt and re-skins usage stats with a stone-and-clay look.

  • New Features
    • Settings: adds experimental_caveman (flag) and caveman_active (per-chat toggle) in preferences; off by default.
    • Chat: shows a 🪨 button in the input footer when the flag is on; toggling applies/removes caveman mode.
    • Prompt: when both flags are true, appends CAVEMAN_SYSTEM_PROMPT to the system string for outgoing messages.
    • UI: SessionStats, MessageUsageStats, and MessageStatsBar get a stone palette, butt linecap, and caveman labels (contextrock full, tokenswords, costshiny, in/outear/mouth, think(ing)ponder); numbers unchanged.

Written for commit 04d9f93. Summary will update on new commits. Review in cubic

Two-tier opt-in feature inspired by github.com/JuliusBrussee/caveman.
Settings flag enables a 🪨 toggle in the chat input footer; activating
the toggle injects a caveman system prompt into outgoing messages and
re-skins the context-window ring + cost tooltips with a stone-and-clay
palette plus caveman-speak labels (context→rock full, tokens→words,
cost→shiny, in/out→ear/mouth, think→ponder). Default off, fully reversible.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
@github-actions
Copy link
Copy Markdown
Contributor

🧪 Benchmark

Should we run the Virtual MCP strategy benchmark for this PR?

React with 👍 to run the benchmark.

Reaction Action
👍 Run quick benchmark (10 & 128 tools)

Benchmark will run on the next push after you react.

@github-actions
Copy link
Copy Markdown
Contributor

Release Options

Suggested: Minor (2.280.0) — based on feat: prefix

React with an emoji to override the release type:

Reaction Type Next Version
👍 Prerelease 2.279.5-alpha.1
🎉 Patch 2.279.5
❤️ Minor 2.280.0
🚀 Major 3.0.0

Current version: 2.279.4

Note: If multiple reactions exist, the smallest bump wins. If no reactions, the suggested bump is used (default: patch).

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant