Skip to content
Preview

Quickstart

A minimal end-to-end Flexor example: configure a vault, write a skill, wire an agent, and run it.

Last updated: 2026-04-30

Quickstart

This guide walks through a minimal end-to-end Flexor setup: a data freshness alert agent that monitors a feed and sends a notification when the feed is late.

Specification - implementation in progress. The flexor CLI commands below reflect the specified interface. If you are running this in a PLEXI sandbox, consult your onboarding guide for the current command surface.

What you will build

An agent that:

  1. Runs on a schedule (every 30 minutes)
  2. Checks whether a named data feed has been updated in the last 30 minutes
  3. If the feed is stale, sends a structured alert message
  4. Logs the result to the vault audit trail

Step 1 - Initialize a project

mkdir fund-ops-agents
cd fund-ops-agents
flexor init

Step 2 - Configure the vault

Open vault.json and set your environment:

{
  "name": "fund-ops",
  "tier": "L2",
  "environment": "sandbox",
  "data": {
    "catalog": "plexifact://sandbox/catalog"
  }
}

Step 3 - Define the skill

Create vaults/company/skills/data-freshness-check.yaml:

name: data-freshness-check
version: "1.0"
description: "Check whether a named feed in the PlexiFact catalog was updated within a given window."

inputs:
  feed_name:
    type: string
    required: true
  max_age_minutes:
    type: integer
    default: 30

outputs:
  is_fresh:
    type: boolean
  last_updated:
    type: string   # ISO-8601 timestamp
  staleness_minutes:
    type: integer

steps:
  - action: plexifact.catalog.get_feed_metadata
    args:
      feed: "{{ inputs.feed_name }}"
    capture: feed_meta
  - action: core.time.diff_minutes
    args:
      from: "{{ feed_meta.last_ingested_at }}"
      to: "{{ now() }}"
    capture: staleness
  - action: core.logic.set_output
    args:
      is_fresh: "{{ staleness <= inputs.max_age_minutes }}"
      last_updated: "{{ feed_meta.last_ingested_at }}"
      staleness_minutes: "{{ staleness }}"

Step 4 - Define the agent

Create vaults/company/agents/feed-monitor.yaml:

name: feed-monitor
description: "Monitor critical data feeds for freshness. Alert on stale feeds."

trigger:
  type: schedule
  cron: "*/30 * * * *"   # every 30 minutes

tasks:
  - skill: data-freshness-check
    args:
      feed_name: "equity-prices"
      max_age_minutes: 30
    capture: freshness_result

  - condition: "{{ !freshness_result.is_fresh }}"
    skill: core.notify.slack
    args:
      channel: "#data-ops"
      message: |
        Feed alert: equity-prices is {{ freshness_result.staleness_minutes }} min stale.
        Last updated: {{ freshness_result.last_updated }}

  - skill: core.audit.log
    args:
      event: "feed_freshness_check"
      result: "{{ freshness_result }}"

Step 5 - Validate and deploy

Validate the configuration:

flexor validate

Expected output:

✓ vault.json - valid
✓ skills/data-freshness-check.yaml - valid
✓ agents/feed-monitor.yaml - valid
2 entities ready to deploy.

Deploy to sandbox:

flexor deploy --env sandbox

Step 6 - Monitor the first run

flexor logs --agent feed-monitor --tail

The agent will run at the next 30-minute mark. To trigger it immediately in the sandbox:

flexor run feed-monitor --now

Next steps

  • Read Concepts for a deeper explanation of each primitive.
  • Read Vault configuration to understand the full vault.json schema.
  • Read Skill anatomy to understand how the YAML structure maps to execution.

Was this page helpful?

Edit on GitHub