80 lines
3.0 KiB
YAML
80 lines
3.0 KiB
YAML
name: pulse_check
|
|
description: "Crimson Leaf holding company health scan -- Edgar checks all DB projects every 3 hours."
|
|
debug: true
|
|
model: power
|
|
system: agent_prompt
|
|
agent_prompt:
|
|
- "= identity.md"
|
|
sections:
|
|
- agent
|
|
- project
|
|
- rag
|
|
- message
|
|
- instructions
|
|
builders:
|
|
message: |
|
|
*** PORTFOLIO REPORT ***
|
|
{steps[0].text}
|
|
steps:
|
|
# Step 0: pull live data for ALL companies currently in the database
|
|
- type: tool
|
|
action: get_portfolio_report
|
|
output_key: portfolio_data
|
|
|
|
# Step 1: extract flat list of active projects across all subsidiaries
|
|
- type: think
|
|
max_tokens: 600
|
|
hint: |
|
|
You are Edgar, CEO of Crimson Leaf Holdings.
|
|
The portfolio report above lists every company and project registered in the system.
|
|
Extract every ACTIVE project from every subsidiary company (exclude "crimson_leaf" itself).
|
|
Exclude any project with status "completed" or "archived".
|
|
Exclude any project named "management", "incubation", or "model-testing".
|
|
Output ONLY a JSON array on a single line. Each element must be an object with exactly
|
|
two keys: "company" (the company slug) and "project" (the project slug).
|
|
Example:
|
|
[{"company":"crimson_leaf_publishing","project":"cypress-bend"},{"company":"crimson_leaf_marketing","project":"book-marketing-agency"}]
|
|
If there are no active projects, output: []
|
|
|
|
# Step 2: package the array so foreach can source it
|
|
- type: package
|
|
schema: '{"projects": [{"company": "string", "project": "string"}]}'
|
|
hint: |
|
|
The previous step produced a JSON array like:
|
|
[{"company":"crimson_leaf_publishing","project":"cypress-bend"},{"company":"crimson_leaf_marketing","project":"book-marketing-agency"}]
|
|
Wrap the entire array as the "projects" value. Copy ALL items exactly as-is.
|
|
Output: {"projects": <the full array from the input, no changes>}
|
|
Every item must keep exactly the "company" and "project" keys as strings.
|
|
|
|
# Step 3: dispatch a project_review task to each active project
|
|
- type: foreach
|
|
source: projects
|
|
step:
|
|
type: tool
|
|
action: enqueue_strategy
|
|
optional: true
|
|
params:
|
|
company_slug: "{loop.item.company}"
|
|
project_slug: "{loop.item.project}"
|
|
task_type: "project_review"
|
|
content: "Pulse-check: Edgar requesting project review."
|
|
|
|
# Step 4: brief health summary to Discord
|
|
- type: think
|
|
max_tokens: 150
|
|
hint: |
|
|
Write a 2-line status update for Discord.
|
|
Line 1: "Pulse [HEALTHY/ATTENTION/IDLE] -- <N> projects reviewed"
|
|
Line 2: one sentence noting anything flagged (failures, idle projects, workers down,
|
|
cost anomalies -- flag if total_spend_usd_today > $1.00 or any company
|
|
cost_per_task_usd_30d > $5.00) or "All systems nominal."
|
|
Use data from the portfolio report. 2 lines max. No extra commentary.
|
|
|
|
- type: reply
|
|
target: channel
|
|
channel_name: "crimson_leaf:general"
|
|
hint: |
|
|
Post the 2-line status summary above verbatim. No preamble.
|
|
|
|
adjudication:
|
|
enabled: false |