Skip to content
Back to skills

Api Apps

ASecurity

Call nodetool.apps from a code action: list, read, create and edit mini apps through the App Builder steps, and debug an app's wiring or run it. Load before the first call into nodetool.apps.

  • 552 stars
  • 0 votes
  • 0 copies
  • 0 views
  • Added September 29, 2026
ai-agentsnodeapi

Works with

  • cli
  • api

Security analysis

A100/100

Scanned September 29, 2026

npx -y skills add nodetool-ai/nodetool --skill api-apps --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Api Apps?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for Api Apps
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/nodetool-ai-api-apps/badge)](https://www.skillsdirectory.com/skills/nodetool-ai-api-apps)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
SKILL.md
---
name: api-apps
description: "Call nodetool.apps from a code action: list, read, create and edit mini apps through the App Builder steps, and debug an app's wiring or run it. Load before the first call into nodetool.apps."
---

# nodetool.apps

A mini app is a UI of widgets bound to workflow operations and variables, so
someone can run a task without the graph. How to design one, and every App
Builder tool, is `nodetool-app-builder`. This is the call reference.

| Call | Does | Answers |
| :--- | :--- | :--- |
| `list({limit})` | Lists apps, newest first, with their operations. | App rows |
| `get(id)` | Reads the app document: operations, variables and the widget tree. | The document |
| `create(name, {description, project_id, from_workflow_id, document})` | Creates an app. `from_workflow_id` binds its first operation to a workflow. `document` starts from a whole app document. | `{application_id, …}` |
| `edit(id, steps, {name, description, workflow_ids, base_updated_at})` | Applies App Builder steps in order to the saved document, then saves once. | The result of each step and the app state |
| `debug(id, {params, interact, run, timeout_ms, poll})` | Checks every binding and simulates the app. | A pass/fail verdict with issues, and the final state of each widget |

## edit

Each step is `{tool, input}`. `tool` is an App Builder tool name, such as
`ui_app_add_operation` or `ui_app_add_component`. The `ui_app_` prefix may be
left out.

- `edit(id, [])` answers the catalog of every tool with its schema, and the
  current state of the app. Call it first.
- `workflow_ids` loads the bindable surface of workflows the app does not use
  yet, so a widget can bind to one.
- `base_updated_at` refuses the save when the app changed after you read it.

## debug

- `{run: false}` checks the wiring only. It is free and takes milliseconds.
  Run it after every wiring change.
- A full run executes the real workflows and spends real money. Run it to
  confirm that the app works, not to explore.
- `interact` scripts the user actions in order: `{set: {key, value}}`,
  `{click: <widget>}`, `{change: {…}}`, `{run: <operationId>}`,
  `{cancel: <operationId>}`, `{seedResource: {id, items}}`. A widget is named
  by its component id, by a type only one widget has, or by a unique label.
  Without `interact`, the natural run trigger of the app is clicked.
- `poll: true` returns a session id at once for a long run.

```js
const { application_id } = await nodetool.apps.create("Caption maker",
  { from_workflow_id: wfId });
const catalog = await nodetool.apps.edit(application_id, []);
await nodetool.apps.edit(application_id, [
  { tool: "ui_app_add_component", input: { /* from the catalog schema */ } }
]);
const check = await nodetool.apps.debug(application_id, { run: false });
```

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments

Loading comments…

Newsletter

Get the weekly list of safe new skills, and the ones we pulled.