Skip to main content

Approvals & Skills

Two of the most important primitives in Ariftly: Approvals ensure a human reviews every agent action before it affects the outside world; Skills let you extend any agent's behavior without writing code.

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 GitHub PR, posting to Slack, updating a CRM record — waits for human approval before executing.

This is not a feature you can accidentally bypass. It is built into the Remote Agent Protocol: agents must emit an approval.requested event, and Core holds the action until a human resolves it.

How approvals work

  1. Agent determines an action should be taken (e.g., send outreach email to a new lead)
  2. Agent emits an approval.requested event with the full draft action payload
  3. Core creates an Approval record and notifies you (dashboard notification + optional Slack message)
  4. You review the action in the dashboard or directly in Slack
  5. You approve as-is, edit and then approve, or deny
  6. Core sends the resolution back to the agent via POST /v1/approval/:id/resolve
  7. Agent executes the action (if approved) or discards it (if denied)

Denied approvals are logged with your reason (optional) and feed back into the agent as a learning signal for future drafts.

The Approvals inbox

The Approvals inbox in the dashboard shows all pending approvals across all your agents, sorted by recency. Each approval card shows:

  • Which agent requested the action
  • What it wants to do — the action type in plain English (e.g., "Send email to Alex Kim at Acme Corp")
  • The full payload — the complete email body, recipients, subject line, or PR diff
  • Evidence citations — for questionnaire responses, which claims are backed by codebase evidence
  • Confidence indicators — claims flagged as low-confidence are highlighted in yellow for careful review
  • Edit, Approve, and Deny buttons

Editing before approving

You can edit the agent's draft directly in the approval view. Click Edit on any approval to modify:

  • Email body, subject line, or recipients
  • Questionnaire response text
  • PR description or title
  • Any other field in the action payload

Your edits are saved to the approval record and used when the action executes. The agent receives a signal that the draft was modified, which informs future drafts.

Approvals via Slack

Configure a Slack channel as your approval channel in Settings → Channels → Add Channel → Slack.

When an approval is created, the agent posts a summary to your configured Slack channel. You can Approve or Deny directly from Slack using the button controls — no need to open the dashboard.

For email draft approvals, the Slack message includes the full email body in a collapsible block so you can review without switching context.

Bulk approvals

If you have multiple similar approvals pending (e.g., a batch of outreach email drafts to a lead list), you can bulk-approve from the Approvals inbox:

  1. Select multiple approvals using the checkboxes
  2. Click Bulk Approve — all selected approvals execute in sequence
  3. Or click Bulk Deny to discard all selected drafts

Bulk approval is only available when all selected approvals are of the same type. You cannot bulk-approve across mixed action types.

Approval expiry

Approvals that are not acted on expire after 7 days by default. Expired approvals are automatically denied and logged. You can configure the expiry window per-agent in Agents → [Agent] → Settings → Approval Expiry.

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.

Skills are the right tool when you want to:

  • Add a new trigger for an existing action
  • Notify a specific person or channel when something happens
  • Change how the agent handles a specific input pattern
  • Add a daily or weekly scheduled check

Creating a Skill

  1. Go to Agents → [Your Agent] → Skills → New Skill
  2. Type a plain-English description of what you want:

    "Notify the sales team in Slack whenever a lead replies mentioning a competitor like OpenAI, Anthropic, or Cohere"

  3. The Skill Builder generates YAML for you to review
  4. Approve the skill — it activates immediately
  5. You can disable or delete the skill at any time

Example Skills

Competitor signal detection:

id: sales.flag_competitor_mentions
version: 1.0.0
agent: sales-agent
triggers:
- on: session.message_received
when:
any:
- message.content.matches: "(?i)\\b(OpenAI|Anthropic|Cohere|Mistral|LangChain)\\b"
actions:
- type: emit_artifact
artifact_type: sales.competitor_signal
- type: notify
target: { role: "sales_lead" }
channel: slack
message: "Competitor mentioned in lead reply: {{message.content}}"

Pricing inquiry alert:

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|budget|how much)\\b"
actions:
- type: emit_artifact
artifact_type: sales.pricing_signal
- type: notify
target: { role: "cro" }
channel: slack

Weekly AI readiness pulse:

id: ai-readiness.weekly-pulse
version: 1.0.0
agent: ai-readiness-agent
triggers:
- on: daily_tick
when:
schedule:
day_of_week: monday
time: "08:00"
timezone: "America/New_York"
actions:
- type: dispatch_task
task_type: ai_readiness.gap_summary
input: { scope: "delta_since_last" }
- type: notify
target: { role: "cto" }
channel: slack
message: "Weekly AI Readiness pulse complete. {{artifact.data.new_gaps}} new gaps found since last week."

Skill hooks

Skills attach to agent lifecycle events:

HookWhen it fires
before_taskBefore a task starts — can modify task input
after_taskAfter a task completes — can trigger follow-up tasks
before_session_messageBefore the agent processes an incoming message
after_session_messageAfter the agent generates a response
on_artifact_emittedWhen any artifact is created — can trigger notifications
on_approval_requestedWhen an approval enters the inbox
on_approval_resolvedWhen an approval is granted or denied
daily_tickOnce per day at a configured time — for scheduled checks

Managing Skills

All active skills appear in Agents → [Agent] → Skills. From this panel you can:

  • Toggle a skill on or off without deleting it
  • Edit the YAML directly (changes require re-approval)
  • View logs — every skill execution is logged with the trigger event and the actions taken
  • Delete a skill permanently

Skills are versioned — updating a skill creates a new version while keeping the history. You can roll back to any previous version from the version history panel.

Skills vs custom integrations

Skills are the right tool for behavioral extensions within an existing agent. If you need to build an entirely new agent with custom task types, use the Remote Agent Protocol to build and register an agent that runs on your own infrastructure.

What's next