> ## Documentation Index
> Fetch the complete documentation index at: https://docs.platform.nora.my/llms.txt
> Use this file to discover all available pages before exploring further.

# nora actions

> Manage Action blocks — post-answer side effects like notify, log, or write.

Actions fire *after* the Agent decides. Unlike Tools (which the Agent picks during a run), Actions run based on wiring: the Flow decides *whether* to fire, the Agent's output decides *what* to pass in.

Same command shape as Tools, minus parameters (Actions don't have LLM-picked args).

## Commands

| Command                              | Description          |
| ------------------------------------ | -------------------- |
| `actions create --name <n>`          | Add an Action block. |
| `actions update <action-id>`         | Patch fields.        |
| `actions edit <action-id>`           | Open in `$EDITOR`.   |
| `actions delete <action-id>`         | Remove Action.       |
| `actions headers list <action-id>`   | Print HTTP headers.  |
| `actions headers add <action-id>`    | Add header.          |
| `actions headers remove <action-id>` | Remove header.       |

## `actions create`

```bash theme={null}
nora actions create \
  --name notify_slack \
  --description "Post a Slack message with the Agent's summary" \
  --runtime '{"kind":"http","method":"POST","url":"https://hooks.slack.com/services/xxx"}'
```

Flags:

* `--name <n>` (required).
* `--description <d>`.
* `--runtime <json>` — HTTP or inline runtime spec (same shape as Tools).
* `--x <n>`, `--y <n>` — canvas position.

## `actions update`

```bash theme={null}
nora actions update ac_notify \
  --set-approval on \
  --set-http-url https://hooks.slack.com/services/new-url
```

### Update flags

**Identity**

* `--set-name <n>`
* `--set-description <d>`
* `--set-icon <name>`

**Approval**

* `--set-approval on|off` — require approval before firing.

**HTTP runtime**

* `--set-runtime-kind http|inline`
* `--set-http-method <m>`
* `--set-http-url <url>`
* `--set-http-auth-kind <k>`
* `--set-http-auth-header <name>`
* `--set-http-auth-value <v>`

**Inline runtime**

* `--set-inline-lang <lang>`
* `--set-inline-code <text>` / `--set-inline-code-file <path>`

**Position/size**

* `--set-x <n>`, `--set-y <n>`, `--set-width <n>`

**Bulk**

* `--patch <json>`

## `actions edit`

```bash theme={null}
nora actions edit ac_notify
```

## `actions delete`

```bash theme={null}
nora actions delete ac_notify
```

Removes the Action; wires prune.

## `actions headers`

Same shape as Tools:

```bash theme={null}
nora actions headers list ac_notify
nora actions headers add ac_notify --name Authorization --value 'secrets://slack_bot_token'
nora actions headers remove ac_notify --name X-Old-Header
```

Secret values via `secrets://<ref>`. Interactive with `--value ?`. See [Piping & secrets](/cli/piping-and-secrets).

## Tool vs. Action — quick refresher

|                                  | Tool            | Action                   |
| -------------------------------- | --------------- | ------------------------ |
| Who decides when to call         | Agent (via LLM) | Flow (via wiring)        |
| Who picks arguments              | Agent           | Mapped from Agent output |
| Runs during reasoning            | Yes             | After                    |
| Can affect the Agent's next step | Yes             | No                       |

Rule of thumb: if the Agent might need the result to reason further, it's a Tool. If it's fire-and-forget after the answer, it's an Action.

## Recipes

### Add a Slack notification with an approval gate

```bash theme={null}
AC=$(nora actions create \
  --name notify_slack \
  --description "Post a Slack summary" \
  --runtime '{"kind":"http","method":"POST","url":"'$SLACK_WEBHOOK'"}' \
  | jq -r '.id')

nora actions update $AC --set-approval on
```

Every Slack post now waits for approval.

### Migrate a header rotation

```bash theme={null}
new_token='secrets://slack_bot_token_v2'
for id in $(nora flows get support | jq -r '.blocks[] | select(.kind=="action").id'); do
  nora actions headers remove $id --name Authorization 2>/dev/null
  nora actions headers add $id --name Authorization --value "$new_token"
done
```
