---
title: "Hello World Workflow"
description: "A minimal hello-world workflow using literal output (no agent) with deterministic persistence."
---

# Hello World Workflow

<Note>
Demonstrates literal output with no AI agent. For a hello-world workflow that uses an LLM agent, see [Hello World](./hello-world).
</Note>

## Source

```tsx
/** @jsxImportSource smithers-orchestrator */
// workflows/hello.tsx
import { createSmithers } from "smithers-orchestrator";
import { z } from "zod";

const { Workflow, Task, smithers, outputs } = createSmithers({
  input: z.object({ name: z.string() }),
  output: z.object({
    message: z.string(),
    length: z.number(),
  }),
});

export default smithers((ctx) => (
  <Workflow name="hello">
    <Task id="hello" output={outputs.output}>
      {{
        message: `Hello, ${ctx.input.name}!`,
        length: ctx.input.name.length,
      }}
    </Task>
  </Workflow>
));
```

## Running

```bash
bunx smithers-orchestrator up workflows/hello.tsx --input '{"name": "World"}'
```

```
[hello] Starting run abc123
[hello] Done -> { message: "Hello, World!", length: 5 }
[hello] Completed
```

## Notes

- **Literal output** -- `Task` receives a plain object instead of an agent prompt. No LLM call; deterministic output.
- **`ctx.input`** -- Access the CLI input payload passed via `--input`.
- **Resumable** -- Output is persisted to SQLite. Re-running after a crash skips completed tasks.
