Developers

Teaching an AI app something new usually costs you a fork. You write against a plugin API that changes under you, wait on a release you do not control, or maintain a patched copy of somebody else's application forever.

In gOS, capability is data. An atom is a folder with a manifest, a flow is a graph over atoms, and a run is that graph executed under an envelope.

Extending the system means adding files the runtime can find, not forking the app.

Registry / Atoms213 packages, each a folderholding one atom.jsona2ui76tool62compute27model16skill12provider11workflow8file1213 in the registry todayflow.jsonnewos.flow.v3bindtoolmodeloutputthe same manifest declareswhere intent may come from · the tool and skill allowlistthe paths it may read and write · the call ceilingthe engine that runs it · how it appears in the catalogits surface: chat, inline, sidecar, or its own windowflow.<id>.invoke: publishing a flow also publishes a tool the Sim can pick
213 atom packages on the left, one flow manifest on the right. The manifest names the atoms, the bindings, and the powers the run is allowed.

01

Atoms are the units of capability.

The registry holds 213 atom packages, each a directory with a single atom.json describing what it is, what it takes and what it returns. Seventy-six draw interface, sixty-two are tools, twenty-seven are compute steps, sixteen are runtime profiles, twelve are skills, eleven are providers, eight are workflows. The Sim searches that registry to work out what it is able to do at all.

atom.tool.image-generate@1/atom.json"kind": "tool""title": "Generate image""capabilities": [ … ]"inputs" / "outputs": typedone folder, one manifest, no registration stephow the Sim finds itthe registry is indexed by kind,capability, category and relationthe Sim searches that index to workout what it is able to do at all.An atom nobody can find does not existAdding capability is adding files the runtime can find, not forking the app.
A folder and a manifest. Discoverability is the whole point, because an atom nobody can find does not exist.
  • One folder, one manifest.
  • Typed inputs and typed outputs.
  • Discoverable before it is callable.

02

A flow is a manifest, not a script.

flow.json declares the graph and the rules around it: where intent may come from, which tools and skills are allowed, which paths may be read or written, how many tool calls a single run may make, which engine executes it, and how it appears in the catalog: display name, category, launch surface, slash command. Change the manifest and you change the flow's powers. There is nowhere else to hide them.

intent.sourceshuman, flow: where a run may be started fromprocess.toolAllowlistthe only tools this flow may callpermissions.filesystemread and write scopes, as globsmax_tool_calls_per_runthe ceiling a runaway loop hitsruntime.enginewhat executes it, and on which profilecatalogdisplay name, category, launch surface, slash commandChange the manifest and you change the flow's powers. There is nowhere else those powers are kept.
Every power a flow has is one of these fields. There is no second place to look.
  • Permissions are fields.
  • Call ceilings are fields.
  • Presentation is a field.

03

Publishing a flow publishes a tool.

Every flow is addressable as a generated tool, so the Sim can call it in the middle of another job exactly the way it calls a primitive. That is what makes this compound rather than a folder of scripts: today's flow is tomorrow's single step.

a flow you published/reel-machinebecomes a toolflow.reel-machine.invokethe Sim can call itmid-job, like a primitiveso tomorrow's flow can contain today's flow as one stepThis is what makes the system compound rather than accumulate: the catalogue does not just getlonger, the individual steps get larger.
The loop is the point: today's whole flow is tomorrow's single step.
  • A flow is callable by the agent.
  • Composition beats configuration.
  • Yesterday's workflow becomes one node.

04

Flows draw real interfaces.

Seventy-six interface components ship as atoms: tables, charts, forms, dropzones, media timelines, code editors, comparison sliders. A flow can render a surface instead of returning a wall of text. A flow can take the chat, an inline slot inside it, a sidecar panel beside it, or a window of its own.

tablechartformtimelineeditordropzonecompareSeventy-six of these ship as atoms, so a flow renders a surface instead of returning a wall of text.chatinline in the threadinline slota panel in the threadsidecarbeside it, staying openown windowwhen the job needs roomA flow picks its surface in the manifest, so the same capability can be a one-liner or a whole app.
Seventy-six components, four surfaces, and the choice is a line in the manifest.
  • Structured input when language is not enough.
  • Render the output in its right shape.
  • Keep the person inside the loop.

05

Providers are manifests too.

A provider is a folder declaring an endpoint, its authentication, the shape of the request and the shape of the response. Adding one is a manifest plus the smallest adapter the difference genuinely requires. No new client class per vendor, and no vendor names leaking into what the user reads.

atom.provider.<id>@1/atom.jsonendpointauthrequest.body_templateresponse.shaperesponse.error_mapperone transport, many providersthe same client speaks all of them,because the differences are declaredrather than implementedadding one is a manifest plus thesmallest adapter it truly needsNo new client class per vendor, and no vendor names in anything the person using gOS reads.
The differences between providers are declared. Only the genuinely irreducible part is code.
  • Transport is declared, not re-implemented.
  • Credentials resolve through one path.
  • Routing improves as the registry grows.

06

One loop underneath all of it.

Observe, atomize, plan, close, run, commit, project, learn. Many surfaces enter at the top and many views project from the bottom, but everything narrows through typed runtime work over durable state. Close is the admission gate in the middle. That is the point where a plan either becomes a run or does not.

observeatomizeplancloseruncommitprojectlearnclose is the gate: a plan becomes a Run, or it does not
The loop every surface in gOS narrows through.
  • Many entrances, one waist.
  • Close is where admission happens.
  • Learning re-enters as evidence, not as truth.

Write one atom. The registry is how it gets found, and a flow is how it gets used.