Skip to content
Back to skills

0 12 0

ASecurity

In this tutorial you will learn how iii makes it unreasonably simple to build and extend systems. <Info title="Install iii before proceeding"> Make sure you have installed iii before proceeding. If you haven't then visit the [Install](./install) guide first. </Info>

  • 18,821 stars
  • 0 votes
  • 0 copies
  • 2 views
  • Added September 3, 2026
developmenttypescriptpythonbashkubernetestestingapidocumentation

Works with

  • terminal
  • api

Security analysis

A100/100

Pro scans all 21 files and shows the line behind each finding

Scanned September 3, 2026

npx -y skills add iii-hq/iii --skill 0-12-0 --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of 0 12 0?

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

Security grade badge for 0 12 0
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/iii-hq-0-12-0-22188e44/badge)](https://www.skillsdirectory.com/skills/iii-hq-0-12-0-22188e44)

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
<!-- generated by iii-skill-render. DO NOT EDIT (changes here are overwritten on the next render). Edit docs/0-12-0/quickstart.mdx. -->

# Quickstart


In this tutorial you will learn how iii makes it unreasonably simple to build and extend systems.

<Info title="Install iii before proceeding">
  Make sure you have installed iii before proceeding. If you haven't then visit the
  [Install](./install) guide first.
</Info>

## 1. Create the project

```bash
iii project init quickstart --template quickstart
cd quickstart
```

This creates the two workers that you'll run: a Python worker that adds two numbers and stores the
sum in state, and a TypeScript worker that exposes an http endpoint and calls the Python worker
through the iii engine.

```
workers/
  math-worker/
    math_worker.py      # Python worker
  caller-worker/
    src/worker.ts       # TypeScript worker
```

## 2. Start the engine

```bash
iii --config config.yaml
```

The engine is now listening on `ws://localhost:49134`. Keep this terminal open and open a second
terminal in the `quickstart` directory for the remaining commands.

## 3. Start the Python worker

<Info title="Workers can run anywhere">
  Workers only need a WebSocket connection to the iii engine. They can run locally, in the cloud,
  replicated in kubernetes, or anywhere else.
</Info>

```bash
iii worker add ./workers/math-worker
```

You should see:

```
✓ Worker math-worker added to config.yaml
Path  /Users/tony/iii/projects/testing/quickstart/workers/math-worker
✓ Using cached deps (use --force to reinstall)
✓ math-worker started (pid: 12345)
✓ Worker auto-started
```

This worker registered the function `math::add` with the engine. You could call this function right
now using the command below.

```bash
iii trigger math::add a=2 b=3
```

However this is not much different than running an equivalent script on its own. The utility of iii
comes from being able to place any functionality into a worker and then compose that worker with
other workers through the engine, regardless of where each one runs or what language it's written
in.

<Tip>
  Workers need a moment to install their runtime dependencies after being added. If you see
  `"message": "Function math::add not found"`, wait a few seconds and try again.
</Tip>

## 4. Start the TypeScript worker

```bash
iii worker add ./workers/caller-worker
```

You should see:

```
✓ Worker caller-worker added to config.yaml
Path  /Users/tony/iii/projects/testing/quickstart/workers/caller-worker
✓ Using cached deps (use --force to reinstall)
✓ caller-worker started (pid: 23456)
✓ Worker auto-started
```

This worker registered the function `math::add_two_numbers` with the engine.

## 5. Call across languages

Call the TypeScript worker. It will call the Python worker through the engine and return the result:

```bash
iii trigger math::add_two_numbers a=10 b=20
```

```json
{ "c": 30 }
```

## 6. Add state

The `iii worker add` command incrementally adds workers from the registry to your running system.
Start by adding the state worker, which gives every function access to a persistent key-value store.

From the folder containing iii's `config.yaml` run:

```bash
iii worker add iii-state
```

Now open `workers/math-worker/math_worker.py` in your code editor and uncomment the state block so
the handler looks like this:

```python
def add_handler(payload: dict) -> dict:
    a = payload.get("a", 0)
    b = payload.get("b", 0)
    logger.info(f"math::add called in Python with a={a}, b={b}")
    result = {"c": a + b}

    running_total = worker.trigger(
        {
            "function_id": "state::get",
            "payload": {"scope": "math", "key": "running_total"},
        }
    )
    new_total = (running_total or 0) + result["c"]
    worker.trigger(
        {
            "function_id": "state::set",
            "payload": {"scope": "math", "key": "running_total", "value": new_total},
        }
    )
    result["running_total"] = new_total

    return result
```

Save the file and call the function a few times:

```bash
iii trigger math::add a=2 b=3
```

```json
{ "c": 5, "running_total": 5 }
```

```bash
iii trigger math::add a=10 b=20
```

```json
{ "c": 30, "running_total": 35 }
```

The running total persists across every call, including calls that arrive through
`math::add_two_numbers`.

## 7. Add HTTP endpoints

Now let's add an HTTP worker to expose your functions as REST endpoints.

From the folder containing iii's `config.yaml` run:

```bash
iii worker add iii-http
```

Open `workers/caller-worker/src/worker.ts` and uncomment the HTTP block at the bottom of the file:

```typescript
worker.registerFunction(
  "http::add_two_numbers",
  async (payload: { body: { a: number; b: number } }) => {
    const result = await worker.trigger({
      function_id: "math::add_two_numbers",
      payload: payload.body,
    });
    return {
      status_code: 200,
      body: { c: result.c, running_total: result.running_total },
      headers: { "Content-Type": "application/json" },
    };
  },
);

worker.registerTrigger({
  type: "http",
  function_id: "http::add_two_numbers",
  config: { api_path: "/math/add-two-numbers", http_method: "POST" },
});
```

Save the file, then call the new endpoint with curl:

```bash
curl -X POST http://localhost:3111/math/add-two-numbers \
  -H 'Content-Type: application/json' \
  -d '{"a": 100, "b": 200}'
```

```json
{ "c": 300, "running_total": 335 }
```

The same functions that respond to `iii trigger` now also respond to HTTP requests with no code
changes to the handlers themselves.

## How it works

For a walkthrough of how the engine, workers, functions, and triggers in this scaffold fit together,
see [Understanding iii](./understanding-iii). It uses this project as the worked example.

<Tip title="Inspect what's running">
  Open the iii Console with `iii console` in a new terminal: an interactive UI for workers,
  functions, triggers, logs, traces, and state. See the full [Console
  documentation](./using-iii/console) for details.
</Tip>

{/* TODO: re-add the "Give your coding agent context" Tip with `npx skillkit add iii-hq/iii/skills` once the iii skills worker (owned by Sergio) ships. */}

## Next Steps

You scaffolded a project, started two workers in different languages, called functions across them,
added persistent state, and exposed everything over HTTP, all by incrementally adding workers to a
running system.

<CardGroup cols={2}>
  <Card title="Use iii" href="./using-iii" icon="table-layout">
    Learn how to use iii in production.
  </Card>
  <Card title="Understanding iii" href="./understanding-iii" icon="table-layout">
    Understand functions, triggers, and workers from a conceptual point of view.
  </Card>
</CardGroup>

Files in this skill

  • assets/favicon.svg17.4 KB
  • assets/iii-black.svg508 B
  • assets/iii-white.svg923 B
  • creating-workers/functions.mdx6.1 KB
  • creating-workers/functions.mdx.skill.md6.1 KB
  • creating-workers/triggers.mdx6.7 KB
  • creating-workers/triggers.mdx.skill.md6.7 KB
  • creating-workers/workers-registry.mdx1.7 KB
  • creating-workers/workers-registry.mdx.skill.md1.7 KB
  • creating-workers/workers.mdx5.6 KB
  • creating-workers/workers.mdx.skill.md5.6 KB
  • how-to/build-a-realtime-todo-app.mdx1.5 KB
  • how-to/build-a-realtime-todo-app.mdx.skill.md1.5 KB
  • index.mdx4.8 KB
  • index.mdx.skill.md4.7 KB
  • install.mdx2.8 KB
  • install.mdx.skill.md2.8 KB
  • patterns/adapter-pattern.mdx1.2 KB
  • patterns/adapter-pattern.mdx.skill.md1.2 KB
  • patterns/reactive-state-pattern.mdx1.4 KB

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.