Now with secure remote controlv0.0.3

A space for every
coding agent

Accounts, folders, terminals, each space keeps its own. Control them from anywhere.

MIT licensedmacOS · Windows · LinuxLocal-first
soromi · personal · ~/work/soromi
Sosoromi
Files
protocol
schema.prisma
events.ts
index.ts
gui
README.md
personal
api-refactor
Claude Code · Opus 4.8 · ~/work/soromi
Traced the flaky checkout test to a race in the payment mock; it resolved before the webhook fired. Switched to a deterministic clock and awaited the settled event: vi.useFakeTimers() await clock.tickAsync(1500) // let the webhook land expect(order.status).toBe('paid') Green across 3 runs. Apply the same pattern to the refund tests, or open the PR?
high · /effort
▶▶ accept edits on (shift+tab to cycle) · ← for agents
Usage58%52%
⧉ main·Connected
Real terminals. Real agents. One window that stays out of your way.
Runs your favorite coding agents
Claude Code
Codex
Grok Build
Geminisoon
Everything in one place

Your projects, agents, and accounts, sorted.

Point Soromi at a folder and it becomes a workspace. Switch between them like Slack workspaces.

A workspace for every project
Jump between projects instantly. Each keeps its own repos, tabs, and account, so nothing bleeds across.
Sosoromi
Active
Apapi-refactor
Running
Dodocs-site
Finished
♾️
Terminals that stay alive
Close the window and your agents keep working. Reopen and pick up exactly where you left off. The daemon owns the session.
WkPeCl
Keep your accounts separate
Give each agent its own login (work, personal, client) so they never mix.
Focus on the folders you choose
Scope each agent to the repos that matter.
Skills at a click
Drop a command or skill straight into the terminal.
Know when it needs you
A sound and a nudge when an agent finishes or asks.
Remote control · new

Your agents keep working.
Check in from anywhere.

Open Soromi from your phone's browser and get the same live session: watch the output, type into it, run a skill, answer prompts with a tap. Control hands off cleanly between devices, so no two ever fight over the same terminal.

End-to-end encrypted. Frames are sealed with XChaCha20-Poly1305; the relay only forwards ciphertext.
No open ports. The daemon dials out, so nothing on your machine is exposed to the internet.
Per-device keys, revocable. Pair by QR; each device gets its own key. Revoke any one, anytime.
Self-hostable. Point the relay at your own infrastructure from Settings, no rebuild.
Sosoromi
live
Claude Code · Opus 4.8
Traced the flaky checkout test to a race in the payment mock. Fixed with a deterministic clock:
await clock.tickAsync(1500) expect(order.status).toBe('paid')
✓ Green across 3 runs
Open the PR?
▶▶ accept edits on · ← agents
esctab^C
TerminalFilesSkillsAgents
Scan to pair
End-to-end encrypted
Providers

Bring your own agent.

A provider is any coding-agent CLI Soromi can run, isolate per account, and listen to. Adding one is a folder plus a registry entry.

Provider
Accounts
Event cues
Folder scope
Skills
Claude Code
CLAUDE_CONFIG_DIR
hooks
--add-dir
cmds + skills
Codex
CODEX_HOME
done + hook
first folder
prompts
Grok Build
GROK_HOME
Stop hook
first folder
prompts
How it works

The daemon is the product. Every UI is a viewport.

One Rust daemon owns all state. Your desktop app and your phone are the same client, just a different transport.

🖥️
Desktop app
Tauri · local socket
📱
Web / phone
PWA · E2EE relay
Sole state authority
Soromi daemon · Rust
PTYs · workspaces · accounts · file tree · status · hooks · one WebSocket protocol
Claude Code
Codex
Grok Build
Gemini

Get Soromi

Free and open source. Grab the latest build for your platform.

Why I built it

“I was tired of juggling a separate editor window for every project and wrestling my agents into the right context. I just wanted one place, the folders, the skills, and the terminal together, that stays small and gets out of the way.”

J
Juan
Creator of Soromi