# Run Norn activities

Configure a declared Norn harness and serve its queue through an agent worker.

The Norn integration lets an Aion agent worker run Norn as an external activity. The workflow keeps its durable history; the worker owns the Norn subprocess and its streamed events.

## Prepare the worker host

Use an Aion build with the Norn feature and install a compatible Norn executable on the worker host. Complete Norn’s account login there. Choose its executable path, account and allowed environment variable names explicitly.

- `Build`: The CLI’s norn feature includes the adapter and is in the default feature set. The Norn executable is installed and authenticated separately on the worker host.
- `Launch`: The adapter launches the configured binary with --protocol jsonrpc, performs initialize and requires protocol norn-driven/1, then sends run/execute.
- `Events`: Norn event notifications become activity transcript events. The response matching run/execute supplies the terminal activity outcome.
- `Controls`: The adapter advertises InjectMessage and Cancel. Each session also checks the spawned Norn binary’s advertised capabilities. Other intervention primitives are refused by name.
- `Environment`: env_pass is the complete child environment. Add each needed provider or account variable name explicitly; the worker host supplies its value.
- `Implementation`: crates/aion-integration-norn/src/harness.rs defines launch and registration capabilities; translate.rs and session.rs map messages, events and results.


## Declare the harness

This workflow sends a prompt and repository path to the reviewers queue. Replace the example Norn executable and account with the host’s values. The action’s repository parameter supplies the child working directory.

**review_a_tree.awl**

```text
//! Answer a repository question through the reviewers worker.
workflow review_a_tree
  input tree: String
  input question: String
  outcome answered: type Answer, route success

type Answer { reply: String }

type Reply { text: String, final_message: String, stop_reason: String, session_id: String }

worker reviewers
  harness
    kind norn
    concurrency 2
    reconnect_initial_backoff 5s
    reconnect_max_backoff 1m
    reconnect_max_attempts 50
    env_pass "PATH", "HOME"
    args "--account", "default"
    cwd from repo
    binary "/usr/local/bin/norn"
  action review(repo: String, prompt: String) -> Reply
    agent

step review
  review(repo: tree, prompt: question) -> reply
  route answered(reply: reply.text)
```


The complete agent outcome includes text, final_message, stop_reason and session_id. The workflow routes the text field into its own successful answer.

## Check and serve

Inspect the action surface and resolved harness before connecting.

**Terminal — inspect the declared Norn worker**

```bash
aion awl check review_a_tree.awl
aion worker agent review_a_tree.awl --liminal-address 127.0.0.1:50061 --identity norn-reviewer-1 --check
```


Deploy the document through the [authoring commands](/aion/reference/cli-authoring/), then serve its declared queue. This command uses the liminal worker listener.

**Terminal — serve the Norn queue**

```bash
aion worker agent review_a_tree.awl --liminal-address 127.0.0.1:50061 --identity norn-reviewer-1
```


For an authenticated listener, supply the connection token file and admitted namespace described in [auth and Lys](/aion/operations/auth-and-lys/). Read the registration result and transcript. Use [activity control](/aion/operations/activity-control/) to inject a message or cancel the advertised attempt.

On main, crates/aion-integration-norn/src/harness.rs:403–423 negotiates the protocol, and :492–513 starts the agent request. Registration capabilities are declared at :77–82. A successful protocol handshake still needs a configured Norn account to execute a model request.
