Getting it into your agent
One page per mod, every tool's command on it. A separate URL per tool would split the same page into five that compete with each other.
npx skills add obto-inc/platform --skill obto-build-loopgit clone --depth 1 https://github.com/obto-inc/platformWrote this? Show the measurements
A badge with what this costs and how it scanned, read live from this page, so it follows the numbers instead of freezing them. Markdown for a README, HTML for a documentation site or a project page.
[](https://agentmods.dev/skills/obto-inc/platform/obto-build-loop)<a href="https://agentmods.dev/skills/obto-inc/platform/obto-build-loop"><img src="https://agentmods.dev/badge/skills/obto-inc/platform/obto-build-loop.svg" alt="Measured on agentmods" height="20"></a>What it costs to keep this loaded
Counted locally with the o200k_base tokenizer, which is exact for GPT models; Claude uses its own tokenizer and its counts differ. Treat this as one consistent yardstick across the catalogue rather than a bill. Prices are per million input tokens.
| Model | Per session | Once invoked |
|---|---|---|
| Fable 5.1 | $0.00083 | $0.03328 |
| Opus 5 | $0.00042 | $0.01664 |
| Sonnet 5 | $0.00017 | $0.00666 |
| Haiku 4.5 | $0.00008 | $0.00333 |
Grade A, and why
obto-build-loop scanned grade A with 1 finding against 26 rules in 11 categories — prompt injection, anti-refusal, data exfiltration, privilege escalation, supply chain, agent snooping, system-prompt leakage, SSRF and excessive agency — measured 2d ago.
A static scan of the body, not an audit. Every finding is printed with the line that produced it so you can judge whether it matters here. A mod is markdown that instructs an agent; that is exactly why what it instructs is worth reading.
Makes network callslowCapability
Not a fault in itself. Listed so you know the mod talks to something, and to what.
- `fetch(id)` — read a WHOLE artifact. Right for small/medium files; avoid on large modules — it can flood your context. How it starts
The opening of the file, as written. The whole thing — 80 lines — stays where its author put it; the contents beside it link to each section on GitHub.
OBTO App Build Loop
Before anything else
- Call
obto_whoamifirst in every new conversation. Read the user'sdomain, super-user status,operatorIdentityflag, andavailableResourcesfrom the response. - The server is stateless (3.3.0+ contract): there is no session-level active app. Pass
appNameANDdomainexplicitly on every app-scoped tool call. Never assume a "current app" — if the user hasn't named one, ask, or discover withobto_list_all_apps/obto_find_app_by_name. (obto_set_active_app/obto_reset_domain/obto_create_appare RETIRED — do not call them.) - Operator identities (3.5.2): if whoami returns
operatorIdentity: true, the home domain is the platform-operations domain — do NOT build user apps there. Ask the human which tenant domain to target.obto_scaffold_apprefuses operator domains without an explicitconfirmOperatorDomain: true(super-user only, logged). - Cross-tenant addressing (3.5.26): whoami's
domainis only the connection vhost's default. Super-users (crossTenantEnabled: true) may pass ANY active tenant's domain per call — whoami also returnsidentityDomain(the identity's own tenant) and atenantDomainsregistry summary (count + slugs) for discovery. Confirm a named tenant's slug againsttenantDomainsbefore writing; an unknown slug is refused withunknown_domain+didYouMean(typo guard). Regular users are pinned to their own domain (cross_tenant_not_allowed). - Read
obto://guide/quickstartfrom the server's resources before the first deployment. The server-served guides are the source of truth — prefer them over assumptions. Scan theavailableResourcesdirectory whoami returns and load the ones whosewhenToReadfits the task — e.g.obto://guide/blueprintsbefore writing code for a collection type, andobto://guide/public-app-baselinebefore claiming an app is done.
The build loop
Work in this order; do not skip steps:
- Contract first. Write a one-paragraph build contract: (1) what the app does, (2) the FIRST vertical slice to ship, (3) what "done" means for that slice. Confirm with the user if scope is unclear — never invent scope. As of 3.5.2 this is the
buildContractparameterobto_scaffold_apprequires (missing →missing_build_contractrefusal with a teaching hint); it is stored on the application record. - Scaffold. Use
obto_scaffold_appfor new apps (creates record + working skeleton in one call), passingbuildContractandkind:'public'for a browser web app (index page + App.tsx + App.css, ESM imports + relative./paths) or'native'for an OBTO shell component (ui_template + policy_client + script_client, window-global libs +return ComponentName;). The skeleton passesobto_validate_appimmediately and writes each artifact to its correct collection. The response includes structurednextSteps— follow them in order. - One vertical slice. Ship a single end-to-end path (one page, one route, one script) and verify it works before expanding. Anything beyond the contract's slice is a NEW slice the human approves — not a silent addition.
- Verify after every write. After each
obto_upsert_record/ route change, read the artifact back (fetchby id<collection>::<app>::<domain>::<name>, orobto_grep_artifactfor a slice of a large one) and confirm the content landed. Never claim a write succeeded without reading it back. For a code-bearing script,obto_validate_scriptalso runs by reference — omitscriptand name the stored artifact — so you can validate exactly what the platform stored, not what you meant to send. (Known false-fire: apltf_script_servermodule containing ESM syntax fails by-reference validation at line 1; that one signature is benign.) - Smoke gate before "done" — verify semantically, on the surface a real visitor uses. A preview URL proves only that the preview infra responded, and HTTP 200 proves nothing at all: OBTO's own "Site Missing" / "domain was not found" shells are served with status 200, so a status-only check certifies broken apps as working. "Done" means all of:
obto_validate_appreturns no errors.- Every public API route called via
obto_invoke_routereturns the expected status, content type, and JSON shape. An HTML 200 on an/api/...route is a failure, never a response; so is a non-200, a 524/timeout, or a degraded-mode UI fallback. - The receipt says WHICH surface answered.
connectVia:'canonical'means the real canonical host served it; atenant_ingress_semantic_fallback(withcanonicalAttempt+layerVerdict) means the canonical host served a platform shell and the tool fell back — that is a finding to report, not a pass. Fallback success is not canonical success. - For a published app,
obto_get_build_statusshowspublish.status: 'published'with its per-surfaceverifyevidence, and you have READ anycaveats(a publish can be genuinely published and still carry a known platform degradation). pltf_log(viaobto_db_query) shows no runtime errors.- Where headless Chromium is provisioned,
obto_capture_previewconfirms the UI renders with cleanconsole/pageErrors/failedRequests. - Best proof of all: exercise one real user action end to end and confirm it persisted (submit/vote/save, then read the record back through the app's own API).
What this file has done since we first saw it
Hashed on every crawl. A supply-chain change to an agent config is a question of when, not whether, so the history is kept rather than the latest state alone.
- 2d ago Changed · +9 lines 3cc76a98689b
- 6d ago First seen · 71 lines · 83 tokens per session scan A 3b1a76f3889b
obto-build-loop is a skill published in the GitHub repository obto-inc/platform (1 stars, last pushed 3d ago), licensed Apache-2.0. It adds 83 tokens to every session and 3,328 once invoked, about $0.0004 per session on Opus 5. A static security scan graded it A with 1 finding (makes network calls). No closer match exists in the catalogue, so it is treated as the original; first seen 2026-08-31.
Other skills, from other repositories
canvas-design
Create beautiful visual art in .png and .pdf documents using design philosophy. You should use this skill when the user asks to create a poster, piece of art, design, or other static piece. Create original visual designs, never copying existing artists' work to avoid copyright violations.
debug-optimize-lcp
Guides debugging and optimizing Largest Contentful Paint (LCP) using Chrome DevTools MCP tools. Use this skill whenever the user asks about LCP performance, slow page loads, Core Web Vitals optimization, or wants to understand why their page's main content takes too long to appear. Also use when the user mentions…
specflow-use
To connect Rosetta with Grid Dynamics SpecFlow MCP; only when SpecFlow is mentioned and the MCP is installed.
ue-mcp-epic-routing
Use when deciding between ue-mcp's native category actions and Epic's wrapped ToolsetRegistry tools (the epic actions, incl. the Blueprint graph DSL) for a task in Unreal. Pulls in when authoring Blueprint graph bodies, or any time both a native action and an epic action could do the job and you need to pick.
mcp-google-map-project
Project knowledge for developing and maintaining @cablate/mcp-google-map. Architecture, Google Maps API guide, GIS domain knowledge, and design decisions. Read this skill to onboard onto the project or make informed development decisions.
frontmcp-setup
Use when starting, scaffolding, or organizing a FrontMCP project. Covers creating a new project (CLI scaffold or manual) for Node, Vercel, and other targets; standalone versus Nx-monorepo layout, naming conventions, generators, and dependency rules; composing multiple @App classes, ESM packages, and remote MCP servers…