AI OS
Connecting to hub…
AI OS
Your agents, tools, and work—one command center.
Your command center for the entire AI OS.
Monitor, manage, and customize your AI team in one place.
Your AI team is ready. What would you like to do?
Tap any card above to jump straight to that section. On a phone, the sidebar button at the top left opens the same list.
Group related chats into projects, share them with other people, and tidy them up. Administrators can also scope folders and capabilities.
loading...
loading...
Assign the right engine to each job.
loading...
loading...
Local models run on the MSI GPU, stay private, and should remain warm until you switch or unload them.
A free OpenCode cloud model for when Claude/Codex usage runs out. Free-tier only, by design — this picker only ever offers models confirmed at $0.
A free OpenRouter model with real governed tool access. This list is fetched live from OpenRouter's own pricing API and filtered to models currently confirmed free AND tool-calling capable — not a hand-maintained list, since the free lineup genuinely rotates.
Manage what agents can call.
Home Assistant, cameras, network, NAS, Docker, files, shell, and git.
Connectors not yet enabled, with what each one needs. Credentials for these live in root-owned files on the host (/etc/agent-hub/) that the hub process itself can't write to by design -- SSH in to set them up, then come back here and tap Enable.
Reusable routines for health checks, repairs, summaries, and project work.
Code extensions with sandbox ceilings and per-version grants.
Tiers over read-only need a per-plugin grant tied to the SHA-256 of skill.mjs.
Recurring work, parallel runs, and recovery.
Defaults used by the message composer. Thread-wide defaults come next, once this path settles.
Launch a one-off board review. Pick no engines for local role Council, or pick engines for Council v2. Presets fill members, chair, rebuttal, and parallelism — you can still override.
Simulates messages, tool events, approvals, and completion without an AI model. Applies to this device only.
Plan is think-only. Assign still runs from the open thread until the next slice. Routing lives on each card.
Title required. Elaborate is optional. Project / thread / agent are set on the item after it lands.
Idea intake through publication, gated at every methodological checkpoint. AI drafts and runs the mechanical work between checkpoints; you lock the scientific decisions.
Control mutation policy and verify consequential actions.
When ON, Claude (only Claude, only in YOUR threads) skips all command checks, including the always-refused list, on this tower and the NAS. Other engines and other users are not affected. Applies to the very next command. Every risky command it runs this way is logged.
Some tools (raw HA config file writes, HA automation/script/scene/area/helper deletes, NAS checkpoint restore/delete…) always ask for approval regardless of the mode above, since they can silently corrupt config or delete something with no undo. List a tool's name here to stop it asking — it then follows the mode above like any other tool.
Always refused (unless Claude unrestricted is on, and then only for Claude): deleting /, your home, the hub repo/data or NAS roots, mkfs, fork bombs, power-off, curl | sh, force-push to main/master/develop/trunk. Cleaning /tmp, node_modules, build and scratch folders is allowed.
Every device that's ever paired with this hub. A real device (phone, browser) is protected the moment it pairs — revoking one takes two deliberate steps (unprotect, then revoke) so no cleanup command or raw SQL statement can wipe them out by accident.
Observer, usage, and runtime signals.
Read-only report over your Claude and Codex session files on this tower: where tokens go and what looks wasteful. It shows totals and file names only, never message text. Numbers are tokens (you pay by subscription, so there is no dollar figure).
Keeps the shared handover small: old PROJECT_STATE entries and logs are moved (never deleted) into archive/ with an index, after a backup and a check that nothing was lost.
Weekly, very large tool outputs older than 7 days are cut to their start and end. Every event row, tool name and result status is kept, and nothing you can search or ask the AI about changes. It runs on its own; no backup is taken after the one-time first run.
Reload just refreshes this browser tab. Restart and Rebuild take the hub offline for a few seconds while it comes back up.
Checks the hub's own build for a newer version of the Agent Hub app and installs it in place.
Lets the hub control this phone (chat, live voice, alerts, scheduled tasks): tools, notifications, calls, messages, screen. It uses your normal login. Turn it off to disconnect the phone from the hub.
Native phone actions for this app, moved here from an Android popup that couldn't render reliably.
Runs git directly in the hub's own working copy, as the hub's own OS user (separate from whatever an agent's thread has staged) — limited to status/diff/log/commit; anything riskier (reset, checkout, stash) stays API-only, not a button here.
Git state, build freshness, and disk space. Each finding can be handed to Claude Command Center as a real turn — nothing here acts on its own.
Flags stuck or thrashing runs without blocking them.
Post-turn Observe reports for a thread. Separate from the flag-only activity watcher above.
Read-only last line from the MSI/NAS heartbeat log. Does not declare the freeze fixed or power-cycle anything.
Open a thread to load the last heartbeat.
Where an agent's own test/smoke/debug scratch threads land instead of Default — safe to clear any time.
Nothing here right now.
Keep the AIOS controls readable across phone and desktop.
Uses the same theme setting as the drawer button.
Colors your CSS theme, not a fixed palette — the same color shows on this engine's message accent bar, its dot in Council/Agents, and everywhere else it appears.
Enter sends the message; Shift+Enter starts a new line.
Turn off if the settings redesign already covers navigation and you don't want a second bar taking up screen space.
How code files are shown in the right-hand file panel. Highlight is fast and light; VS Code loads a full read-only editor the first time you use it.
Density is currently automatic. Manual compact/comfortable modes should be a backend setting later.
Your profile, how much you have used Agent Hub, and the devices signed in to your account.
Turn on push alerts for this device, and find the health checks, briefings and scheduled runs that land here instead of your project chats.
Nothing here yet — recurring skills and schedules will show up as they run.
Get a push alert on this phone or browser when a chat needs approval, finishes, fails, or hits a limit. Each device is enabled separately.
A thread is removed once EITHER limit is hit, whichever comes first.
Three ways a chatgpt-web / claude-web thread can get answered: automatically (drives your own logged-in browser), manually (you paste the reply), or skipped straight to a real engine.
Auto mode falls back to the paste-it-yourself card automatically if the automated attempt fails — a turn never gets stuck either way.
Use a separate claude.ai account from the one signed into Claude Code — chat.claude.ai and Claude Code draw from the same subscription, so a shared account means no real saving.
Shared by both ChatGPT and Claude web chat's auto mode — the most tool calls the agenthub-tool fence loop takes in a row before it stops and returns whatever it has, so a confused loop can't run forever.
When you tap Skip on the paste-a-reply card, the hub hands your message to one of these four instead. Codex and Claude are the same paid tools you already know. Here's exactly what "Local agent" and "Zen" do, one step at a time:
When the top account in this list hits a usage limit mid-conversation, the hub automatically retries on the next one — same thread, same memory, nothing lost. Any account can be first, including a non-primary one — reorder any time or tap "Set default" on a row.
Off: the turn just fails and tells you instead of spending a different account's quota without asking. The account picked here (manually or by a switch) survives hub restarts.
Checks five-hour and weekly usage. Unknown or stale readings are labelled. Smart selection prefers confirmed available accounts, then the earliest reset; known blocked accounts are skipped.
During recent real usage, sends one small prompt to an idle backup only when both quota windows are freshly checked and available. Warm-up uses a small amount of quota and is marked confirmed only after a new five-hour window is observed. Window start times in history are estimates derived from reported resets.
"Make active"/reorder above already force-switches every live session automatically. This button is the manual lever for the rare case one didn't catch — e.g. it was mid-turn at the exact moment of an earlier switch — or before this page's own view has refreshed. Switching a session that's actively replying ends that reply early (safely — the next message on it continues via --resume, same account).
This needs one step in a real terminal on the hub box first — the token can't be generated from here.
claude setup-token — a plain, unredirected command (redirecting its output to a file captures the wrong thing; it's an interactive screen, not plain text).Add a name and a real login secret here once. From then on, any agent can reference it by name in browser.fillCredential to fill a login form — the plaintext is resolved and typed server-side and never enters the agent's own context, tool result, or the audit log. Only the name you pick ever appears anywhere else.
The password is written to disk (mode 600) and never shown again after saving. Title/username/site are just labels for this list -- reference the entry by its internal name (auto-derived from the title, or set below) in browser.fillCredential.
Not secrets — real-world facts (e.g. a professional registration number) an agent found once via the document library and you approved. Shown in plain text here on purpose, and reusable directly with browser.fillKnownValue.
Saved by an agent via browser.routines.start/stop/save after demonstrating a workflow once -- e.g. a recurring login-and-navigate sequence. Tap a routine to see its recorded steps; running one happens in a chat, not here, so it goes through the same per-step approval as any other browser action.
Dollar figures are reference cost at standard API rates, computed from real token counts — not an actual charge under a flat-rate subscription (Claude, Codex, Grok). Useful for comparing relative expense between queries/sessions, not as a bill. Quota-window status everywhere (green ok, orange near the limit, red blocked). Tap an account below to make it active right now.
An alert is a push notification only, once per threshold crossed each month — nothing is ever blocked or throttled automatically.
Codex and Claude are the only engines with an active subscription-quota check; this is how often it runs, even when the app is closed. Set 0 for manual checks only (use each engine's own Refresh button above).
Room-based satellites, and easy onboarding of any device/entity for voice control — no code changes needed.
Matched device commands ("turn on the kitchen lights") always run on the deterministic router — no model, no delay. This only picks what answers anything else, like a trivia or open-ended question.
Tried in this order — the first one that answers wins, the rest are automatic fallback. Use the arrows to reorder.
Matched commands ("turn on the kitchen lights") never touch a model — but Home Assistant itself can take ~700ms to confirm a Zigbee device over the mesh, while WiFi/local devices confirm in well under 100ms. This only changes when we say "Done" relative to that confirmation.
Locking/unlocking a door always waits for real confirmation regardless of this setting.
"Lock/unlock the front door", "unlock the garden door" — household use, no PIN by default. Locking never requires a PIN; you can require one for unlocking only.
"Send a text to my wife saying I love her", "call my wife" — these are real, irreversible actions a misheard word shouldn't be able to fire on its own.
Off fires immediately, same as every other voice command.
Type things like "turn on the torch" or "call X" directly in a chat session (not just by voice) — useful from anywhere on the tailnet. Off by default: an engineering thread that talks about phone tools constantly is the worst case for false triggers, so turn this on only for sessions where you actually want it.
Physical Voice PE satellites. Assign or change a device's room any time — takes effect immediately, no redeploy.
Pick a category to load real entities live from Home Assistant, then onboard the ones you want voice-controllable — assign a room and any custom names ("big light", "the samsung").
Keep chats portable across Codex, Claude, and local agents.
Context windows — local – tokens · remote – tokens. A request that doesn’t fit is refused, never silently trimmed.
Open a chat to see and edit its memory.
Open a chat to inspect its latest handoff package.
A local model summarizes the outgoing context, told to keep every fact, file path, error, and decision. Only affects the copy handed to the next engine on a cross-agent switch — nothing stored is ever touched.
Private. Everything is shown plainly: tap or long-press any value to copy it. Ask the chat to “email Zaid” or “text my wife” and it uses this sheet.
Deterministic repo health. LOC is informational. Nothing here deletes code.
Open this panel to load the last scan.