A Chrome Extension + Local Daemon system for "omakase-style development." Like a skilled itamae (sushi chef), it keeps your focus sharp while AI agents prepare your code. Auto-returns you to the counter when your order is ready! π£
Note: Currently supports Claude Code only. Cursor and other AI agent support is planned for future releases.
βββββββββββββββββββ HTTP POST βββββββββββββββββββ WebSocket βββββββββββββββββββ
β Claude Code β ββββββββββββββββΆ β Itamae β ββββββββββββββββΆ β Chrome Ext β
β (Your Agent) β /agent/start β localhost:41593 β task.started β Sushi Counter β
β β /agent/log β (Kitchen) β task.log β Dashboard β
β β /agent/need-inputβ β task.need_inputβ β
β β /agent/done β β task.done β β
βββββββββββββββββββ βββββββββββββββββββ βββββββββββββββββββ
Place your order β Kitchen prepares β Chef calls you when ready π£
- Node.js 20+
- pnpm 9+ (install with
npm install -g pnpm) - Google Chrome browser
- Go to Releases
- Download the latest
sushi-focus-extension-vX.X.X.zip - Extract the ZIP file
- Open Chrome β
chrome://extensions - Enable "Developer mode" (top right)
- Click "Load unpacked" β Select extracted folder
See Quick Start below.
The plugin auto-starts the daemon when Claude Code starts.
Inside Claude Code, run:
/plugin marketplace add Sou0327/sushi_focus
/plugin install sushi-focus-daemon@sushi-focus
Restart Claude Code. On session start, you'll see:
[sushi-focus] Checking daemon on port 41593...
[sushi-focus] Starting daemon...
[sushi-focus] Daemon started successfully (v0.1.0)
git clone https://github.com/Sou0327/sushi_focus.git
cd sushi_focus
pnpm install# Build itamae (local kitchen server)
pnpm build:daemon
# Build Chrome extension (sushi counter)
pnpm build:extensionpnpm dev:daemonYou should see:
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β Sushi Focus - Itamae π£ β
β v0.1.0 β
β ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ£
β HTTP API: http://127.0.0.1:41593 β
β WebSocket: ws://127.0.0.1:41593/ws β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
Note: Keep the kitchen running in a separate terminal.
- Open
chrome://extensionsin Chrome - Enable "Developer mode" (top right)
- Click "Load unpacked"
- Select the
sushi_focus/extension/distfolder - Verify the Sushi Focus π£ icon appears in your toolbar
- Click the Sushi Focus icon in Chrome toolbar
- Click "View Kitchen" in the popup
- Side Panel opens on the right - your sushi counter seat!
Or click the Side Panel icon (π) in Chrome and select Sushi Focus.
Send work status from your editor (Claude Code, Cursor, etc.) to the kitchen:
# Start preparing (place order)
curl -X POST http://127.0.0.1:41593/agent/start \
-H "Content-Type: application/json" \
-d '{"taskId":"task-1","prompt":"Fix authentication bug"}'
# Kitchen update (chef is working)
curl -X POST http://127.0.0.1:41593/agent/log \
-H "Content-Type: application/json" \
-d '{"taskId":"task-1","message":"Analyzing codebase..."}'
# Need input (chef has a question)
curl -X POST http://127.0.0.1:41593/agent/need-input \
-H "Content-Type: application/json" \
-d '{"taskId":"task-1","question":"Which approach should I use?"}'
# Order ready! (omakase complete)
curl -X POST http://127.0.0.1:41593/agent/done \
-H "Content-Type: application/json" \
-d '{"taskId":"task-1","summary":"Fixed 3 files"}'# Place order
./scripts/sushi-focus-notify.sh start --prompt "Fix authentication bug"
# Kitchen update
./scripts/sushi-focus-notify.sh log --message "Analyzing codebase..."
# Chef has a question
./scripts/sushi-focus-notify.sh need-input --question "Which approach?"
# Order ready!
./scripts/sushi-focus-notify.sh done --summary "Fixed 3 files"Option 1: Plugin (Recommended) - See Claude Code Plugin above.
Option 2: Manual hooks - Copy the provided hooks config to your project:
# From the project root
cp scripts/claude-code-hooks.json .claude/settings.jsonOr copy to your global settings at ~/.claude/settings.json.
The hooks file includes: SessionStart (auto-start task), UserPromptSubmit (log prompts), PreToolUse (tool activity logging), PostToolUse, Notification, and Stop (task completion).
To secure the daemon API, set a shared secret:
export SUSHI_FOCUS_SECRET="your-secret-here"The hooks and scripts automatically include the Authorization: Bearer header when SUSHI_FOCUS_SECRET is set. The curl examples in this README omit the header for simplicity; add -H "Authorization: Bearer $SUSHI_FOCUS_SECRET" when authentication is enabled.
- When agent sends
/agent/need-input, the chef calls you back - Automatically returns focus to IDE
- When
/agent/donearrives:- Countdown displays (default 1.5s, configurable)
- Automatically returns focus to IDE unless "Cancel" is pressed
- By default, auto-return triggers regardless of the current site (
alwaysFocusOnDoneis on)
Endpoints for external agents (Claude Code, Cursor, etc.) to send events.
| Endpoint | Method | Description |
|---|---|---|
/health |
GET | Health check ({ok, version, gitBranch}) |
/agent/start |
POST | Place order (start task) |
/agent/log |
POST | Kitchen update (log output) |
/agent/need-input |
POST | Chef needs you! (triggers auto-return) |
/agent/done |
POST | Order ready! (triggers auto-return) |
/agent/cancel |
POST | Send it back (cancel task) |
/agent/progress |
POST | Preparation progress |
// POST /agent/start
{ taskId?: string, prompt: string, repoId?: string, image?: string }
// POST /agent/log
{ taskId: string, message: string, level?: "info" | "warn" | "error" | "debug" | "success" | "focus" | "command" }
// POST /agent/need-input
{ taskId: string, question: string, choices?: { id: string, label: string }[] }
// POST /agent/done
{ taskId: string, summary?: string, filesModified?: number }
// POST /agent/cancel
{ taskId: string }
// POST /agent/progress
{ taskId: string, current: number, total: number, label?: string }Endpoints for internal task management.
| Endpoint | Method | Description |
|---|---|---|
/tasks |
POST | Create task ({repoId, prompt}) |
/tasks/current |
GET | Get current task |
/tasks/:id/cancel |
POST | Cancel task |
/tasks/:id/choice |
POST | Send choice for input ({choiceId}) |
/repos |
GET | List repositories |
Control auto-focus to IDE window. Set initial values in .env.
| Endpoint | Method | Description |
|---|---|---|
/focus/settings |
GET | Get current focus settings |
/focus/settings |
POST | Update focus settings |
/focus/now |
POST | Manually focus IDE immediately |
# .env example
FOCUS_ENABLED=true # Enable/disable focus feature
FOCUS_APP=Cursor # Target app (Code, Cursor, Terminal, iTerm, Warp, etc.)
FOCUS_ON_NEED_INPUT=true # Auto-focus on need-input
FOCUS_ON_DONE=true # Auto-focus on doneSend browser page context to Claude Code via the daemon.
| Endpoint | Method | Description |
|---|---|---|
/context |
POST | Send page context from extension ({url, title, content, selectedText?, strategy?}) |
/context |
GET | Drain context queue (consumed by Claude Code hook) |
Events broadcast by kitchen via ws://127.0.0.1:41593/ws.
type DaemonEvent =
| { type: 'task.started', taskId: string, repoId: string, startedAt: number, prompt?: string, hasImage?: boolean }
| { type: 'task.log', taskId: string, level: string, message: string }
| { type: 'task.need_input', taskId: string, question: string, choices: {id: string, label: string}[] }
| { type: 'task.done', taskId: string, summary: string, meta?: { changedFiles?: number, tests?: 'passed' | 'failed' | 'not_run' } }
| { type: 'task.error', taskId: string, message: string, details?: string }
| { type: 'task.progress', taskId: string, current: number, total: number, label?: string }Kitchen (daemon) may not be running:
# Open the kitchen
pnpm dev:daemon- Reload extension at
chrome://extensions - Restart Chrome
# Remove node_modules and reinstall
rm -rf node_modules extension/node_modules daemon/node_modules
pnpm install
pnpm build# Kitchen (hot reload)
pnpm dev:daemon
# After extension changes, manually reload
# Click the π button on Sushi Focus at chrome://extensionssushi_focus/
βββ extension/ # Chrome Extension (MV3) - Sushi Counter
β βββ src/
β β βββ background/ # Service Worker (Kitchen Manager)
β β βββ sidepanel/ # Dashboard (Counter Seat)
β β βββ popup/ # Service Style Selector
β β βββ options/ # House Rules (Settings UI)
β β βββ shared/ # Shared type definitions & components
β β βββ i18n/ # Internationalization (en/ja)
β β βββ theme/ # Theme system (dark/light)
β β βββ utils/ # Utilities (pageCapture, etc.)
β βββ dist/ # Build output
βββ daemon/ # Local server (Itamae/Kitchen)
β βββ src/
β βββ server/ # Express + WebSocket
β βββ task/ # Order management
β βββ utils/ # Auth & validation utilities
βββ claude-plugin/ # Claude Code plugin (auto-start daemon)
βββ scripts/ # Integration scripts
β βββ sushi-focus-notify.sh # Order notification script
β βββ focus-ide.sh # IDE focus script (macOS)
β βββ claude-code-hooks.json # Claude Code hooks example
βββ package.json # Workspace config
See CONTRIBUTING.md for development guidelines.
MIT
γΈγγγγ£γγγοΌ π£
