Best for
- Scaffold a new Aomi app from an OpenAPI spec or REST API
- Wrap an existing SDK as agent-callable Aomi tools
- Extend an Aomi runtime with new protocol integrations
aomi-labs/skills/aomi-build/SKILL.md
Scaffold new Aomi apps and plugins from API docs, OpenAPI/Swagger specs, or SDK references. aomi-build generates production-ready Rust SDK crates (lib.rs, client.rs, tool.rs) with tool schemas, preambles, host-interop flows, and validation — turning a vendor's API surface into AI-agent-callable tools. It covers the current `aomi-build` OpenAPI pipeline (`gen-specs` → `gen-client` → `gen-tool` → curate → compile/test) as well as greenfield apps. Use when the user wants to scaffold a new Aomi app
Decision brief
Scaffold new Aomi apps and plugins from API docs, OpenAPI/Swagger specs, or SDK references. aomi-build generates production-ready Rust SDK crates (lib.
Compatibility matrix
| Platform | Status | Evidence | What to check |
|---|---|---|---|
| Codex | Declared | Source record | Install path and trigger |
| Claude Code | Declared | Source record | Install path and trigger |
| Cursor | Declared | Source record | Install path and trigger |
| Gemini CLI | Not declared | No explicit evidence | Portability before use |
Installation
The source command is displayed only when detected. A safe inspection prompt is always available so your agent can explain every action before execution.
npx skills add https://github.com/aomi-labs/skills --skill "aomi-build"Inspect the Agent Skill "aomi-build" from https://github.com/aomi-labs/skills/blob/783b6debae3182aa4906fbbc301cb2a27510d0c9/aomi-build/SKILL.md at commit 783b6debae3182aa4906fbbc301cb2a27510d0c9. List every install step, command, network request, credential, file read/write, external action, and rollback step. Explain whether it fits my task. Do not install or execute anything until I approve.
Workflow
Review the “Quick Start” section in the pinned source before continuing.
1. Identify the integration target and its callable surface. 2. State the proposed toolset (3–8 intent-shaped tools) before coding. 3. Scaffold greenfield apps with aomi-build init ; scaffold OpenAPI-driven apps with aomi-build new-app or the staged gen-specs / gen-client / gen-…
1. Identify the product surface: - What external API, SDK, repo, or spec is the source of truth? - What concrete callable surface exists: REST, GraphQL, JSON-RPC, gRPC, webhook, CLI contract, or something else? - Is there a real target we can point the app at: hosted service, se…
Do not use this skill for executing transactions — use aomi-transact for that.
Rust toolchain (2024 edition) and cargo on PATH
Permission review
The documentation asks the agent to run terminal commands or scripts.
Current `aomi-build` binary, or run it from source with the `cli` featureThe documentation asks the agent to run terminal commands or scripts.
cargo run -p aomi-sdk --features cli --bin aomi-build -- init my-integrationThe documentation includes network, browsing, or remote request actions.
cargo run -p aomi-sdk --features cli --bin aomi-build -- new-app geckoterminal --from-url https://api.geckoterminal.com/docs/v2/swagger.jsonThe documentation asks the agent to create, modify, or delete local files.
Scaffold or update the Aomi app using the standard file split:Evidence record
| Signal | Value | Evidence type | Meaning |
|---|---|---|---|
| Quality score | 96/100 | Computed | Documentation, specificity, maintenance, and trust rules |
| Repository stars | 7 | Source | Repository attention, not individual Skill quality |
| Compatibility | 3 platforms | Source | Declared in the catalog source record |
| Usage guide | automated source guide | Editorial | Generated or reviewed according to the visible evidence level |
Pinned source
Aomi Build scaffolds production-ready Rust SDK crates for Aomi apps and plugins from
OpenAPI/Swagger specs, SDK docs, or product requirements. Generates lib.rs, client.rs,
tool.rs with typed tool schemas, host-interop flows, and validation steps.
Do not use this skill for executing transactions — use aomi-transact for that.
cargo on PATHgit on PATHaomi-sdk checkout at ../aomi-sdk (recommended)aomi-build binary, or run it from source with the cli featurecd ../aomi-sdk
cargo run -p aomi-sdk --features cli --bin aomi-build -- init my-integration
cargo run -p aomi-sdk --features cli --bin aomi-build -- compile --app my-integration
cargo run -p aomi-sdk --features cli --bin aomi-build -- new-app geckoterminal --from-url https://api.geckoterminal.com/docs/v2/swagger.json
aomi-build init <name>; scaffold OpenAPI-driven apps with aomi-build new-app <name> or the staged gen-specs / gen-client / gen-tool pipeline.client.rs (HTTP, auth, models), tool.rs (DynAomiTool impls), lib.rs (manifest + preamble).ToolReturn::with_routes(...) instead of bare JSON.aomi-build compile --app <name> or cargo run -p aomi-sdk --features cli --bin aomi-build -- compile --app <name>. For generated OpenAPI apps, also run aomi-build test-schema <name> when the live API is safe to fuzz.grep -r "dyn_aomi_app!" ../aomi-sdk/apps/
cargo run -p aomi-sdk --features cli --bin aomi-build -- compile --app binance
cargo test --manifest-path apps/my-integration/Cargo.toml
apps/<name>/ with lib.rs, client.rs, tool.rs, Cargo.toml.so/.dylib plugin artifact under target/| Error | Cause | Solution |
|---|---|---|
compile reports zero plugins | No tracked or discoverable apps/*/Cargo.toml | Check the app path and package name; current compile scans tracked manifests and the apps directory |
SDK version mismatch | Plugin built against old SDK | Bump version in Cargo.toml, rebuild all |
JsonSchema derive failed | Missing derive on Args | Add schemars dep, #[derive(JsonSchema)] on Args |
| Async tool hangs | is_canceled() not polled | Add cancellation check in run_async loop |
Installed aomi-build lacks deploy | Old binary on PATH | Run from source with cargo run -p aomi-sdk --features cli --bin aomi-build -- ... or reinstall from the current repo |
| Generated tool names are endpoint-shaped | gen-tool stubs one tool per operationId | Curate tool.rs into user-intent tools before shipping |
progenitor fails | Spec violates generator assumptions | Inspect openapi.preprocessed.yaml, patch openapi.yaml, or add a generic preprocessing pass |
Bash(cargo:*, git:*) — restricted to two argv prefixes. cargo runs aomi-build, builds, and tests
crates; git runs ls-files and add only. No other shell commands permitted;
permissions.shell enforces this at the OWASP AST03 level.
Read — reads within ./ and ../aomi-sdk/ only. Write — writes to ./apps/,
../aomi-sdk/apps/, Cargo.toml, Cargo.lock, target/ only; identity files
(SOUL.md, MEMORY.md, AGENTS.md, build.rs) are deny_write-listed.
Edit — same paths as Write. Grep — read-only search, no writes.
Risk tier: L1 (source files + Rust toolchain only; no fund movement, no network calls).
Use this skill for tasks like:
If a local aomi-sdk checkout exists (often at ../aomi-sdk), inspect these first. The current SDK is v3.0.1, Rust 2024 edition. The aomi-build binary is part of the aomi-sdk crate behind the cli feature.
sdk/examples/app-template-http/src/lib.rs — canonical HTTP-API template (sync read-only)sdk/examples/app-template-http/src/client.rssdk/examples/app-template-http/src/tool.rssdk/examples/app-template-http/Cargo.toml — note edition = "2024" and crate-type = ["cdylib"]sdk/src/types.rs and sdk/src/route.rs — DynToolCallCtx, DynAomiTool, async tool contracts, and ToolReturn / RouteStepdocs/repo-structure.md — file roles and authoring guidelinesdocs/host-interop.md — public host tools (encode_and_call, stage_tx, simulate_batch, commit_txs, evm_commit_message) plus SVM route targetsdocs/aomi-build.md and sdk/bin/build/CONTRIBUTING.md — current aomi-build commands (gen-specs, gen-client, gen-tool, new-app, test-schema, tighten-spec, init, compile, deploy, connect, sdk check|fix)docs/sdk-version-compatibility.md — exact-match SDK version gate enforced via aomi_sdk_version symbolapps/*/src/{lib,client,tool}.rs. Recommended:
apps/binance — execution-oriented with required secrets and normalized modelsapps/oneinch — execution planner with routed quote → approval → swap flowapps/geckoterminal — current OpenAPI/progenitor app-local pipeline (openapi.yaml, generated src/client/, curated tool.rs)apps/svm-transfer — current SVM lane-1/lane-2 route patterns (svm_stage_ix, svm_stage_tx, svm_commit_ix, svm_commit_tx)apps/khalani, apps/polymarket, or apps/polymarket-rewards — host handoff via ToolReturn routesIf the supplied docs mostly point to GitHub repositories, SDKs, or examples instead of listing public endpoints:
If the current repo is aomi-widget, also inspect:
apps/landing/content/examples/*.mdxapps/landing/content/guides/build/**/*.mdxIf the aomi-sdk checkout is not available, read:
ToolReturn envelope and RouteStep builders for execution apps that hand off to the host walletbinance, builder fallback, polymarket routes upgrade, async tool with cancellation, SDK version bump)Cargo.toml, SDK version mismatch, async tool hangs, route resolution issues, JsonSchema derive failures)lib.rs for manifest and preamble. Register with dyn_aomi_app! including the namespaces = [...] field — ["evm-core"] for most EVM apps and generated OpenAPI apps, SVM namespaces such as ["svm-reads", "svm-ix-broadcast", "svm-tx-broadcast"] for Solana apps, or [] only for tools that need no host namespace at all. The old "common" namespace is stale and should not be copied into new apps.client.rs for HTTP client, auth, models, and normalizationtool.rs for DynAomiTool implementations. Sync tools implement run; async tools set const IS_ASYNC: bool = true and implement run_async with DynAsyncSink::emit/complete/is_canceled (see sdk/examples/hello-app/src/lib.rs).ToolReturn::with_routes(...) instead of bare JSON — see references/host-routes.md.search_*, get_*, build_*, submit_*, list_*, or resolve_*.*_rpc or *_raw is fine, but it should not replace a clean core workflow.JsonSchema. Field doc comments are model-facing and matter.client.rs or helper functions.lib.rsPREAMBLE or a small build_preamble() hook.dyn_aomi_app!. Always include the namespaces field explicitly — namespaces = ["evm-core"] for most EVM or generated API apps, SVM namespaces for Solana apps, and namespaces = [] only when no host namespace should be injected. The macro generates the C ABI exports (aomi_create, aomi_manifest, aomi_async_tool_start, etc.) and embeds the SDK version stamp the host uses for the exact-match compatibility check.client.rsreqwest::blocking::Client with explicit timeouts for sync tools, matching the current SDK examples.tool.rsDynAomiTool. Required associated types: App (the app struct from client.rs) and Args (a JsonSchema + Deserialize struct). Required consts: NAME, DESCRIPTION. Optional const: IS_ASYNC (defaults to false).Result<Value, String> from run(); async tools return Result<(), String> from run_async() and emit progress through the DynAsyncSink. Cancellation: poll sink.is_canceled() and return Ok(()) early.DynToolCallCtx when host state such as connected wallet, session state, or caller attributes is needed. ctx.session_id and ctx.call_id are stable identifiers for logging or routing.ToolReturn::with_routes(value, [RouteStep::on_return(...).bind_as(...).prompt(...)]) instead of a bare Value. The run_with_routes() method on DynAomiTool has a default impl that wraps run() — only override it when you need routes. See references/host-routes.md.Write the preamble from the app's real contract:
For deeper patterns and examples, read references/aomi-sdk-patterns.md.
For execution-oriented apps:
docs/host-interop.md. The available host tools include encode_and_call, stage_tx, simulate_batch, commit_txs, evm_commit_message, and SVM targets such as svm_stage_ix, svm_stage_tx, svm_commit_ix, and svm_commit_tx. Apps reference these by name or typed route markers in route hints — they are public contract, not private infrastructure.CommonNamespace etc.) or internal fallback behavior. Do not use the old "common" namespace in new app manifests; current host namespace names are canonical strings such as "evm-core", "svm-reads", "svm-ix-broadcast", and "svm-tx-broadcast".ToolReturn envelope with explicit RouteStep builders instead of any prose-based SYSTEM_NEXT_ACTION convention. The runtime's RoutedEventBridge resolves OnSyncReturn and OnBoundEvent triggers, splices wallet-callback artifacts (signature, transaction_hash) into hinted args, and injects the continuation prompt. The runtime never parses prose — structured fields are the contract.stage_tx with data: { raw: "0x..." }; for ABI-driven calls, use data: { encode: { signature, args } }.For deeper coverage of the routes pattern, including OnSyncReturn vs OnBoundEvent, bind_as aliases, and worked examples from apps/khalani and apps/polymarket, read references/host-routes.md.
When working inside aomi-sdk:
cargo run -p aomi-sdk --features cli --bin aomi-build -- init <name>, or scaffold API-driven apps with cargo run -p aomi-sdk --features cli --bin aomi-build -- new-app <platform> --from-url <url>.cargo run -p aomi-sdk --features cli --bin aomi-build -- compile --app <name>. Optional flags: --release, --target <triple>. The build validates the manifest, codesigns on macOS, and validates the produced plugin.gen-specs (writes apps/<p>/openapi.yaml by default, or ext/specs/<p>.yaml with --shared) → gen-client (progenitor into apps/<p>/src/client/ or ext/src/<p>/) → gen-tool (mechanical stubs) → curate → compile. openapi.preprocessed.yaml is a debug artifact overwritten by gen-client; edit openapi.yaml, not the preprocessed copy.gen-tool intentionally produces endpoint-shaped stubs. Before shipping, collapse them into user-story tools, write a real preamble, and add apps/<p>/test.json when the app needs real LLM/runtime validation.compile reports zero built plugins for a brand new app, check the app path, package metadata, and whether [package.metadata.aomi.skip] is set. Current compile scans tracked manifests and the apps directory.cargo build --manifest-path apps/<name>/Cargo.toml.aomi_sdk::testing::{TestCtxBuilder, run_tool, run_async_tool}. TestCtxBuilder::new(tool_name).build() produces a DynToolCallCtx; run_tool returns a full ToolReturn with routes; run_async_tool returns (updates, terminal).sdk/Cargo.toml package.version, all apps must be rebuilt — the host rejects plugins whose aomi_sdk_version symbol does not match its compiled AOMI_SDK_VERSION. See docs/sdk-version-compatibility.md.When the task also touches docs or demos in aomi-widget, update the relevant examples or guides to match the new app behavior.
Aim to leave behind:
Frequently asked questions
Scaffold new Aomi apps and plugins from API docs, OpenAPI/Swagger specs, or SDK references. aomi-build generates production-ready Rust SDK crates (lib.
The source record exposes this install command: npx skills add https://github.com/aomi-labs/skills --skill "aomi-build". Inspect the command and pinned source before running it.
The pinned source record declares support for: codex, claude code, cursor.
Static rules flagged exec-script, network, write-files in the source; the page lists the matching lines and excerpts.
Alternatives
PramodDutta/qaskills
Automatically generate comprehensive API test suites from OpenAPI specifications covering CRUD operations, error handling, authentication, pagination, and edge cases
upex-galaxy/agentic-qa-boilerplate
Plan, write, and review automated tests following KATA (Komponent Action Test Architecture) on Playwright + TypeScript, or explain existing automated tests in a sealed read-only mode. Use when writing E2E or API/integration tests, creating Page or Api components, designing ATCs, parameterizing test data, registering fixtures, reviewing test code for KATA compliance, or requesting break-down-tests / a plain-English test breakdown. The explain mode reads source and reports assertions without enter
upex-galaxy/agentic-qa-boilerplate
Analyze, prioritize, and document test cases in TMS (Jira/Xray), or repair an existing Story-ATS-ATP-ATR-TC cascade through a sealed explicit mode. Use for Test/ATP/ATR artifacts, ROI and automation verdicts, maintaining traceability, fix-traceability, or broken TMS links. The repair-traceability mode audits, plans, waits for explicit approval, applies, and verifies without launching the general documentation workflow. Do NOT use for writing test code (test-automation) or running suites (regress
upex-galaxy/agentic-qa-boilerplate
Framework evolution mode — evolves the QA boilerplate itself (KATA, fixtures, cli/, scripts/, api/schemas/ pipeline, package.json deps). Self-contained Plan → Code → Verify → Archive pipeline; runs under the `gentle-ai install --preset minimal` install (no SDD-* skills required). Use when adding new fixture APIs, refactoring KATA base classes, evolving the installer, modifying the OpenAPI sync pipeline, or any change to the framework infrastructure that is NOT per-ticket test writing or manual Q