engine: workers: configuration: {} containers: state: worker: package://api.workers.iii.dev/state version: "0.22.2" config_name: state api: worker: path://./workers/api start_after: [state] scripts: run: pnpm start ``` Registry packages require an explicit version. `path://` workers use `scripts.run` from the Compose file or `scripts.start` from their `iii.worker.yaml` manifest. Start a project and keep its daemon in the foreground: ```bash iii compose build --file worker-compose.yaml iii com...
Scanned 9/3/2026
Install to Claude Code
npx -y skills add iii-hq/iii --skill using-iii --agent claude-codeInstalls into .claude/skills of the current project.
Are you the author of Using Iii?
Add the live security badge to your README — it updates automatically with every re-scan.
[](https://www.skillsdirectory.com/skills/iii-hq-using-iii-85101c34)More formats (shields.io, HTML) on the badges page.
<!-- generated by iii-skill-render. DO NOT EDIT (changes here are overwritten on the next render). Edit docs/next/using-iii/workers.mdx. -->
Workers are processes that connect to iii over WebSocket and register functions and trigger types.
When a worker disconnects, its registrations stop being callable until it reconnects.
## Worker identity and namespaces
A worker's identity is `(namespace, name)`. Two namespaces may use the same name; within one
namespace the name is exclusive. A duplicate live owner is rejected with
`WORKER_NAMESPACE_CONFLICT`.
The `namespace:` field in `worker-compose.yaml` selects the namespace for its containers. The
Compose daemon's `--namespace` separately addresses that daemon's `compose::*` functions.
## Declare workers with Compose
Project workers live under `containers:` in `worker-compose.yaml`:
```yaml
# namespace: default
engine:
workers:
configuration: {}
containers:
state:
worker: package://api.workers.iii.dev/state
version: "0.22.2"
config_name: state
api:
worker: path://./workers/api
start_after: [state]
scripts:
run: pnpm start
```
Registry packages require an explicit version. `path://` workers use `scripts.run` from the Compose
file or `scripts.start` from their `iii.worker.yaml` manifest.
Start a project and keep its daemon in the foreground:
```bash
iii compose build --file worker-compose.yaml
iii compose --namespace dev --up --file worker-compose.yaml
```
`build` downloads all declared `package://` workers before startup. `--up` then reuses the shared
package cache. The command skips local `path://` workers.
The presence of `engine:` makes the daemon own and stop the engine. Without it, pass `--engine` or
set `III_URL` to connect to an engine managed elsewhere.
## Add a registry worker
`compose::add` resolves the package graph, writes exact versions into the Compose file, and restarts
the project:
```bash
iii trigger -n dev compose::add worker=state
iii trigger -n dev compose::add worker=queue@0.21.5
```
Pass `file=/absolute/path/worker-compose.yaml` when the daemon's working directory is not the
project directory. A registry root whose kind is `engine` is rejected because the engine already
supplies it.
Find published workers at [workers.iii.dev](https://workers.iii.dev/) and inspect a package's page
before adding it.
## Operate workers
```bash
iii trigger -n dev compose::status file=worker-compose.yaml
iii compose logs state --follow --namespace dev
iii trigger -n dev compose::restart file=worker-compose.yaml worker=state
iii trigger -n dev compose::update file=worker-compose.yaml worker=state
iii trigger -n dev compose::down file=worker-compose.yaml
```
`compose::restart worker=` restarts one container. `compose::update worker=` edits the package pin
and restarts the project. `compose::down` stops containers in reverse dependency order.
Use `engine::workers::list` and `engine::workers::info` for the engine's live connection view. Use
`compose::status` for process ownership, PID, and the last supervisor error.
Use `iii compose logs <worker> --follow --namespace <daemon>` for live raw stdout and stderr.
## Configuration
Packages ship defaults. A container can name its configuration-worker entry with `config_name` and
override values with `config_override`. Precedence is package default, stored configuration value,
then `config_override`.
```yaml
containers:
http:
worker: package://api.workers.iii.dev/http
version: "0.21.3"
config_name: http
config_override:
host: 0.0.0.0
port: 3111
```
Compose passes the merged value through `III_CONFIG` and, when declared, publishes it to
`III_CONFIG_NAME`. See [Configuration](./configuration).
## Engine-managed exceptions
`configuration`, `iii-worker-manager`, `iii-http-functions`, `iii-stream`, and `iii-sandbox` remain
engine-owned. Put them under `engine.workers` for managed Compose, or in `config.yaml` only when an
external supervisor owns the engine. Internal `iii-engine-functions`, `iii-telemetry`, and
`iii-observability` are injected automatically. They must not be added as Compose package roots.
To configure the RBAC listener for untrusted workers, declare `iii-worker-manager` in
`engine.workers` (or direct-engine `config.yaml`); its full schema is on the
[iii-worker-manager page](https://workers.iii.dev/workers/iii-worker-manager).
## Workers outside Compose
Compose is optional for a process managed by Kubernetes, systemd, another host, or an SDK-driven
development command. Give it the engine URL and a worker name; once connected it participates in
the same function and trigger mesh. Compose only owns processes declared in its file.
## Migrating an existing project
0.23 removed `iii worker`, `worker::*`, and engine-side startup of project workers. Follow the
[manual migration guide](../upgrading/workers-to-compose) before starting an older project.
## Authoring workers
For SDK connection code, manifests, functions, triggers, and publishing, see
[Creating Workers / Workers](../creating-workers/workers).
Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.
No comments yet. Be the first to comment!