# Novu Human

> Ask a human to decide (ask / approve / choose / tell) when the action is risky, irreversible, or a real multi-way choice — not for routine in-thread chat. Use novu_human on managed agents, ctx.ask/approve/choose/tell on code-defined agents, or the human CLI when no one is watching this session.

- Skill: `novuhq/novu-human` (Agent Skill)
- Install (CLI): `npx skillmds@latest add novuhq/novu-human`
- Raw SKILL.md: https://api.skillmd.com/api/skills/novuhq/novu-human/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Coding & Dev Tools
- Author: novuhq (https://skillmd.com/u/novuhq)
- Updated: 2026-09-17
- Page: https://skillmd.com/skills/novuhq/novu-human

---


# Asking a human (HITL)

Escalate to a real person when guessing is expensive. Do **not** use HITL for routine back-and-forth in this thread — just reply.

Use it when:

- The action is risky or irreversible (delete data, deploy, spend money, send something externally visible).
- There is a genuine multi-way decision and guessing wrong is expensive — use `choose`, not a rhetorical question.
- You finished something long-running and want to notify without waiting — use `tell`.

Do **not** use it to re-gate an MCP / provider tool that is already parked on an Approve/Deny card. That is a different flow.

`choose` takes 2–10 options. `tell` is one-way and does not wait.

## How, depending on the runtime

### Managed agent (Claude / Novu-hosted)

Call the `novu_human` tool with `kind` `ask` | `approve` | `choose` | `tell` and a `card`. Title is `card.title` (required). `choose` needs `card.options` (2–10). Optional chrome: `subtitle` and `body` on every channel; `icon` is Slack-only (MCP catalog id like `stripe` / `github`, catalog display name, or an https 32×32 URL — not emoji). Approve may add `approveLabel`, `denyLabel`, `extraActions`. Do **not** invent `trust-tool` / `trust-server` extras. Do not pass top-level `prompt` or `options`. The card lands in this conversation. The session stays parked until the human settles it (`tell` returns as soon as it is delivered).

### Code-defined (framework) agent

Call `ctx.ask`, `ctx.approve`, `ctx.choose`, or `ctx.tell`. The verdict arrives on the next `onMessage` / `onAction` as `ctx.humanResponse`.

### Unattended (CLI / cron / no live thread)

Use the `human-cli` skill and the `human` CLI (`human ask|approve|choose|tell`).

