app
Adom Bridge
Public Made by Adomby adom
Adom Bridge unleashes your AI onto your full PC: full power, full safety. The AI breaks out of the container it runs in and onto your real machine, managing and running your entire laptop as you: launch apps, move files, drive any window, control KiCad, Fusion 360 or your real signed-in browser. Works with any AI, cloud or local (Claude Desktop, Claude Code, Codex), no Hydrogen required. Bridge and its bridges are an operating system for AI, with managed Node and Python runtimes, and a human-onl
← Commit history
Sub-readme: caller identity (which AI thread is driving your machine)
1 file changed
+115
docs/caller-identity.mdadded+115@@ -0,0 +1,115 @@+# Caller identity: knowing which AI tab is driving your machine++If you use Adom Desktop the way most people do, you have something like twenty AI+conversation tabs open at once, all pointed at the same PC. One is fetching parts, one is+reviewing a board, one is cleaning up a downloads folder, and several are idle.++Until now they all looked the same. An approval toast said an AI wanted to run a shell+command, and the Activity Log was one undifferentiated stream. If a tab went off the+rails, there was no way to tell which one.++As of v1.9.180, every command that reaches your desktop over the relay has to say who is+asking.++## What you get++Two pieces of information now ride along with every relayed command:++- **Thread name**: the name of the AI conversation, for example "chip-fetcher tab 3".+- **Container name**: which cloud container it is running in, for example "galliaApril".++Alongside those, gated commands (the ones that ask your permission) also carry a+**reason**: a one-line, plain-language explanation of why the AI wants to do this+particular thing. Identity is set once per conversation. The reason is written fresh for+every single call.++## In the Activity Log++Every command line in the Activity Log now names its source:++```+thread "chip-fetcher tab 3" in galliaApril — reason: checking whether the gerber zip finished downloading+```++Scanning the log tells you at a glance which conversation has been busy, and what it+thought it was doing.++## In the approval toast++Windows notifications have a dedicated attribution slot: a separated, greyed line under+the main content. Adom Desktop puts the thread and container there, so the toast reads+roughly like this:++```+ Adom Desktop: approval needed++ run_script wants to run a bash script.+ The AI says: checking whether the gerber zip finished downloading++ chip-fetcher tab 3 · galliaApril+ ────────────────────────────────────+ [ Approve 1 hr ] [ Approve 24 hr ] [ Deny ]+```++So before you click anything, you can see three things: what is being asked, why the AI+says it needs it, and which of your tabs is asking. The same information appears in the+in-window approval dialog if you prefer to grant permission there.++Toasts sent by an AI through `notify_user` pick up the same attribution automatically,+so a notification from a background thread is labelled without the AI doing anything+extra.++## The honest caveat: thread names are self-reported++This is worth understanding clearly.++The **thread name is chosen by the AI itself**. Adom Desktop records it and displays it,+but it cannot verify it. It is a label, not a credential. Nothing in the system grants+or denies permission based on a thread name, and you should not treat one as proof of+anything.++The **container name is different**. Adom Desktop knows the verified container from the+authenticated relay connection, independently of anything the AI claims. When the+self-reported container and the verified one disagree, both are shown so the discrepancy+is visible rather than silently resolved.++The short version: caller identity is for **visibility**, not security. Your actual+security boundary is the transport itself (an authenticated relay connection, plus the+permission prompts you answer). Self-reported is fine for the job it does: these are your+own tabs in your own containers, and the problem being solved is telling them apart.++## Bridges can use it too++Adom Desktop passes the caller information along to bridges (the components that drive+KiCad, Fusion, a browser, and so on) with every request it relays. A bridge can use that+to log activity per thread, to label a window it opens with the conversation that owns+it, or to arbitrate when two threads want the same resource at the same time.++So over time you should expect the "which tab did this?" answer to show up in more+places than just the Activity Log and the toast.++## One place it changes behaviour++Killing a bridge affects every conversation using it, so it now gets a small guard. If+other threads have been active in the last five minutes, the first attempt to kill a+bridge is refused, and the refusal **names those threads**. The AI has to explicitly+confirm before proceeding.++This is not a permission prompt for you. It is a speed bump for the AI, so that a tab+does not casually restart a bridge that another one of your conversations is in the+middle of using.++## What an AI has to do++Nothing you need to manage, but useful to recognise if you are reading along.++A conversation names itself once at the start of a session, usually by setting an+environment variable, after which the identity is attached to every command+automatically. If it does not, the first relayed command is refused with a message+explaining exactly what to set. Local callers are exempt, because they are already+trusted by how they connect: Hydrogen Desktop, a bridge calling back into Adom Desktop,+and the command line tool running on your own machine.++The one thing worth doing yourself: if a thread names itself something unhelpful (a+random identifier, or just "agent"), tell it what you call that conversation. That name+is what you will read on every approval toast it sends you.