Approvals & Skills
Human-in-the-Loop Approvals
Approvals are a first-class primitive in Ariftly. Any agent action that affects the outside world — sending an email, creating a PR, posting to Slack — waits for human approval before executing.
How it works
- Agent determines an action should be taken (e.g., send outreach email)
- Agent emits an
approval.requestedevent with the draft action payload - Core creates an Approval record and notifies the user (dashboard + Slack)
- User reviews the action in the dashboard or Slack, and approves or denies
- Core sends
POST /v1/approval/:id/resolveto the agent - Agent executes (if approved) or discards (if denied)
Approval in the Dashboard
The Approvals inbox in the dashboard shows all pending approvals across all agents, sorted by recency. Each approval shows:
- Which agent requested it
- What action it wants to take
- The full payload (e.g., the email body and recipients)
- Edit and approve / deny buttons
Approvals via Slack
Configure a Slack channel as your approval channel in Settings → Channels. The agent will post the draft and you can approve/deny directly from Slack with button clicks.
Skills
Skills let you extend any agent's behavior without writing code. Describe what you want in plain English — the Skill Builder meta-agent generates the YAML, you approve it, and it's live.
Example Skill
id: sales.flag_pricing_mentions
version: 1.0.0
agent: sales-agent
triggers:
- on: session.message_received
when:
any:
- message.content.matches: "(?i)\\b(price|pricing|cost)\\b"
actions:
- type: emit_artifact
artifact_type: sales.pricing_signal
- type: notify
target: { role: "cro" }
channel: slack
Skill Hooks
Skills can attach to these agent lifecycle events:
| Hook | When it fires |
|---|---|
before_task | Before a task starts |
after_task | After a task completes |
before_session_message | Before the agent processes a message |
after_session_message | After a response is generated |
on_artifact_emitted | When an artifact is created |
on_approval_requested | When an approval is requested |
on_approval_resolved | When an approval is granted or denied |
daily_tick | Once per day (for scheduled checks) |
Creating a Skill
- Go to Agents → [Your Agent] → Skills → New Skill
- Describe what you want: "Notify the sales team in Slack whenever a lead replies mentioning a competitor"
- The Skill Builder generates YAML
- Review and approve
- The skill is active immediately