Resource
Author resources (workflows, apps, and skills) locally and run them in the cloud. Scaffold files to disk, edit them, then validate, wire credentials, and publish.
A resource is something the agent builds for you and saves: a workflow (code or agent logic that runs in the cloud on a schedule, a webhook, or a poll trigger), an app (an interactive React mini-app with server-side handlers), or a skill (a SKILL.md instruction bundle agents load as context). geni resource lets your AI agent build one on your machine using your own editor, while the cloud handles validation, configuration, publishing, and runs.
The shared lifecycle lives here; type-specific tools split off:
geni resource— the shared lifecycle for any resource: create, pull, validate, wire config, publish.geni workflow— workflow-only tools: test executions, triggers, switching type.geni app— app-only tools: the build, running and inspecting handlers, browser errors.
The files live on your disk. The cloud is the brains: validation, the TypeScript and spec checks, the build, and every execution happen server-side. The CLI ships your files up and brings the results back.
The build loop
# 1. Scaffold a resource + its files into the current directory.
geni resource create --type code --name "Daily Digest"
# 2. Edit the files with your normal tools.
# (Don't compile locally — @general-input/core only resolves server-side.)
# 3. Validate against the spec, credential wiring, and TypeScript. No publish.
geni resource validate
# 4. Wire credentials, consts, and schedules.
geni resource config set --cred slack=cred_01HX
# 5. Promote your files to the live version.
geni resource publish --summary "Posts a daily digest to Slack"
# 6. Verify it.
geni workflow test --payload '{}' # workflows
geni app run-handler listCustomers # appsLoad the matching authoring skill first (geni skills load <code-workflow|agent-workflow|app|skill-authoring>) — its references/ hold the type contract and a complete worked example — then iterate from step 2 until it does what you want.
Local files are the draft
validate checks your local files without persisting. publish promotes them
to the live version. A test or handler run uses the published version, so
publish before you test.
The directory marker
create and pull drop a .geni-resource.json marker in the directory. Every other command resolves the resource id from that marker, so you can run them by id (geni resource validate wf_123) or just from inside the directory (geni resource validate).
Four types
- Code workflows — deterministic, fixed steps, API chaining. A single
main.tsruns once per trigger. - Agent workflows — LLM-driven, variable-length tasks (research, drafting, triage). An
instructions.mdSOP plus reusable scripts. - App resources — an interactive React mini-app with server-side handlers (dashboards, internal tools).
- Skills — a
SKILL.mdinstruction bundle agents load as context. Not executed, so it skips the config step and publishes without a--summary.
Lifecycle commands
| Command | What it does |
|---|---|
create | Create a resource and scaffold its files. |
list | List the workflows you can access. |
get | Show one resource's detail. |
pull | Download a resource's live files to disk. |
validate | Validate local files without publishing. |
config | Read and wire credentials, consts, schedules. |
publish | Validate and promote local files to live. |
Type-specific tools live under geni workflow and geni app. Each type's contract and worked example ship in its authoring skill.
geni exec bash
Run a bash command with your connected credentials available as environment variables.
Code workflows
The full contract and runtime API for a code workflow. A single main.ts that runs server-side in Bun once per trigger, with typed credentials, platform auth, logging, and artifact output.