- Frames: a catalogue generated from
agentspecs/frames(agentspecs 0.0.12) βFRAME_CATALOGUE,getFrame,listFrames;get_frame,list_frames. A Frame is owned, scoped context (rules, terminology, goals, style, norms, process) with the Guards an output has to pass; it arrives resolved, with what it inherits throughextendsand itslineage. - Cogs: a catalogue generated from
agentspecs/cogsβCOG_CATALOGUE,getCog,listCogs,cogsUsing;get_cog,list_cogs,cogs_using. A Cog extends an agent spec and is equipped with Frames; itsspecis a completeAgentspec(the agent, the Cog's changes, the Frames' skills, tools and MCP servers, and their context on the system prompt), beside itsframes,lineageandguards. - Ops, Guards, Gates and Tracks: four catalogues generated from
agentspecs/ops,guards,gatesandtracks(agentspecs 0.0.14) bygenerate_ops.pyβOP_CATALOGUE,GUARD_CATALOGUE,GATE_CATALOGUE,TRACK_CATALOGUE, each withgetβ¦andlistβ¦. AGuardSpecextendsGuardrailSpec: a Guard arrives with the policy of the guardrail it extends, and adds its category, stages, check and signals. AnOpSpecarrives resolved, with its Cogs, its Guards by stage, its Gates and its Track in it. - Applications: a catalogue generated from
agentspecs/apps(agentspecs 0.0.15) bygenerate_apps.pyβAPP_CATALOGUE,getApp,listApps;get_app,list_apps. AnAppSpecis the Appspec: an agent with an interface, rules, tests, a record and a deployment β a chat, a widget, a decision or a worker β with its face (emoji) and itspermissions. It arrives with its layout and with what it names that is not enabled (setup). - Action classes: what every tool does to the world β
TOOL_ACTIONS,SERVER_ACTIONS(read, write, send, buy, delete, publish;conditionswhere a tool's effect depends on what it is asked). A tool nobody classed is unknown, and unknown is the most restricted. - Rules: what an application does when its agent calls a tool β
agent_runtimes.loop.apps(behaviour_for,classes_of,tool_behaviours,tool_escalations) and, in TypeScript,behaviourFor,classesOf,toolBehaviours,toolEscalations. One ofdo_it,if_asked,ask_first,leave_to_me; with no rule, reading is done and anything that acts waits for a person.APP_BEHAVIOURSandAPP_ESCALATIONS, generated from agentspecs, are what both have to reproduce. Nothing calls them yet: this is the decision, not its enforcement. - The Appspec as a file:
parseAppspecreads a YAML or JSON document in the spec's own words into anAppSpec, tolerantly β a draft opens whole, with what is wrong said beside it β anddumpAppspecwrites it back, keys in one fixed order and nothing at its default, so that the same application always writes the same document.APP_SOURCES, generated from agentspecs, is what both have to give back. - The Appspec as a YAML file a person also edits:
readAppspecYamlreports what YAML itself refuses with its line, andwriteAppspecYaml(app, previous)writes an application into the file that is there β what did not change keeps its comments, its order and its quoting, an item of a list is followed by what identifies it, and a key that is new goes where the spec puts it. With no file to write into, the canonical document. Adds theyamldependency. decision_forsays why a tool call was decided as it was β the rule in its author's words, or the step that decided (not connected, left out by the connection, a read-only connection, an unclassed tool, the default) β with a sentence a person reads.behaviour_foris its behaviour.AppRulesCapability: an application's rules, enforced before every tool call β a pydantic-ai capability that does the reading, asks the person before what the rules say to ask about (through the tool-approval path), and refuses what is left to them, with the rule's own words. It decides a tool by its runtime name,call_toolon the tool it calls and its arguments, a catalogue tool by its id or method, and code (execute_code,run_skill_script) only when the application's shell is on, then on every tool the code names, for the worst each can do. Not attached to any agent yet.loop apps validate PATHβ¦: the instant checks of an Appspec, in a terminal and in CI β what the spec refuses and every reference that does not resolve (Not ready, exit 1), what the application can do with no rule of its own and what it reaches with its builder's account (Needs attention, exit 2 with--strict), and what it names that is not enabled.--jsonfor CI. Depends on agentspecs >= 0.0.16, whose checks it runs.- Applications on a runtime:
POST /api/v1/apps/configuremakes the runtime's agent the one an application runs β its agent or Cog, its model and instructions, only the MCP servers it connects to, and its rules enforced before every tool call in place of the default approvals; an application its builder's checks refuse is refused (422) with the same sentences.GET /api/v1/apps/currentnames it;POST /api/v1/apps/decidesays what it would do about a tool call without making it.CreateAgentRequest.app_speccarries the application throughconfigure-from-spec, which no longer turns a 422 into a 500. A Cog is found where an agent of the library is looked for. AppRendereranddefineAppPlugin: an application rendered in the LOOP workspace β its agent created with the application in its payload, its starters on the empty chat, the conversation alone for a chat.checkApp,checkAppspec: the instant checks of an application in the page β what the spec refuses, references that do not resolve, what it can do with no rule of its own, what is not enabled β in the wordsloop apps validateuses, with no model call.- Applications are Reactor plugins on the runtime too, as they are in the page: a
loop.appcontribution point (agent_runtimes.loop.apps.plugins), the catalogue contributed by agent-runtimes' own plugin, an application a runtime is configured with by a plugin of its own (loop-app-<id>, its manifest carrying its name and emoji), and its rules capability an extension of its contribution that another plugin can replace.GET /api/v1/appslists the applications a runtime knows;configure,currentanddecideread them from the registry. Depends ondatalayer_reactor's Python contribution points. AppRenderersays that an application run by a team cannot run in the page yet, instead of throwing, runs under the application's id, and keeps its plugin across renders.checkAppspecreports what the reader would otherwise replace with a default (an unknown behaviour, layout or access, aready_atoutside 0 to 1, an origin with a pathβ¦), counts a rule on a versioned tool as a rule on that tool, and says what is not enabled for every reference, as agentspecs'app_setupdoes.make specsgenerates both (generate_frames.py,generate_cogs.py), resolving them with theagentspecspackage of the clone it checked out, and checks outmainby default.
- UI plugins: what was called a UI extension. A catalogue generated from
agentspecs/ui-plugins(UI_PLUGIN_CATALOGUE,getUIPlugin,listUIPlugins;get_ui_plugin,list_ui_plugins); the agent field isuiPlugin/ui_plugin, anduiExtension/ui_extensionare still read by the Python model. The TypeScriptAgentspec.uiExtensionis renameduiPlugin. - Models: Cloudflare Workers AI and AI Gateway in the catalogue and as a direct provider;
route,contextWindow,zeroDataRetention,requestLogging,pricing,providerUrl,billingandaliaseson a model;AI_MODEL_ALIASES,getModel,isChatModel,listChatModels(get_model,is_chat_model,list_chat_models): a chat picker leaves the typed-judgment models out. - Model providers:
MODEL_PROVIDER_CATALOGUE,getModelProviderβ who serves a model, with its terms, privacy policy and data usage. - Specs regenerated from agentspecs 0.0.11: four agents enabled (
example-simple,worker-crawler,jupyter-notebook-compactor,example-one-trigger); of the Cloudflare models only Jev is available; the Tavily and Earthdata MCP servers enabled; eventsagent-output,agent-assignedandgeneric; thecsvandjsonoutputs and thecrawlskill enabled; a memory spec says whether it isenabled(mem0is). - Loop:
headerContainerrenders the header's controls in a host's own bar;data-loop-fullscreen-roottakes that bar into full screen.
- Requires code-sandboxes 1.10.0 (one subpackage per provider, no flat module paths); the identity docs import
EvalSandboxfromcode_sandboxes.