@adaptic/maestro 1.8.2 → 1.8.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/bin/maestro.mjs +15 -3
- package/package.json +1 -1
- package/plugins/maestro-skills/skills/board-deck.md +2 -2
- package/plugins/maestro-skills/skills/decision-brief.md +6 -6
- package/plugins/maestro-skills/skills/draft-comms.md +9 -9
- package/plugins/maestro-skills/skills/evening-wrap.md +2 -2
- package/plugins/maestro-skills/skills/hiring-triage.md +4 -4
- package/plugins/maestro-skills/skills/inbox-triage.md +5 -5
- package/plugins/maestro-skills/skills/morning-brief.md +4 -4
- package/plugins/maestro-skills/skills/pipeline-review.md +2 -2
- package/plugins/maestro-skills/skills/regulatory-status.md +2 -2
- package/plugins/maestro-skills/skills/schedule-meeting.md +3 -3
- package/plugins/maestro-skills/skills/slack-followup.md +5 -5
- package/plugins/maestro-skills/skills/weekly-memo.md +5 -5
- package/scaffold/CLAUDE.md +21 -0
- package/scripts/daemon/classifier.mjs +21 -5
- package/scripts/hooks/block-mcp-slack-send.sh +1 -1
- package/scripts/huddle/audio-bridge.mjs +17 -17
- package/scripts/huddle/boot-slack-cdp.sh +1 -1
- package/scripts/huddle/huddle-controller.mjs +3 -3
- package/scripts/huddle/huddle-server.mjs +21 -7
- package/scripts/huddle/launch-slack.sh +2 -2
- package/scripts/huddle/package-lock.json +2 -2
- package/scripts/huddle/package.json +2 -2
- package/scripts/huddle/setup-audio.sh +6 -6
- package/scripts/huddle/start-call.mjs +2 -2
- package/scripts/huddle/test-pipeline.mjs +2 -2
- package/scripts/parse-voice-transcript.mjs +4 -9
- package/scripts/poller/gmail-poller.mjs +8 -2
- package/scripts/poller/intra-session-check.mjs +4 -3
- package/scripts/poller-launchd/install.sh +48 -10
- package/scripts/pre_draft_lookup.py +2 -2
- package/scripts/self-optimization/compute-metrics.py +23 -2
- package/scripts/setup/boot-claude-session.sh +14 -5
- package/scripts/setup/render-environment-yaml.mjs +133 -0
- package/scripts/watchdog/ai.maestro.memory-watchdog.plist +3 -3
- package/scripts/watchdog/force-reboot.sh +3 -3
- package/scripts/watchdog/memory-watchdog.sh +11 -5
- package/workflows/continuous/backlog-executor.yaml +1 -1
- package/workflows/continuous/inbound-monitor.yaml +10 -10
- package/workflows/daily/applicant-triage.yaml +4 -4
- package/workflows/daily/comms-triage.yaml +3 -3
- package/workflows/daily/evening-wrap.yaml +1 -1
- package/workflows/daily/morning-brief.yaml +2 -2
- package/workflows/daily/slack-followup-sweep.yaml +3 -3
- package/workflows/event-driven/README.md +5 -5
- package/workflows/event-driven/agent-failure-investigation.yaml +1 -1
- package/workflows/event-driven/pr-review.yaml +6 -3
- package/workflows/monthly/board-readiness.yaml +1 -1
- package/workflows/quarterly/strategic-scenario-analysis.yaml +1 -1
- package/workflows/session-protocol.md +7 -7
- package/workflows/weekly/engineering-health.yaml +1 -1
- package/workflows/weekly/hiring-review.yaml +4 -4
- package/workflows/weekly/rollup-pipeline-review.yaml +1 -1
- package/workflows/weekly/strategic-memo.yaml +1 -1
|
@@ -26,8 +26,9 @@ set -euo pipefail
|
|
|
26
26
|
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
27
27
|
MAESTRO_DIR="$(cd "$SCRIPT_DIR/../.." && pwd)"
|
|
28
28
|
|
|
29
|
-
# Auto-detect agent directory (
|
|
30
|
-
# The watchdog runs from maestro but protects the whole machine
|
|
29
|
+
# Auto-detect agent directory (any ~/<name>-ai or override via AGENT_DIR env).
|
|
30
|
+
# The watchdog runs from maestro but protects the whole machine — agents are
|
|
31
|
+
# discovered dynamically rather than hardcoded.
|
|
31
32
|
AGENT_DIR="${AGENT_DIR:-}"
|
|
32
33
|
|
|
33
34
|
# --- Ensure system paths are available ----------------------------------------
|
|
@@ -203,9 +204,14 @@ trigger_emergency_stop() {
|
|
|
203
204
|
echo "$reason" > "$stop_file"
|
|
204
205
|
log_event "critical" "emergency_stop_triggered" "$reason"
|
|
205
206
|
|
|
206
|
-
# Also create in any detected agent
|
|
207
|
-
|
|
208
|
-
|
|
207
|
+
# Also create in any detected agent directory. Discovers ~/<name>-ai
|
|
208
|
+
# directories dynamically so the watchdog protects every agent on this
|
|
209
|
+
# machine without a hardcoded list. AGENT_DIR override still wins.
|
|
210
|
+
if [ -n "$AGENT_DIR" ] && [ -d "$AGENT_DIR" ]; then
|
|
211
|
+
echo "$reason" > "$AGENT_DIR/.emergency-stop" 2>/dev/null || true
|
|
212
|
+
fi
|
|
213
|
+
for agent_dir in "$HOME"/*-ai; do
|
|
214
|
+
if [ -d "$agent_dir" ] && [ -f "$agent_dir/config/agent.json" ]; then
|
|
209
215
|
echo "$reason" > "$agent_dir/.emergency-stop" 2>/dev/null || true
|
|
210
216
|
fi
|
|
211
217
|
done
|
|
@@ -135,7 +135,7 @@ steps:
|
|
|
135
135
|
on_failure:
|
|
136
136
|
action: log-and-notify
|
|
137
137
|
message: "Backlog executor cycle failed at step {failed_step}"
|
|
138
|
-
notify:
|
|
138
|
+
notify: agent-self # the executing agent (operator)
|
|
139
139
|
severity: high
|
|
140
140
|
# If quota-gate fails, the entire cycle is skipped — this is by design
|
|
141
141
|
quota_gate_failure: skip_cycle
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# Continuous Inbound Monitoring Loop
|
|
2
2
|
# Runs perpetually via launchd — polls all channels and dispatches responses
|
|
3
|
-
# This is the heartbeat of
|
|
3
|
+
# This is the heartbeat of the agent's always-on executive operations
|
|
4
4
|
|
|
5
5
|
name: inbound-monitor
|
|
6
6
|
type: continuous # Not scheduled — runs as a persistent loop
|
|
@@ -17,7 +17,7 @@ monitors:
|
|
|
17
17
|
interval_seconds: 60
|
|
18
18
|
scope:
|
|
19
19
|
- type: mentions
|
|
20
|
-
description: Any @mention of
|
|
20
|
+
description: Any @mention of the agent or the principal
|
|
21
21
|
- type: dms
|
|
22
22
|
description: All direct messages
|
|
23
23
|
- type: channels
|
|
@@ -65,8 +65,8 @@ dispatch:
|
|
|
65
65
|
|
|
66
66
|
routing:
|
|
67
67
|
direct-reply:
|
|
68
|
-
handler:
|
|
69
|
-
description:
|
|
68
|
+
handler: agent-self # the executing agent (operator)
|
|
69
|
+
description: The agent handles directly — default route for most inbound
|
|
70
70
|
max_response_time: 120 # 2 minutes for DMs, 5 minutes for channels
|
|
71
71
|
priority: highest
|
|
72
72
|
|
|
@@ -77,11 +77,11 @@ dispatch:
|
|
|
77
77
|
max_concurrent: 5
|
|
78
78
|
|
|
79
79
|
escalate-to-ceo:
|
|
80
|
-
handler:
|
|
80
|
+
handler: agent-self # the executing agent (operator)
|
|
81
81
|
description: >
|
|
82
|
-
Alert
|
|
83
|
-
deal terms, or genuinely strategic decisions.
|
|
84
|
-
method: slack-dm # DM
|
|
82
|
+
Alert the principal only for binding commitments, regulatory submissions,
|
|
83
|
+
deal terms, or genuinely strategic decisions. The agent decides when this applies.
|
|
84
|
+
method: slack-dm # DM the principal on Slack
|
|
85
85
|
fallback: whatsapp # If Slack unavailable, WhatsApp
|
|
86
86
|
|
|
87
87
|
defer:
|
|
@@ -90,11 +90,11 @@ dispatch:
|
|
|
90
90
|
output: outputs/inbound/deferred/
|
|
91
91
|
|
|
92
92
|
# Autonomous response rules
|
|
93
|
-
#
|
|
93
|
+
# The agent is fully autonomous — she responds to all inbound communications
|
|
94
94
|
# using her own judgement as Chief of Staff. No per-message approval gates.
|
|
95
95
|
autonomous_response:
|
|
96
96
|
enabled: true
|
|
97
|
-
mode: full_autonomy #
|
|
97
|
+
mode: full_autonomy # The agent decides what to send and when
|
|
98
98
|
categories:
|
|
99
99
|
- id: dm-response
|
|
100
100
|
description: Respond to any DM from any workspace user
|
|
@@ -107,7 +107,7 @@ steps:
|
|
|
107
107
|
classification: outputs/briefs/daily/{date}/candidate-classification.md
|
|
108
108
|
category: advance
|
|
109
109
|
tone: warm_professional
|
|
110
|
-
voice:
|
|
110
|
+
voice: agent
|
|
111
111
|
sla: 24h
|
|
112
112
|
outputs:
|
|
113
113
|
file: outputs/comms/hiring/{date}/daily-advance-drafts.md
|
|
@@ -123,7 +123,7 @@ steps:
|
|
|
123
123
|
classification: outputs/briefs/daily/{date}/candidate-classification.md
|
|
124
124
|
category: hold
|
|
125
125
|
tone: professional
|
|
126
|
-
voice:
|
|
126
|
+
voice: agent
|
|
127
127
|
outputs:
|
|
128
128
|
file: outputs/comms/hiring/{date}/daily-hold-drafts.md
|
|
129
129
|
|
|
@@ -138,7 +138,7 @@ steps:
|
|
|
138
138
|
classification: outputs/briefs/daily/{date}/candidate-classification.md
|
|
139
139
|
category: reject
|
|
140
140
|
tone: kind_encouraging
|
|
141
|
-
voice:
|
|
141
|
+
voice: agent
|
|
142
142
|
sla: 48h
|
|
143
143
|
outputs:
|
|
144
144
|
file: outputs/comms/hiring/{date}/daily-rejection-drafts.md
|
|
@@ -191,7 +191,7 @@ steps:
|
|
|
191
191
|
on_failure:
|
|
192
192
|
action: log-and-notify
|
|
193
193
|
message: "Daily applicant triage failed at step {failed_step}"
|
|
194
|
-
notify:
|
|
194
|
+
notify: agent-self # the executing agent (operator)
|
|
195
195
|
severity: medium
|
|
196
196
|
|
|
197
197
|
final_output: outputs/briefs/daily/{date}/applicant-triage.md
|
|
@@ -29,7 +29,7 @@ steps:
|
|
|
29
29
|
timeout: 300
|
|
30
30
|
parallel_with: slack-scan
|
|
31
31
|
inputs:
|
|
32
|
-
account:
|
|
32
|
+
account: "{{agent.email}}" # resolved from config/agent.json at workflow execution
|
|
33
33
|
mode: observe
|
|
34
34
|
last_triage: "{last_run_timestamp}"
|
|
35
35
|
outputs:
|
|
@@ -63,7 +63,7 @@ steps:
|
|
|
63
63
|
update: knowledge/memory/executive-memory.yaml # add to open_loops
|
|
64
64
|
|
|
65
65
|
- id: route-actions
|
|
66
|
-
agent:
|
|
66
|
+
agent: agent-self # the executing agent (operator)
|
|
67
67
|
action: route-action-items
|
|
68
68
|
description: Route extracted action items to appropriate queues and agents
|
|
69
69
|
timeout: 120
|
|
@@ -76,5 +76,5 @@ steps:
|
|
|
76
76
|
on_failure:
|
|
77
77
|
action: log-and-notify
|
|
78
78
|
message: "Communications triage failed at step {failed_step}"
|
|
79
|
-
notify:
|
|
79
|
+
notify: agent-self # the executing agent (operator)
|
|
80
80
|
severity: high
|
|
@@ -99,7 +99,7 @@ steps:
|
|
|
99
99
|
on_failure:
|
|
100
100
|
action: log-and-notify
|
|
101
101
|
message: "Evening wrap workflow failed at step {failed_step}"
|
|
102
|
-
notify:
|
|
102
|
+
notify: agent-self # the executing agent (operator)
|
|
103
103
|
severity: medium
|
|
104
104
|
|
|
105
105
|
final_output: outputs/briefs/daily/{date}/ceo-evening-wrap.md
|
|
@@ -62,7 +62,7 @@ steps:
|
|
|
62
62
|
timeout: 300
|
|
63
63
|
parallel_with: market-sweep
|
|
64
64
|
inputs:
|
|
65
|
-
account:
|
|
65
|
+
account: "{{agent.email}}" # resolved from config/agent.json at workflow execution
|
|
66
66
|
mode: observe # read-only, never act
|
|
67
67
|
priority_senders: [] # from config/contacts.yaml
|
|
68
68
|
outputs:
|
|
@@ -157,7 +157,7 @@ steps:
|
|
|
157
157
|
on_failure:
|
|
158
158
|
action: log-and-notify
|
|
159
159
|
message: "Morning brief workflow failed at step {failed_step}"
|
|
160
|
-
notify:
|
|
160
|
+
notify: agent-self # the executing agent (operator)
|
|
161
161
|
severity: high
|
|
162
162
|
|
|
163
163
|
# Output
|
|
@@ -43,7 +43,7 @@ steps:
|
|
|
43
43
|
depends_on: [check-commitments]
|
|
44
44
|
inputs:
|
|
45
45
|
overdue_items: outputs/followups/daily/{date}/slack-commitments-status.md
|
|
46
|
-
voice:
|
|
46
|
+
voice: agent # Follow up in the agent's own voice (mode resolved from config/agent.json voiceModes)
|
|
47
47
|
outputs:
|
|
48
48
|
file: outputs/followups/daily/{date}/slack-followup-drafts.md
|
|
49
49
|
|
|
@@ -56,7 +56,7 @@ steps:
|
|
|
56
56
|
policy: policies/communications-policy.yaml
|
|
57
57
|
outputs:
|
|
58
58
|
approved: [] # messages cleared for sending
|
|
59
|
-
pending_approval: [] # messages needing
|
|
59
|
+
pending_approval: [] # messages needing the principal's review
|
|
60
60
|
|
|
61
61
|
- id: send-approved
|
|
62
62
|
agent: slack-operator
|
|
@@ -83,5 +83,5 @@ steps:
|
|
|
83
83
|
on_failure:
|
|
84
84
|
action: log-and-notify
|
|
85
85
|
message: "Slack follow-up sweep failed at step {failed_step}"
|
|
86
|
-
notify:
|
|
86
|
+
notify: agent-self # the executing agent (operator)
|
|
87
87
|
severity: medium
|
|
@@ -7,14 +7,14 @@ These workflows trigger in response to events rather than on a schedule.
|
|
|
7
7
|
### High-Priority Inbound Message
|
|
8
8
|
|
|
9
9
|
- **Trigger**: Message from CEO, investor, or board member detected during monitoring
|
|
10
|
-
- **Action**: Immediately surface to
|
|
11
|
-
- **Agent**: slack-operator or gmail-operator →
|
|
10
|
+
- **Action**: Immediately surface to the agent, classify urgency, prepare response options
|
|
11
|
+
- **Agent**: slack-operator or gmail-operator → the agent operator
|
|
12
12
|
|
|
13
13
|
### Regulatory Development
|
|
14
14
|
|
|
15
15
|
- **Trigger**: DFSA announcement, regulatory change, or compliance alert
|
|
16
16
|
- **Action**: Assess impact on Adaptic, update regulatory tracker, brief CEO if material
|
|
17
|
-
- **Agent**: regulatory-dfsa →
|
|
17
|
+
- **Agent**: regulatory-dfsa → the agent operator
|
|
18
18
|
|
|
19
19
|
### Pipeline Target Event
|
|
20
20
|
|
|
@@ -26,7 +26,7 @@ These workflows trigger in response to events rather than on a schedule.
|
|
|
26
26
|
|
|
27
27
|
- **Trigger**: Build failure, test regression, or production alert in adapticai repo
|
|
28
28
|
- **Action**: Assess severity, route to engineering-coordination, brief if material
|
|
29
|
-
- **Agent**: engineering-coordination →
|
|
29
|
+
- **Agent**: engineering-coordination → the agent operator
|
|
30
30
|
|
|
31
31
|
### Calendar Event Approaching
|
|
32
32
|
|
|
@@ -38,7 +38,7 @@ These workflows trigger in response to events rather than on a schedule.
|
|
|
38
38
|
|
|
39
39
|
- **Trigger**: Decision deadline approaching (from decision-log)
|
|
40
40
|
- **Action**: Surface decision with options, remind of deadline, escalate if needed
|
|
41
|
-
- **Agent**: decision-log →
|
|
41
|
+
- **Agent**: decision-log → the agent operator
|
|
42
42
|
|
|
43
43
|
## Implementation
|
|
44
44
|
|
|
@@ -131,7 +131,7 @@ steps:
|
|
|
131
131
|
on_failure:
|
|
132
132
|
action: log-and-notify
|
|
133
133
|
message: "Agent failure investigation failed for session {trigger.session_id}"
|
|
134
|
-
notify:
|
|
134
|
+
notify: agent-self # the executing agent (operator)
|
|
135
135
|
severity: medium
|
|
136
136
|
|
|
137
137
|
final_output: outputs/investigations/{date}/{session_id}/root-cause.md
|
|
@@ -7,12 +7,15 @@ type: event-driven
|
|
|
7
7
|
trigger:
|
|
8
8
|
event: pull_request
|
|
9
9
|
actions: [opened, synchronize]
|
|
10
|
-
|
|
10
|
+
# Repository list is loaded from config/repo-registry.yaml at runtime so
|
|
11
|
+
# each agent watches the set of repos relevant to its own scope. The
|
|
12
|
+
# entries below are illustrative defaults the framework ships with; agents
|
|
13
|
+
# override them in their own repo-registry.yaml.
|
|
14
|
+
repos:
|
|
11
15
|
- adapticai/engine
|
|
12
16
|
- adapticai/backend
|
|
13
17
|
- adapticai/frontend
|
|
14
18
|
- adapticai/maestro
|
|
15
|
-
- adapticai/sophie-ai
|
|
16
19
|
description: >
|
|
17
20
|
Automated PR review pipeline. When a PR is opened or updated, runs structural
|
|
18
21
|
blast radius analysis via code-review-graph, then produces a review brief.
|
|
@@ -98,7 +101,7 @@ steps:
|
|
|
98
101
|
on_failure:
|
|
99
102
|
action: log-and-notify
|
|
100
103
|
message: "PR review workflow failed for {trigger.repo}#{trigger.pr_number} at step {failed_step}"
|
|
101
|
-
notify:
|
|
104
|
+
notify: agent-self # the executing agent (operator)
|
|
102
105
|
severity: low # PR review failure is inconvenient but not critical
|
|
103
106
|
|
|
104
107
|
final_output: outputs/reviews/{repo}/{pr_number}/review-brief.md
|
|
@@ -70,7 +70,7 @@ steps:
|
|
|
70
70
|
on_failure:
|
|
71
71
|
action: log-and-notify
|
|
72
72
|
message: "Board readiness review failed at step {failed_step}"
|
|
73
|
-
notify:
|
|
73
|
+
notify: agent-self # the executing agent (operator)
|
|
74
74
|
severity: medium
|
|
75
75
|
|
|
76
76
|
final_output: outputs/board/monthly/{date}/board-readiness-review.md
|
|
@@ -79,7 +79,7 @@ steps:
|
|
|
79
79
|
on_failure:
|
|
80
80
|
action: log-and-notify
|
|
81
81
|
message: "Quarterly scenario analysis failed at step {failed_step}"
|
|
82
|
-
notify:
|
|
82
|
+
notify: agent-self # the executing agent (operator)
|
|
83
83
|
severity: medium
|
|
84
84
|
|
|
85
85
|
final_output: outputs/memos/quarterly/{date}/strategic-scenario-analysis.md
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# Session Protocol
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
The agent's session lifecycle defines what happens at the start, during, and end of every Claude Code session. This protocol ensures the agent never misses a message — even while deep in complex tasks.
|
|
4
4
|
|
|
5
5
|
## Architecture
|
|
6
6
|
|
|
@@ -9,7 +9,7 @@ Two complementary polling layers run simultaneously:
|
|
|
9
9
|
| Layer | Mechanism | Interval | Scope |
|
|
10
10
|
| ------------------------ | ------------------------------------------------------- | ---------- | ----------------------------------------------------------------------------------------------------- |
|
|
11
11
|
| **External poller** | `scripts/poller/index.mjs` via macOS launchd | 60 seconds | All Slack channels, Gmail, Calendar — runs continuously whether or not a session is active |
|
|
12
|
-
| **Intra-session poller** | `scripts/poller/intra-session-check.mjs` via CronCreate | 2 minutes | CEO DM channel (
|
|
12
|
+
| **Intra-session poller** | `scripts/poller/intra-session-check.mjs` via CronCreate | 2 minutes | CEO DM channel (<principal-dm-channel-id>), critical channels (#ceo-office, #engineering, #all-adaptic), inbox scan |
|
|
13
13
|
|
|
14
14
|
Combined worst-case latency for detecting a CEO message: ~90 seconds.
|
|
15
15
|
|
|
@@ -46,7 +46,7 @@ Every new Claude Code session begins with this sequence:
|
|
|
46
46
|
|
|
47
47
|
- Create a 2-minute recurring job using CronCreate
|
|
48
48
|
- The job runs `scripts/poller/intra-session-check.mjs`
|
|
49
|
-
- This is the critical step that prevents
|
|
49
|
+
- This is the critical step that prevents the agent from going dark during long tasks
|
|
50
50
|
|
|
51
51
|
### 7. Log session start
|
|
52
52
|
|
|
@@ -58,7 +58,7 @@ Every 2 minutes, the CronCreate job runs the intra-session check:
|
|
|
58
58
|
|
|
59
59
|
### What it checks
|
|
60
60
|
|
|
61
|
-
1. **CEO DM channel** (
|
|
61
|
+
1. **CEO DM channel** (<principal-dm-channel-id>) — last 5 minutes of messages from the principal (CEO)
|
|
62
62
|
2. **Critical Slack channels** — #ceo-office, #engineering, #all-adaptic — last 3 minutes
|
|
63
63
|
3. **Inbox directories** — count of unprocessed items across all services
|
|
64
64
|
4. **Existing triggers** — count of pending priority triggers
|
|
@@ -76,9 +76,9 @@ A priority trigger file is created at `state/triggers/priority/` when:
|
|
|
76
76
|
```yaml
|
|
77
77
|
type: priority_trigger
|
|
78
78
|
reason: "CEO DM detected during intra-session poll"
|
|
79
|
-
source: "slack
|
|
80
|
-
sender: "
|
|
81
|
-
channel: "dm
|
|
79
|
+
source: "slack:<principal-dm-channel-id>:1775164334.094809"
|
|
80
|
+
sender: "<principal-slug>" # resolved from config/agent.json
|
|
81
|
+
channel: "dm/<principal-slug>" # resolved from config/agent.json
|
|
82
82
|
timestamp: "2026-04-03T09:10:00Z"
|
|
83
83
|
detected_by: intra-session-check
|
|
84
84
|
content: |
|
|
@@ -148,7 +148,7 @@ steps:
|
|
|
148
148
|
on_failure:
|
|
149
149
|
action: log-and-notify
|
|
150
150
|
message: "Engineering health check failed at step {failed_step}"
|
|
151
|
-
notify:
|
|
151
|
+
notify: agent-self # the executing agent (operator)
|
|
152
152
|
severity: medium
|
|
153
153
|
|
|
154
154
|
final_output: outputs/engineering/weekly/{date}/engineering-health-report.md
|
|
@@ -65,7 +65,7 @@ steps:
|
|
|
65
65
|
screening_results: outputs/briefs/weekly/{date}/screening-results.md
|
|
66
66
|
category: advance
|
|
67
67
|
tone: warm_professional
|
|
68
|
-
voice:
|
|
68
|
+
voice: agent
|
|
69
69
|
outputs:
|
|
70
70
|
file: outputs/comms/hiring/{date}/advance-drafts.md
|
|
71
71
|
|
|
@@ -80,7 +80,7 @@ steps:
|
|
|
80
80
|
screening_results: outputs/briefs/weekly/{date}/screening-results.md
|
|
81
81
|
category: reject
|
|
82
82
|
tone: kind_encouraging
|
|
83
|
-
voice:
|
|
83
|
+
voice: agent
|
|
84
84
|
outputs:
|
|
85
85
|
file: outputs/comms/hiring/{date}/rejection-drafts.md
|
|
86
86
|
|
|
@@ -95,7 +95,7 @@ steps:
|
|
|
95
95
|
screening_results: outputs/briefs/weekly/{date}/screening-results.md
|
|
96
96
|
category: hold
|
|
97
97
|
tone: professional
|
|
98
|
-
voice:
|
|
98
|
+
voice: agent
|
|
99
99
|
outputs:
|
|
100
100
|
file: outputs/comms/hiring/{date}/hold-drafts.md
|
|
101
101
|
|
|
@@ -163,7 +163,7 @@ steps:
|
|
|
163
163
|
on_failure:
|
|
164
164
|
action: log-and-notify
|
|
165
165
|
message: "Weekly hiring review failed at step {failed_step}"
|
|
166
|
-
notify:
|
|
166
|
+
notify: agent-self # the executing agent (operator)
|
|
167
167
|
severity: high
|
|
168
168
|
|
|
169
169
|
final_output: outputs/briefs/weekly/{date}/hiring-status.md
|
|
@@ -70,7 +70,7 @@ steps:
|
|
|
70
70
|
on_failure:
|
|
71
71
|
action: log-and-notify
|
|
72
72
|
message: "Rollup pipeline review failed at step {failed_step}"
|
|
73
|
-
notify:
|
|
73
|
+
notify: agent-self # the executing agent (operator)
|
|
74
74
|
severity: medium
|
|
75
75
|
|
|
76
76
|
final_output: outputs/briefs/weekly/{date}/rollup-pipeline-review.md
|
|
@@ -73,7 +73,7 @@ steps:
|
|
|
73
73
|
on_failure:
|
|
74
74
|
action: log-and-notify
|
|
75
75
|
message: "Weekly strategic memo failed at step {failed_step}"
|
|
76
|
-
notify:
|
|
76
|
+
notify: agent-self # the executing agent (operator)
|
|
77
77
|
severity: medium
|
|
78
78
|
|
|
79
79
|
final_output: outputs/memos/weekly/{date}/strategic-memo.md
|