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
flexorCLI 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:
- Runs on a schedule (every 30 minutes)
- Checks whether a named data feed has been updated in the last 30 minutes
- If the feed is stale, sends a structured alert message
- 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.jsonschema. - Read Skill anatomy to understand how the YAML structure maps to execution.
Was this page helpful?
Previous
Installation
Next
Core concepts