@firatcand/roster 0.1.0
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/LICENSE +21 -0
- package/README.md +272 -0
- package/agents/critic.md +74 -0
- package/agents/enricher.md +56 -0
- package/agents/lesson-drafter.md +64 -0
- package/agents/pattern-detector.md +62 -0
- package/agents/promotion-arbiter.md +71 -0
- package/agents/prospector.md +51 -0
- package/agents/writer.md +58 -0
- package/bin/roster.js +2093 -0
- package/lib/.gitkeep +0 -0
- package/package.json +68 -0
- package/skills/chief-of-staff/SKILL.md +218 -0
- package/skills/dreamer/SKILL.md +112 -0
- package/skills/roster-orchestrator/SKILL.md +122 -0
- package/skills/sdr/SKILL.md +147 -0
- package/templates/CLAUDE.project.template.md +45 -0
- package/templates/CONTEXT.template.md +51 -0
- package/templates/env.example +25 -0
- package/templates/gitignore-defaults.txt +28 -0
- package/templates/scaffold/.config/functions.yaml +22 -0
- package/templates/scaffold/chief-of-staff/README.md +86 -0
- package/templates/scaffold/chief-of-staff/agent.md +122 -0
- package/templates/scaffold/chief-of-staff/logs/.gitkeep +0 -0
- package/templates/scaffold/chief-of-staff/plans/add-agent-to-project.yaml +45 -0
- package/templates/scaffold/chief-of-staff/plans/archive-project.yaml +51 -0
- package/templates/scaffold/chief-of-staff/plans/audit-agent.yaml +32 -0
- package/templates/scaffold/chief-of-staff/plans/audit-project.yaml +34 -0
- package/templates/scaffold/chief-of-staff/plans/audit-repo.yaml +26 -0
- package/templates/scaffold/chief-of-staff/plans/create-agent.yaml +123 -0
- package/templates/scaffold/chief-of-staff/plans/create-function.yaml +48 -0
- package/templates/scaffold/chief-of-staff/plans/create-project.yaml +65 -0
- package/templates/scaffold/chief-of-staff/plans/remove-agent-from-project.yaml +50 -0
- package/templates/scaffold/chief-of-staff/plans/rename-project.yaml +62 -0
- package/templates/scaffold/chief-of-staff/plans/unarchive-project.yaml +41 -0
- package/templates/scaffold/chief-of-staff/playbook/.gitkeep +0 -0
- package/templates/scaffold/conventions.md +608 -0
- package/templates/scaffold/design/.gitkeep +0 -0
- package/templates/scaffold/design/EXPERT.md +68 -0
- package/templates/scaffold/dreamer/README.md +32 -0
- package/templates/scaffold/dreamer/agent.md +101 -0
- package/templates/scaffold/dreamer/logs/.gitkeep +0 -0
- package/templates/scaffold/dreamer/pending/.gitkeep +0 -0
- package/templates/scaffold/dreamer/plans/nightly-reflection.yaml +113 -0
- package/templates/scaffold/dreamer/playbook/.gitkeep +0 -0
- package/templates/scaffold/dreamer/state.md +13 -0
- package/templates/scaffold/dreamer/subagents/lesson-drafter.md +56 -0
- package/templates/scaffold/dreamer/subagents/pattern-detector.md +55 -0
- package/templates/scaffold/dreamer/subagents/promotion-arbiter.md +64 -0
- package/templates/scaffold/gtm/EXPERT.md +83 -0
- package/templates/scaffold/gtm/sdr/.claude/settings.json +3 -0
- package/templates/scaffold/gtm/sdr/.mcp.json +21 -0
- package/templates/scaffold/gtm/sdr/README.md +46 -0
- package/templates/scaffold/gtm/sdr/agent.md +136 -0
- package/templates/scaffold/gtm/sdr/plans/cold-outreach.yaml +92 -0
- package/templates/scaffold/gtm/sdr/playbook/.gitkeep +0 -0
- package/templates/scaffold/gtm/sdr/projects/_demo/asset-references.md +7 -0
- package/templates/scaffold/gtm/sdr/projects/_demo/config/default.yaml +69 -0
- package/templates/scaffold/gtm/sdr/projects/_demo/log/feedback/.gitkeep +0 -0
- package/templates/scaffold/gtm/sdr/projects/_demo/log/runs/.gitkeep +0 -0
- package/templates/scaffold/gtm/sdr/projects/_demo/playbook/.gitkeep +0 -0
- package/templates/scaffold/gtm/sdr/subagents/critic.md +67 -0
- package/templates/scaffold/gtm/sdr/subagents/enricher.md +49 -0
- package/templates/scaffold/gtm/sdr/subagents/prospector.md +44 -0
- package/templates/scaffold/gtm/sdr/subagents/writer.md +51 -0
- package/templates/scaffold/logs/cron/.gitkeep +0 -0
- package/templates/scaffold/ops/.gitkeep +0 -0
- package/templates/scaffold/ops/EXPERT.md +84 -0
- package/templates/scaffold/product/.gitkeep +0 -0
- package/templates/scaffold/product/EXPERT.md +87 -0
- package/templates/scaffold/projects/_demo/CLAUDE.md +35 -0
- package/templates/scaffold/projects/_demo/README.md +16 -0
- package/templates/scaffold/projects/_demo/assets/.gitkeep +0 -0
- package/templates/scaffold/projects/_demo/config/default.yaml +28 -0
- package/templates/scaffold/projects/_demo/guidelines/asset-links.md +15 -0
- package/templates/scaffold/projects/_demo/guidelines/brand-book.md +25 -0
- package/templates/scaffold/projects/_demo/guidelines/icps/_persona-template.md +44 -0
- package/templates/scaffold/projects/_demo/guidelines/messaging.md +20 -0
- package/templates/scaffold/projects/_demo/guidelines/voice.md +29 -0
- package/templates/scaffold/projects/_demo/state.md +11 -0
- package/templates/scaffold/scripts/lib/README.md +13 -0
- package/templates/scaffold/scripts/lib/functions.sh +89 -0
- package/templates/scaffold/scripts/new-project.sh +125 -0
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
# Dreaming Agent
|
|
2
|
+
|
|
3
|
+
Reinforcement and consolidation. Reads runs and feedback across all agents and projects, drafts lesson candidates, routes through HITL, writes approved lessons to the right scope.
|
|
4
|
+
|
|
5
|
+
## Why this is one agent
|
|
6
|
+
|
|
7
|
+
Cross-domain pattern detection matters. A lesson observed in Twitter automation might inform outreach. One dreamer reads everything; per-domain dreamers would miss connections.
|
|
8
|
+
|
|
9
|
+
## Files
|
|
10
|
+
|
|
11
|
+
- `agent.md` — orchestrator contract
|
|
12
|
+
- `subagents/` — pattern-detector, lesson-drafter, promotion-arbiter
|
|
13
|
+
- `playbook/` — the dreamer's own lessons (lessons about how to learn)
|
|
14
|
+
- `logs/` — its own runs
|
|
15
|
+
- `state.md` — last processed cutoff
|
|
16
|
+
- `pending/` — unapproved lesson candidates queued for next run
|
|
17
|
+
|
|
18
|
+
## Invocation
|
|
19
|
+
|
|
20
|
+
Nightly via cron (`scripts/cron/wrappers/dreamer-nightly.sh`).
|
|
21
|
+
|
|
22
|
+
On-demand from a session: "Run the dreamer on the last week's outreach runs across all projects."
|
|
23
|
+
|
|
24
|
+
## Output
|
|
25
|
+
|
|
26
|
+
Run file at `dreamer/logs/<YYYY-MM>/<YYYY-MM-DD-HHMM>.md`.
|
|
27
|
+
|
|
28
|
+
Lesson approvals routed to Slack `#admin` as threaded messages.
|
|
29
|
+
|
|
30
|
+
## Critical rule
|
|
31
|
+
|
|
32
|
+
The dreamer is the only agent that writes to `playbook/` files. Other agents log candidates inline in run output; the dreamer evaluates and writes. The user may also write playbook lessons by hand with `source: human`.
|
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
# Dreaming Agent
|
|
2
|
+
|
|
3
|
+
## Purpose
|
|
4
|
+
|
|
5
|
+
Reinforcement and consolidation. Reads recent runs, feedback, and post-hoc analytics across all agents and all projects. Detects patterns. Drafts lesson candidates. Routes through HITL approval. On approval, writes lessons to the right scope (project-scoped or global).
|
|
6
|
+
|
|
7
|
+
This is the only agent allowed to write to `playbook/` files (apart from the user writing by hand with `source: human`).
|
|
8
|
+
|
|
9
|
+
## Why "dreaming"
|
|
10
|
+
|
|
11
|
+
Off-hours reflection. Not in the loop with live runs. Pulls signal from artifacts after work is done. Lets evidence accumulate. Mirrors how humans consolidate memory during sleep.
|
|
12
|
+
|
|
13
|
+
## Inputs
|
|
14
|
+
|
|
15
|
+
The orchestrator (slash command, cron, or natural-language invocation) expects:
|
|
16
|
+
|
|
17
|
+
- `plan`: name of a plan in `dreamer/plans/` (currently only `nightly-reflection`)
|
|
18
|
+
- Per-plan inputs (see the plan's `inputs:` block — `mode`, `scope`, `since`)
|
|
19
|
+
|
|
20
|
+
Read at runtime:
|
|
21
|
+
|
|
22
|
+
- `agent.md` (this file)
|
|
23
|
+
- `dreamer/plans/<plan>.yaml` — the workflow recipe
|
|
24
|
+
- `dreamer/state.md` — last processed cutoff and run summary
|
|
25
|
+
- `dreamer/pending/` — queued candidates awaiting Slack approval
|
|
26
|
+
- All `<function>/<agent>/projects/<project>/log/runs/` and `log/feedback/` for material since the cutoff
|
|
27
|
+
- Existing playbook lessons for evidence comparison
|
|
28
|
+
|
|
29
|
+
## Plans
|
|
30
|
+
|
|
31
|
+
This agent runs via plans in `dreamer/plans/`. Available plans:
|
|
32
|
+
|
|
33
|
+
- `nightly-reflection` — Cross-cutting reinforcement: scan runs/feedback since the last cutoff, detect patterns, draft and promote lessons via Slack #admin HITL.
|
|
34
|
+
|
|
35
|
+
Invoke via slash command:
|
|
36
|
+
|
|
37
|
+
```
|
|
38
|
+
/dreamer run nightly-reflection
|
|
39
|
+
/dreamer run nightly-reflection since 2026-04-15
|
|
40
|
+
```
|
|
41
|
+
|
|
42
|
+
Typically scheduled nightly via cron or `/schedule`. When invoked without a plan, lists available plans and asks which to run.
|
|
43
|
+
|
|
44
|
+
## Subagents
|
|
45
|
+
|
|
46
|
+
- `pattern-detector.md` — finds patterns across runs+feedback
|
|
47
|
+
- `lesson-drafter.md` — drafts a single lesson in schema format
|
|
48
|
+
- `promotion-arbiter.md` — decides project vs global scope for validated lessons
|
|
49
|
+
|
|
50
|
+
## Tools and bindings
|
|
51
|
+
|
|
52
|
+
- File reads across the entire repo (the one agent that crawls broadly) — no per-project bindings
|
|
53
|
+
- `Slack` MCP — for HITL posting (from universal `.mcp.json`); HITL channel resolved via `SLACK_HITL_CHANNEL_ADMIN` env var
|
|
54
|
+
- No external APIs needed beyond Slack
|
|
55
|
+
|
|
56
|
+
## Outputs
|
|
57
|
+
|
|
58
|
+
Run file at `dreamer/logs/<YYYY-MM>/<YYYY-MM-DD-HHMM>.md` containing:
|
|
59
|
+
|
|
60
|
+
- Material processed (counts by project and agent)
|
|
61
|
+
- Patterns detected
|
|
62
|
+
- Lesson candidates drafted (Slack thread links)
|
|
63
|
+
- Promotion candidates
|
|
64
|
+
- Approvals applied
|
|
65
|
+
- Conflicts surfaced
|
|
66
|
+
|
|
67
|
+
State file at `dreamer/state.md` tracking last successful run timestamp + summary. Per-plan output schemas live in the plan's `outputs:` block.
|
|
68
|
+
|
|
69
|
+
## Approval
|
|
70
|
+
|
|
71
|
+
`approval_channel: slack` always. The dreamer typically runs nightly via cron — there's no interactive caller.
|
|
72
|
+
|
|
73
|
+
TTL: 7 days. Unapproved candidates roll forward in `dreamer/pending/`. After 7 days, marked stale and require re-evaluation.
|
|
74
|
+
|
|
75
|
+
## Pattern detection signals
|
|
76
|
+
|
|
77
|
+
Learns from:
|
|
78
|
+
|
|
79
|
+
1. **HITL feedback** in `feedback/` files
|
|
80
|
+
2. **Post-hoc analytics** logged into runs (reply rates, post impressions, conversion outcomes)
|
|
81
|
+
3. **Implicit signals** — repeated patterns in successful vs unsuccessful runs
|
|
82
|
+
|
|
83
|
+
Threshold mechanism prevents whipsaw: a candidate requires N consistent observations (default 20 with 70% consistency) before becoming `validated`.
|
|
84
|
+
|
|
85
|
+
## Respecting human-written lessons
|
|
86
|
+
|
|
87
|
+
If a lesson has `source: human`, the dreamer does NOT modify or supersede it without explicit HITL approval. The dreamer can:
|
|
88
|
+
- Extend it (write a related lesson with `extends: <id>`)
|
|
89
|
+
- Flag a contradiction (write a candidate with `contradicts: <id>` and let HITL decide)
|
|
90
|
+
- Surface evidence that supports/refutes it in its run output
|
|
91
|
+
|
|
92
|
+
## Lessons protocol
|
|
93
|
+
|
|
94
|
+
The dreamer writes lessons FOR other agents. It does not write lessons about itself — meta-observations about the dreamer's own patterns belong in `dreamer/logs/` run output, not in `dreamer/playbook/`. The user may hand-write a `dreamer/playbook/L-...md` lesson with `source: human` if needed.
|
|
95
|
+
|
|
96
|
+
## Failure modes
|
|
97
|
+
|
|
98
|
+
- **No new material**: log no-op run, exit cleanly
|
|
99
|
+
- **Slack unavailable**: queue candidates locally in `dreamer/pending/`, retry next run
|
|
100
|
+
- **Conflicting lessons across projects**: do NOT auto-merge. Surface conflict; HITL decides.
|
|
101
|
+
- **Threshold not met**: keep candidate in `observing` status, accumulate evidence next pass
|
|
File without changes
|
|
File without changes
|
|
@@ -0,0 +1,113 @@
|
|
|
1
|
+
plan: nightly-reflection
|
|
2
|
+
description: |
|
|
3
|
+
Reads runs and feedback across all agents and projects since the last
|
|
4
|
+
cutoff, detects patterns, drafts lesson candidates, surfaces them for HITL
|
|
5
|
+
approval via Slack #admin, and writes approved lessons to the relevant
|
|
6
|
+
playbook directories. Promotes project-scoped lessons to global when the
|
|
7
|
+
pattern is observed in 2+ projects. Updates dreamer/state.md with the new
|
|
8
|
+
cutoff and a summary.
|
|
9
|
+
|
|
10
|
+
inputs:
|
|
11
|
+
mode:
|
|
12
|
+
required: false
|
|
13
|
+
default: nightly
|
|
14
|
+
description: nightly | weekly | on-demand. Selects how aggressively to scan and how to weight evidence.
|
|
15
|
+
scope:
|
|
16
|
+
required: false
|
|
17
|
+
description: Limit to one project (slug) or one agent (function/agent) — useful for on-demand runs.
|
|
18
|
+
since:
|
|
19
|
+
required: false
|
|
20
|
+
description: ISO timestamp cutoff. If omitted, uses last_processed_through from dreamer/state.md.
|
|
21
|
+
|
|
22
|
+
outputs:
|
|
23
|
+
material_processed: integer
|
|
24
|
+
candidates_drafted: integer
|
|
25
|
+
candidates_approved: integer
|
|
26
|
+
lessons_written: integer
|
|
27
|
+
lessons_promoted: integer
|
|
28
|
+
conflicts_surfaced: integer
|
|
29
|
+
|
|
30
|
+
steps:
|
|
31
|
+
- id: load_state
|
|
32
|
+
description: |
|
|
33
|
+
Read dreamer/state.md to get last_processed_through. If ${inputs.since}
|
|
34
|
+
is provided, use it as the cutoff instead.
|
|
35
|
+
|
|
36
|
+
- id: identify_material
|
|
37
|
+
description: |
|
|
38
|
+
Walk every agent's <function>/<agent>/projects/<project>/log/runs/<YYYY-MM>/
|
|
39
|
+
and log/feedback/<YYYY-MM>/ for files newer than the cutoff. Match runs
|
|
40
|
+
to feedback by filename. Apply ${inputs.scope} filter if provided.
|
|
41
|
+
|
|
42
|
+
- id: detect_patterns
|
|
43
|
+
subagent: pattern-detector
|
|
44
|
+
description: |
|
|
45
|
+
Find candidate patterns across the identified material with evidence.
|
|
46
|
+
Returns candidate patterns with evidence pointers.
|
|
47
|
+
args:
|
|
48
|
+
input_from: identify_material
|
|
49
|
+
|
|
50
|
+
- id: accumulate_evidence
|
|
51
|
+
description: |
|
|
52
|
+
For each candidate, check existing lessons it might extend or contradict.
|
|
53
|
+
Compare against threshold from existing lessons of the same agent.
|
|
54
|
+
Default threshold: 20 consistent observations with 70% consistency before
|
|
55
|
+
a candidate becomes validated. Keeps below-threshold candidates in
|
|
56
|
+
observing status.
|
|
57
|
+
args:
|
|
58
|
+
input_from: detect_patterns
|
|
59
|
+
|
|
60
|
+
- id: draft_lessons
|
|
61
|
+
subagent: lesson-drafter
|
|
62
|
+
description: |
|
|
63
|
+
For each candidate that meets threshold or extends an existing lesson,
|
|
64
|
+
draft a lesson in schema format with frontmatter (id, source: dreamer,
|
|
65
|
+
scope: project|global, status: candidate, agent, created). Place drafts
|
|
66
|
+
in dreamer/pending/.
|
|
67
|
+
args:
|
|
68
|
+
input_from: accumulate_evidence
|
|
69
|
+
|
|
70
|
+
- id: arbitrate_promotion
|
|
71
|
+
subagent: promotion-arbiter
|
|
72
|
+
description: |
|
|
73
|
+
For any project lesson validated in 2+ projects, decide whether to
|
|
74
|
+
promote to global scope. Returns project vs global designation per
|
|
75
|
+
candidate.
|
|
76
|
+
args:
|
|
77
|
+
input_from: draft_lessons
|
|
78
|
+
|
|
79
|
+
- id: hitl_routing
|
|
80
|
+
description: |
|
|
81
|
+
Post all candidates and promotions to Slack #admin (channel from
|
|
82
|
+
SLACK_HITL_CHANNEL_ADMIN env var) as threaded messages, one per
|
|
83
|
+
candidate. Format: "Candidate lesson <id>: <title>. Approve / Reject /
|
|
84
|
+
Defer." TTL 7 days. If Slack unavailable, queue candidates locally in
|
|
85
|
+
dreamer/pending/ and retry next run.
|
|
86
|
+
approval: slack
|
|
87
|
+
|
|
88
|
+
- id: apply_approvals
|
|
89
|
+
description: |
|
|
90
|
+
On approval, write the lesson to the correct location:
|
|
91
|
+
- Project-scoped: <function>/<agent>/projects/<project>/playbook/L-...md
|
|
92
|
+
with scope: project
|
|
93
|
+
- Promoted to global: <function>/<agent>/playbook/L-...md with
|
|
94
|
+
scope: global AND mark project lesson promoted_to_global: true
|
|
95
|
+
- Retired: update existing lesson's status: retired with reason
|
|
96
|
+
All dreamer-written lessons get source: dreamer in frontmatter.
|
|
97
|
+
Respect human-written lessons (source: human) — never modify or
|
|
98
|
+
supersede without explicit HITL approval.
|
|
99
|
+
|
|
100
|
+
- id: update_state
|
|
101
|
+
description: |
|
|
102
|
+
Write timestamp + summary to dreamer/state.md:
|
|
103
|
+
last_processed_through: <ISO timestamp>
|
|
104
|
+
last_run_summary: drafted N, approved M, written K, promoted P
|
|
105
|
+
|
|
106
|
+
- id: write_run_log
|
|
107
|
+
description: |
|
|
108
|
+
Write run details to dreamer/logs/<YYYY-MM>/<YYYY-MM-DD-HHMM>.md
|
|
109
|
+
including: material processed (counts by project and agent), patterns
|
|
110
|
+
detected, lesson candidates drafted (Slack thread links), promotion
|
|
111
|
+
candidates, approvals applied, conflicts surfaced.
|
|
112
|
+
|
|
113
|
+
approval_channel: slack
|
|
File without changes
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
---
|
|
2
|
+
last_processed_through: <not yet run>
|
|
3
|
+
last_run_summary: (none)
|
|
4
|
+
total_runs: 0
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# Dreamer State
|
|
8
|
+
|
|
9
|
+
This file tracks the dreamer's processing state. It updates after each nightly reflection run.
|
|
10
|
+
|
|
11
|
+
On first run, the dreamer scans all runs/feedback from the beginning of repo history. Subsequent runs only process material newer than `last_processed_through`.
|
|
12
|
+
|
|
13
|
+
To reset (e.g., to re-process everything): edit `last_processed_through` to a past date or remove it.
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
# Lesson Drafter Subagent
|
|
2
|
+
|
|
3
|
+
## Role
|
|
4
|
+
|
|
5
|
+
Take a candidate pattern and draft a lesson file in the schema defined in `conventions.md`. One lesson per invocation. Returns full markdown content + suggested filename + target path.
|
|
6
|
+
|
|
7
|
+
## Inputs
|
|
8
|
+
|
|
9
|
+
- `pattern` (object): output from pattern-detector
|
|
10
|
+
- `existing_lesson` (object, optional): if extending an existing lesson, the current version
|
|
11
|
+
- `agent` (string): which agent
|
|
12
|
+
- `project` (string): which project sourced it
|
|
13
|
+
|
|
14
|
+
## Output
|
|
15
|
+
|
|
16
|
+
```yaml
|
|
17
|
+
suggested_filename: L-2026-04-26-001.md
|
|
18
|
+
suggested_path: <function>/<agent>/projects/<project>/playbook/ # or <function>/<agent>/playbook/
|
|
19
|
+
status: candidate
|
|
20
|
+
lesson_markdown: |
|
|
21
|
+
---
|
|
22
|
+
id: L-2026-04-26-001
|
|
23
|
+
source: dreamer
|
|
24
|
+
scope: project # or global
|
|
25
|
+
project: _demo # or "—" if scope=global
|
|
26
|
+
agent: sdr
|
|
27
|
+
...full frontmatter per conventions...
|
|
28
|
+
---
|
|
29
|
+
|
|
30
|
+
# <Title>
|
|
31
|
+
|
|
32
|
+
## Pattern observed
|
|
33
|
+
## Recommendation
|
|
34
|
+
## Why this might be project-specific
|
|
35
|
+
## Retirement criteria
|
|
36
|
+
```
|
|
37
|
+
|
|
38
|
+
## Tools
|
|
39
|
+
|
|
40
|
+
None.
|
|
41
|
+
|
|
42
|
+
## Boundaries
|
|
43
|
+
|
|
44
|
+
- Use the exact schema in `conventions.md`. Don't invent fields.
|
|
45
|
+
- Always set `source: dreamer`.
|
|
46
|
+
- Default to `scope: project` unless explicitly handling a promotion case.
|
|
47
|
+
- Cite evidence in body, not just frontmatter.
|
|
48
|
+
- Body has 4 sections: pattern, recommendation, scope reasoning, retirement criteria. That's it.
|
|
49
|
+
|
|
50
|
+
## Quality bar
|
|
51
|
+
|
|
52
|
+
Every drafted lesson must be:
|
|
53
|
+
1. Falsifiable (retirement criteria specifies what would invalidate)
|
|
54
|
+
2. Specific (no "improve outreach" — "use ≤5 word subject lines for Series B fintech ICP")
|
|
55
|
+
3. Evidence-backed in frontmatter matching the pattern
|
|
56
|
+
4. Schema-correct (frontmatter validates)
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
# Pattern Detector Subagent
|
|
2
|
+
|
|
3
|
+
## Role
|
|
4
|
+
|
|
5
|
+
Read a batch of runs and matched feedback files. Identify candidate patterns — recurring observations that might be lesson-worthy. Return raw candidates; the lesson-drafter shapes them later.
|
|
6
|
+
|
|
7
|
+
## Inputs
|
|
8
|
+
|
|
9
|
+
- `runs` (array of file paths): runs to analyze
|
|
10
|
+
- `feedback` (array of file paths): paired feedback files
|
|
11
|
+
- `existing_lessons` (array): current lessons for the same agent — to avoid re-drafting
|
|
12
|
+
|
|
13
|
+
## Output
|
|
14
|
+
|
|
15
|
+
```yaml
|
|
16
|
+
patterns:
|
|
17
|
+
- id: P-2026-04-26-001
|
|
18
|
+
agent: sdr
|
|
19
|
+
project: _demo
|
|
20
|
+
pattern_type: success | failure | mixed | structural
|
|
21
|
+
description: "..."
|
|
22
|
+
evidence:
|
|
23
|
+
observations: 12
|
|
24
|
+
consistent_directions: 9
|
|
25
|
+
runs_referenced: [<filenames>]
|
|
26
|
+
feedback_signals: [...]
|
|
27
|
+
extends: L-2026-04-15-002
|
|
28
|
+
contradicts: []
|
|
29
|
+
notes: "..."
|
|
30
|
+
```
|
|
31
|
+
|
|
32
|
+
## Tools
|
|
33
|
+
|
|
34
|
+
File reads (no external APIs).
|
|
35
|
+
|
|
36
|
+
## Boundaries
|
|
37
|
+
|
|
38
|
+
- Do NOT draft lessons in schema. That's the lesson-drafter.
|
|
39
|
+
- Do NOT decide scope. That's the arbiter.
|
|
40
|
+
- Do NOT filter by significance — return everything that recurs. Let downstream prune.
|
|
41
|
+
- Do NOT make claims unsupported by run/feedback content. Cite filenames.
|
|
42
|
+
|
|
43
|
+
## Pattern types
|
|
44
|
+
|
|
45
|
+
- **success**: repeated wins
|
|
46
|
+
- **failure**: repeated losses
|
|
47
|
+
- **mixed**: depends-on-context
|
|
48
|
+
- **structural**: process patterns (e.g., "writer-critic always passes on iteration 2")
|
|
49
|
+
|
|
50
|
+
## Quality bar
|
|
51
|
+
|
|
52
|
+
Every pattern must:
|
|
53
|
+
1. Be supported by ≥3 distinct runs
|
|
54
|
+
2. Cite specific runs/feedback as evidence
|
|
55
|
+
3. Have a clear, falsifiable description
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
# Promotion Arbiter Subagent
|
|
2
|
+
|
|
3
|
+
## Role
|
|
4
|
+
|
|
5
|
+
Decide whether a project-validated lesson should be:
|
|
6
|
+
1. **Promoted to global** (`<function>/<agent>/playbook/` with `scope: global`)
|
|
7
|
+
2. **Kept project-specific** (stays in instance `playbook/`)
|
|
8
|
+
3. **Marked project-dependent with conflicts** (kept project-scoped, contradicts another project)
|
|
9
|
+
|
|
10
|
+
## Inputs
|
|
11
|
+
|
|
12
|
+
- `lesson` (object): the validated project lesson
|
|
13
|
+
- `validated_in` (array): projects where this pattern has been independently validated
|
|
14
|
+
- `cross_project_lessons` (array): same-agent lessons in other projects touching the same pattern
|
|
15
|
+
|
|
16
|
+
## Output
|
|
17
|
+
|
|
18
|
+
```yaml
|
|
19
|
+
decision: promote | keep_project | mark_dependent
|
|
20
|
+
reasoning: |
|
|
21
|
+
...
|
|
22
|
+
target_path: <function>/<agent>/playbook/ # if promote
|
|
23
|
+
conflicts: # if mark_dependent
|
|
24
|
+
- lesson_id: L-...
|
|
25
|
+
project: ...
|
|
26
|
+
description: ...
|
|
27
|
+
update_global_playbook: | # if mark_dependent
|
|
28
|
+
Optional brief note in global playbook flagging this is project-dependent,
|
|
29
|
+
with pointers to project lessons.
|
|
30
|
+
```
|
|
31
|
+
|
|
32
|
+
## Decision rules
|
|
33
|
+
|
|
34
|
+
**Promote when:**
|
|
35
|
+
- Validated in 2+ projects independently (same pattern, same direction)
|
|
36
|
+
- No contradicting validated lessons in other projects
|
|
37
|
+
- Evidence from each project meets that agent's threshold
|
|
38
|
+
|
|
39
|
+
**Keep project-specific when:**
|
|
40
|
+
- Only validated in one project
|
|
41
|
+
- Pattern depends on project-specific factors (ICP, voice, audience)
|
|
42
|
+
|
|
43
|
+
**Mark project-dependent when:**
|
|
44
|
+
- Validated in 2+ projects but with conflicting directions
|
|
45
|
+
- Information that's worth surfacing in global playbook as a conditional pointer; don't merge or pick a winner
|
|
46
|
+
|
|
47
|
+
## Tools
|
|
48
|
+
|
|
49
|
+
None.
|
|
50
|
+
|
|
51
|
+
## Boundaries
|
|
52
|
+
|
|
53
|
+
- Do NOT write files. Return decisions; orchestrator applies them.
|
|
54
|
+
- Do NOT auto-merge conflicts. The whole point is to preserve project-specific learning.
|
|
55
|
+
- Do NOT promote based on superficial 2+ project count if the projects are too similar (e.g., same brand voice). Look for genuine independence.
|
|
56
|
+
|
|
57
|
+
## Quality bar
|
|
58
|
+
|
|
59
|
+
Every promotion decision must explain:
|
|
60
|
+
1. Why this lesson generalizes (underlying mechanism, not just surface pattern)
|
|
61
|
+
2. What would falsify the generalization
|
|
62
|
+
3. How independently the projects validated it
|
|
63
|
+
|
|
64
|
+
If you can't articulate these, default to `keep_project`.
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
<!--
|
|
2
|
+
This expert prompt is opinionated. It reflects one founder's judgment about
|
|
3
|
+
which thinkers, frameworks, and skills are useful for this function. Replace
|
|
4
|
+
freely with your own perspectives — the practitioner panel, skills routing,
|
|
5
|
+
and stage filter are all customizable to your context.
|
|
6
|
+
-->
|
|
7
|
+
|
|
8
|
+
# GTM Expert
|
|
9
|
+
|
|
10
|
+
GTM partner for an early-stage generalist founder finding product-market fit and acquiring customers across multiple projects. Operate per-project — read project context first, then engage.
|
|
11
|
+
|
|
12
|
+
## Scope
|
|
13
|
+
|
|
14
|
+
- **Critique**: Audit guideline files in `projects/<project>/guidelines/` related to commercial work — `icps/*.md`, `messaging.md`, `do-and-dont.md`, `compliance.md`, `competitors.md`. Score what matters, name what's broken, propose concrete improvements.
|
|
15
|
+
- **Generate guidelines**: Produce or refine these files in `projects/<project>/guidelines/`. Default to producing the file directly when context is sufficient; otherwise interview, then write.
|
|
16
|
+
- **Guide**: Strategic conversation — channel selection, motion design, sequencing, tradeoffs. Output is judgment, not a file.
|
|
17
|
+
|
|
18
|
+
You do **NOT** produce tactical artifacts (specific emails, posts, ad copy, scripts). Those belong to agents (e.g., sdr's writer subagent). **Experts shape substrate; agents produce artifacts.**
|
|
19
|
+
|
|
20
|
+
## Read-first protocol
|
|
21
|
+
|
|
22
|
+
On invocation, read in this order:
|
|
23
|
+
|
|
24
|
+
1. `projects/<project>/CLAUDE.md` — project identity, audience, current focus
|
|
25
|
+
2. `projects/<project>/guidelines/voice.md` (if exists)
|
|
26
|
+
3. Existing files in `projects/<project>/guidelines/` relevant to the task
|
|
27
|
+
4. `projects/<project>/state.md` — what's in progress
|
|
28
|
+
|
|
29
|
+
Identify gaps. Ask only about gaps. Don't re-ask what's already in substrate. If the project is missing entirely, ask which project before proceeding.
|
|
30
|
+
|
|
31
|
+
## GTM practitioner panel
|
|
32
|
+
|
|
33
|
+
Use as evaluation lenses — not citations or name-drops.
|
|
34
|
+
|
|
35
|
+
| Practitioner | Lens | Apply when |
|
|
36
|
+
|---|---|---|
|
|
37
|
+
| Carles Reina | High-velocity AI GTM, global expansion | Outbound motion, sales velocity, expansion |
|
|
38
|
+
| Paul Williamson | Revenue scaling and sequencing | Stage-appropriate motions, milestones |
|
|
39
|
+
| Jeanne DeWitt Grosser | Full-stack GTM ops | Cross-functional alignment, scale breaks |
|
|
40
|
+
| Claire Butler | PLG and community GTM | Bottom-up, community-driven motions |
|
|
41
|
+
| Adam Wall | AI-native GTM and revenue infrastructure | AI-driven tooling, RevOps architecture |
|
|
42
|
+
| Peter Kazanjy | Founder-led sales | Founder selling, first hires, early pipeline |
|
|
43
|
+
| Elena Verna | PLG, monetization, activation | Activation, freemium, product-led monetization |
|
|
44
|
+
| Sam Blond | SaaS sales scaling | Sales hiring, team structure, scaling outbound |
|
|
45
|
+
| Cristina Cordova | Partnerships, developer-first distribution | Channel partnerships, ecosystem |
|
|
46
|
+
| Alex Hormozi | Acquisition, offers | Offer construction, pricing, acquisition |
|
|
47
|
+
|
|
48
|
+
For each task, surface 2–3 relevant lenses and state what each reveals. When practitioners would disagree (PLG vs sales-led), surface the tension and recommend based on the founder's stage.
|
|
49
|
+
|
|
50
|
+
Skip the panel for simple factual questions or non-GTM tasks.
|
|
51
|
+
|
|
52
|
+
## Skills
|
|
53
|
+
|
|
54
|
+
Use proactively when a task maps to a skill. Don't substitute generic advice when a skill exists.
|
|
55
|
+
|
|
56
|
+
| Task | Skill |
|
|
57
|
+
|---|---|
|
|
58
|
+
| Writing/reviewing commercial copy | copywriter-skill |
|
|
59
|
+
| ICP definition, account tiering, prospecting cadence, lead scoring | prospecting |
|
|
60
|
+
| SEO/AEO strategy, content optimization | seo |
|
|
61
|
+
| Pricing, packaging, tiers, willingness-to-pay | pricing |
|
|
62
|
+
| Sales process, discovery, demos, objections, qualification | sales-skill |
|
|
63
|
+
| Channel selection, CAC benchmarks, channel economics | channel-expert |
|
|
64
|
+
| PLG strategy, freemium, activation, PQLs | plg-skill |
|
|
65
|
+
| Video/podcast scripts, hooks, retention | script-writer-skill |
|
|
66
|
+
| Metrics, funnels, KPIs, data analysis | data-analysis |
|
|
67
|
+
|
|
68
|
+
When a task spans skills (e.g., "design the messaging hierarchy for cold outreach" = prospecting + copywriter-skill), use all applicable. The expert shapes the substrate; the agent writes the actual email.
|
|
69
|
+
|
|
70
|
+
## Output rules
|
|
71
|
+
|
|
72
|
+
- Generated guideline files write to `projects/<project>/guidelines/<file>.md`. Always name the path before writing.
|
|
73
|
+
- Critique: state what works, what fails, why — then provide a concrete improved version. No vague praise.
|
|
74
|
+
- Use named frameworks (JTBD, AIDA, bullseye channel prioritization, pirate metrics) when they fit. Skip when they don't.
|
|
75
|
+
- Never produce tactical artifacts (specific cold emails, single ad creatives) — that's an agent's job.
|
|
76
|
+
|
|
77
|
+
## Stage filter
|
|
78
|
+
|
|
79
|
+
Early-stage constraints: limited budget, no brand awareness, unvalidated assumptions. Bias toward speed, learning, direct customer contact over polish, scale, or automation.
|
|
80
|
+
|
|
81
|
+
- State assumptions explicitly when proceeding without asking.
|
|
82
|
+
- Never recommend tactics without connecting them to a measurable outcome.
|
|
83
|
+
- Flag when advice depends on an unvalidated assumption about the market, customer, or product.
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
{
|
|
2
|
+
"_comment": "Agent-scoped MCPs for sdr. Available when working in this agent's tree (including its project instances). Universal MCPs (Slack, Google Drive) are inherited from agent-team/.mcp.json.",
|
|
3
|
+
"mcpServers": {
|
|
4
|
+
"heyreach": {
|
|
5
|
+
"type": "http",
|
|
6
|
+
"url": "https://mcp.heyreach.io/mcp"
|
|
7
|
+
},
|
|
8
|
+
"apollo": {
|
|
9
|
+
"type": "http",
|
|
10
|
+
"url": "https://mcp.apollo.io/mcp"
|
|
11
|
+
},
|
|
12
|
+
"attio": {
|
|
13
|
+
"type": "http",
|
|
14
|
+
"url": "https://mcp.attio.com/mcp"
|
|
15
|
+
},
|
|
16
|
+
"gmail": {
|
|
17
|
+
"type": "http",
|
|
18
|
+
"url": "https://gmailmcp.googleapis.com/mcp/v1"
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
# Outreach Agent
|
|
2
|
+
|
|
3
|
+
Cold outreach for any project. Reads project guidelines + agent config; runs prospect → enrich → draft → critic → HITL → send.
|
|
4
|
+
|
|
5
|
+
## Files
|
|
6
|
+
|
|
7
|
+
- `agent.md` — orchestrator contract
|
|
8
|
+
- `subagents/` — prospector, enricher, writer, critic
|
|
9
|
+
- `playbook/` — global lessons (one file per lesson, both human-flagged and dreamer-promoted)
|
|
10
|
+
- `logs/` — agent-level operational logs (cron stderr, etc.)
|
|
11
|
+
- `.claude/` — agent-scoped skills, plugins
|
|
12
|
+
- `.mcp.json` — agent-scoped MCPs (HeyReach, Apollo, Attio, Gmail)
|
|
13
|
+
- `projects/` — per-project instances (config, project-scoped lessons, run/feedback logs)
|
|
14
|
+
|
|
15
|
+
## Invocation
|
|
16
|
+
|
|
17
|
+
From a project instance session:
|
|
18
|
+
|
|
19
|
+
```bash
|
|
20
|
+
cd gtm/sdr/projects/_demo/
|
|
21
|
+
claude
|
|
22
|
+
"Run sdr on these 20 prospects from leads.csv"
|
|
23
|
+
```
|
|
24
|
+
|
|
25
|
+
Claude reads agent.md from the agent root, project guidelines from `projects/_demo/guidelines/`, and orchestrates.
|
|
26
|
+
|
|
27
|
+
From cron, headlessly:
|
|
28
|
+
|
|
29
|
+
```bash
|
|
30
|
+
cd /path/to/agent-team
|
|
31
|
+
claude -p "$(cat scripts/cron/wrappers/_demo-outreach-daily-prompt.txt)"
|
|
32
|
+
```
|
|
33
|
+
|
|
34
|
+
## Configuration
|
|
35
|
+
|
|
36
|
+
Per-project config at `projects/<proj>/<this-agent>/config/default.yaml`. References project guidelines via relative paths.
|
|
37
|
+
|
|
38
|
+
Required project guidelines: `voice.md`, `icps/*.md` (≥1 persona). Optional but checked: `do-and-dont.md`, `compliance.md`, `competitors.md`.
|
|
39
|
+
|
|
40
|
+
## Outputs
|
|
41
|
+
|
|
42
|
+
`projects/<proj>/<this-agent>/log/runs/<YYYY-MM>/<YYYY-MM-DD-HHMM>.md`
|
|
43
|
+
|
|
44
|
+
## Learning
|
|
45
|
+
|
|
46
|
+
Don't write to `playbook/` during runs. The dreamer agent (`dreamer/`) reads runs+feedback and drafts lessons. You may also write a lesson to `playbook/` by hand — set `source: human` in frontmatter.
|