Skip to main content

Documentation Index

Fetch the complete documentation index at: https://docs.bastani.ai/llms.txt

Use this file to discover all available pages before exploring further.

The interactive picker — the same one atomic workflow -a claude opens — is exposed as a component you can mount in your own app. Users fuzzy-search workflows, fill in declared inputs as a form, and confirm.

Import

import { WorkflowPicker } from "@bastani/atomic-sdk/workflows/components";

Use it imperatively

import { WorkflowPickerPanel } from "@bastani/atomic-sdk/workflows/components";

await WorkflowPickerPanel.create({
  agent: "claude",
  registry, // a registry built with createRegistry()
});

Use it inside an OpenTUI app

Mount WorkflowPicker as a component inside your own OpenTUI app. It binds to the registry you pass, renders rows for each workflow, validates declared inputs against the schema, and resolves to the chosen workflow + filled inputs.
import { WorkflowPicker } from "@bastani/atomic-sdk/workflows/components";

<WorkflowPicker
  agent="claude"
  registry={registry}
  onSubmit={async ({ workflow, inputs }) => {
    await runWorkflow({ workflow, inputs });
  }}
/>

Broken entries

When you register custom workflows via settings.json and one fails to load, the picker still renders it as a broken row. Pressing Enter on a broken row flashes the reason on the statusline instead of launching the workflow. See registering workflows.

See also

Embedding

Build a multi-workflow CLI on top of a registry.

Inputs

The schema the picker renders as a form.