Files
heicode-win/cc-haha
chenchenandClaude Opus 4.7 30056136ea fix(client): 6 desktop bugs reported in real-world testing
#1 — Untitled session can't be deleted
   src/server/services/sessionService.ts:deleteSession is now idempotent.
   Previously placeholder sessions whose JSONL file hadn't been flushed
   yet would 404 the delete and stay stuck in the sidebar list. Now we
   succeed silently if the file's gone (and treat ENOENT during unlink
   the same way), matching how the frontend already optimistically
   removes the row.

#2 — Run button turns red 「stop」 on idle when switching model
   desktop/src/components/chat/ChatInput.tsx — gate isActive on
   hasMessages. ModelSelector / runtime config changes briefly flip
   chatState off-idle (CLI reconnect / startup). Without messages
   there's nothing to stop, so the button should stay disabled
   gradient, not turn into a red stop affordance.

#3 — Draft input bleeds across session switches
   desktop/src/components/chat/ChatInput.tsx — ChatInput is mounted
   once at app shell level; switching tabs doesn't re-mount it, so
   the local `input` useState carried over. Add a useEffect keyed on
   activeTabId that resets input + attachments + open menus + filter
   buffers. composerPrefill path (rewind) keeps owning its own reset
   via the existing prefill effect.

#4 — Close (×) minimized to tray instead of quitting
   desktop/src-tauri/src/lib.rs — drop the prevent_close + hide
   pathway on the main window's CloseRequested. Close now actually
   quits; users who want to keep the app running can minimize via
   the existing window controls. Tray icon stays available for
   re-open + explicit quit.

#5 — Tray menu hardcoded "Claude Code Haha"
   desktop/src-tauri/src/lib.rs — rename tray menu items, tray
   tooltip, and macOS app submenu to "Heicode" / "显示 Heicode" /
   "退出 Heicode" / "关于 Heicode".

#6 — Skills page silently empty when one source crashes
   src/server/api/skills.ts:listSkills uses Promise.allSettled so a
   single failed source (user / project / plugin) returns a partial
   list + structured errors[] instead of tanking the whole response.
   desktop/src/api/skills.ts + stores/skillStore.ts thread the
   errors through; SkillList only shows the hard-error wall when
   skills.length === 0.

Verification:
  bunx tsc -b --noEmit (desktop)        — clean
  bunx tsc --noEmit (cc-haha root)      — clean
  cargo check (src-tauri)               — clean

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-09 13:48:40 +08:00
..

Claude Code Haha

Claude Code Haha

GitHub Stars GitHub Forks GitHub Issues GitHub Pull Requests License 中文 English Docs

A locally runnable version repaired from the leaked Claude Code source, with support for any Anthropic-compatible API endpoint (MiniMax, OpenRouter, etc.). Beyond the full TUI, we've also completed Computer Use (macOS / Windows), built a GUI desktop app, and enabled full remote control via Telegram / Feishu.

Features · Desktop · Architecture · Quick Start · Env Vars · FAQ · Global Usage · More Docs


Features

  • Full Ink TUI experience (matching the official Claude Code interface)
  • --print headless mode for scripts and CI
  • MCP server, plugin, and Skills support
  • Custom API endpoint and model support (Third-Party Models Guide)
  • Memory System (cross-session persistent memory) — Usage Guide
  • Multi-Agent System (agent orchestration, parallel tasks, Teams collaboration) — Usage Guide | Implementation
  • Skills System (extensible capability plugins, custom workflows) — Usage Guide | Implementation
  • Channel System (remote Agent control via Telegram/Feishu/Discord IM platforms) — Architecture
  • Computer Use desktop control — Guide | Architecture
  • Desktop App (Tauri 2 + React GUI client, multi-tab multi-session) — Docs
  • Fallback Recovery CLI mode (CLAUDE_CODE_FORCE_RECOVERY_CLI=1 ./bin/claude-haha)

Architecture Overview

Overall architecture
Overall architecture
Request lifecycle
Request lifecycle
Tool system
Tool system
Multi-agent architecture
Multi-agent architecture
Terminal UI
Terminal UI
Permissions and security
Permissions and security
Services layer
Services layer
State and data flow
State and data flow

Desktop Preview

Download Desktop   Install Guide

Main UI
Main Interface
Code Editing
Code Editing & Diff View
Permission Control
Permission Control & AI Questions
Provider Settings
Multi-Provider Management
Scheduled Tasks
Scheduled Tasks
IM Adapters
IM Adapters (Telegram / Feishu)

Quick Start

1. Install Bun

# macOS / Linux
curl -fsSL https://bun.sh/install | bash

# macOS (Homebrew)
brew install bun

# Windows (PowerShell)
powershell -c "irm bun.sh/install.ps1 | iex"

On minimal Linux images, if you see unzip is required, run apt update && apt install -y unzip first.

2. Install Dependencies and Configure

bun install
cp .env.example .env
# Edit .env with your API key — see docs/en/guide/env-vars.md for details

3. Start

macOS / Linux

./bin/claude-haha                          # Interactive TUI mode
./bin/claude-haha -p "your prompt here"    # Headless mode
./bin/claude-haha --help                   # Show all options

Windows

Prerequisite: Git for Windows must be installed.

# PowerShell / cmd — call Bun directly
bun --env-file=.env ./src/entrypoints/cli.tsx

# Or run inside Git Bash
./bin/claude-haha

4. Global Usage (Optional)

Add bin/ to your PATH to run from any directory. See Global Usage Guide:

export PATH="$HOME/path/to/claude-code-haha/bin:$PATH"

5. Desktop Development

If you are developing or testing the desktop/ frontend, start both the API server and the desktop frontend.

5.1 Start the API server

cd /Users/nanmi/workspace/myself_code/claude-code-haha
SERVER_PORT=3456 bun run src/server/index.ts

Optional health check:

curl http://127.0.0.1:3456/health

5.2 Start the desktop frontend

cd /Users/nanmi/workspace/myself_code/claude-code-haha/desktop
bun run dev --host 127.0.0.1 --port 2024

Then open:

http://127.0.0.1:2024

5.3 Notes

  • If port 3456 is already occupied by an old server process, run lsof -nP -iTCP:3456 -sTCP:LISTEN, find the PID, then kill <PID>.
  • For chat testing, create a fresh session and re-select a real working directory.
  • If an old session points to a deleted directory, the server will return Working directory does not exist. That is separate from whether the API server is running.

Tech Stack

Category Technology
Runtime Bun
Language TypeScript
Terminal UI React + Ink
CLI parsing Commander.js
API Anthropic SDK
Protocols MCP, LSP

More Documentation

Document Description
Environment Variables Full env var reference and configuration methods
Third-Party Models Using OpenAI / DeepSeek / Ollama and other non-Anthropic models
Memory System Cross-session persistent memory usage and implementation
Multi-Agent System Agent orchestration, parallel tasks and Teams collaboration
Skills System Extensible capability plugins, custom workflows and conditional activation
Channel System Remote Agent control via Telegram/Feishu/Discord IM platforms
Computer Use Desktop control (screenshots, mouse, keyboard) — Architecture
Desktop App Tauri 2 + React GUI client — Quick Start | Architecture | Installation
Global Usage Run claude-haha from any directory
FAQ Common error troubleshooting
Source Fixes Fixes compared with the original leaked source
Project Structure Code directory structure

Sponsorship & Partnership

This project is maintained in the author's spare time. Corporate or individual sponsorships are welcome to support ongoing development. Custom features, integrations, and business partnerships are also open for discussion.

Sponsor Description
JieKou AI
接口AI
Thanks to JieKou AI for sponsoring this project. JieKou AI provides official model resources with stable, high-performance API access. Subscription bundles are priced at 20% off the official rate; new users who register through this link and bind GitHub can claim a $3 coupon.
ShengSuanYun Thanks to ShengSuanYun for sponsoring this project. ShengSuanYun is an industrial-grade AI task parallel execution platform for AI Native Teams, aggregating Claude, ChatGPT, Gemini, and other LLM, image, and video model capacity through direct, non-reverse-engineered access. Its platform SLA reaches 99.7%, with service status available online. It also supports dedicated enterprise gateways, cost and permission controls, smart routing, security protection, BYOK, usage-based billing, upcoming tokens plans, and invoicing. New users registering through this link can receive 10 yuan in model credits plus a 10% first top-up bonus.

📧 Contact: relakkes@gmail.com


☕ Buy Me a Coffee

If this project helps you, consider buying me a coffee — every bit of support keeps this project going ❤️

WeChat Pay
WeChat Pay
Alipay
Alipay
Buy Me a Coffee
Buy Me a Coffee

Thanks

Thanks to the following open-source projects and community practices for reference and inspiration:

  • React: frontend engineering and component-based UI ecosystem.
  • Tauri: cross-platform desktop app capabilities and engineering practices.
  • cc-switch: reference for model provider configuration.

⭐ Star History

If this project helps you, please support it with a ⭐ Star so more people can discover Claude Code Haha.

Star History Chart

Disclaimer

This repository is based on the Claude Code source leaked from the Anthropic npm registry on 2026-03-31. All original source code copyrights belong to Anthropic. It is provided for learning and research purposes only.