Note: このプロジェクトは Anthropic 非公式のサードパーティツールです。Anthropic による公式サポートの対象外です。
ディレクトリを指定して Claude Code を起動する Web フロントエンド。 VS Code のようにフォルダを選択し、ブラウザ内のターミナルで Claude Code を操作できます。
ブラウザ (xterm.js) <── WebSocket ──> Fastify <── node-pty ──> claude CLI
<── HTTP REST ──> (ディレクトリ一覧 API)
| レイヤー | 技術スタック |
|---|---|
| Frontend | React 19 + Vite + xterm.js |
| Backend | Node.js + Fastify + @fastify/websocket + node-pty |
- Node.js >= 20
- npm >= 9
- Claude Code CLI (
/usr/bin/claude) - C++ コンパイラ(node-pty のビルドに必要。Arch:
base-devel、Ubuntu:build-essential)
git clone <repo-url> ccserver
cd ccserver
npm installターミナルを 2 つ開いて実行:
# バックエンド (port 3001)
npm run dev:server
# フロントエンド (port 5173)
npm run dev:clientブラウザで http://localhost:5173 を開く。
npm run build --workspace=client
NODE_ENV=production node server/index.jsブラウザで http://localhost:3001 を開く。
ポートは環境変数 PORT で変更可能:
PORT=8080 NODE_ENV=production node server/index.js- ディレクトリブラウザでフォルダを選択
- シングルクリック → フォルダ内に移動
- ダブルクリック → そのフォルダで Claude Code を起動
- Open with Claude Code ボタン → 現在のディレクトリで起動
- ブラウザ内ターミナルで Claude Code を操作
- Back ボタンでディレクトリ選択に戻る
ccserver/
├── package.json # npm workspaces ルート
├── server/
│ ├── package.json
│ ├── index.js # Fastify エントリポイント
│ ├── routes/
│ │ └── dirs.js # GET /api/dirs ディレクトリ一覧
│ └── ws/
│ └── terminal.js # WebSocket + node-pty ブリッジ
└── client/
├── package.json
├── index.html
├── vite.config.js
└── src/
├── main.jsx
├── App.jsx
├── components/
│ ├── DirectoryBrowser.jsx
│ └── TerminalView.jsx
└── styles/
└── app.css
GET /api/dirs?path=<path>&showHidden=1
指定パスのサブディレクトリ一覧を返す。
{
"current": "/home/user",
"parent": "/home",
"dirs": [
{ "name": "projects", "path": "/home/user/projects" }
]
}JSON メッセージでターミナル I/O を中継。
| 方向 | type | フィールド | 説明 |
|---|---|---|---|
| → | init |
cwd, cols, rows |
Claude Code をスポーン |
| → | input |
data |
キーボード入力 |
| → | resize |
cols, rows |
ターミナルリサイズ |
| ← | ready |
cwd, cols, rows |
スポーン完了 |
| ← | output |
data |
ターミナル出力 |
| ← | exit |
exitCode, signal |
プロセス終了 |
cd /home/kts_sz/ccserver
npm run build --workspace=clientcp docs/ccserver.service ~/.config/systemd/user/ccserver.serviceまたは手動で ~/.config/systemd/user/ccserver.service を作成:
[Unit]
Description=Claude Code Web Server
After=network.target
[Service]
Type=simple
WorkingDirectory=/home/kts_sz/ccserver
Environment=NODE_ENV=production
Environment=PORT=3001
ExecStart=/usr/bin/node server/index.js
Restart=on-failure
RestartSec=5
[Install]
WantedBy=default.target# ユーザーサービスのデーモンをリロード
systemctl --user daemon-reload
# 起動
systemctl --user start ccserver
# 自動起動を有効化
systemctl --user enable ccserver
# ログイン中でなくてもサービスを維持(必要に応じて)
sudo loginctl enable-linger kts_sz# ステータス確認
systemctl --user status ccserver
# ログ表示
journalctl --user -u ccserver -f
# 再起動
systemctl --user restart ccserver
# 停止
systemctl --user stop ccserverTailscale Serve を使うと、Tailnet 内のデバイスから HTTPS でアクセスできます。
systemctl --user status ccserver# ポート 3001 を HTTPS で公開
sudo tailscale serve --bg 3001これにより https://<hostname>.<tailnet>.ts.net/ でアクセス可能になります。
# 現在の serve 設定を表示
tailscale serve statustailscale serve --https=443 offMIT