@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.
Files changed (83) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +272 -0
  3. package/agents/critic.md +74 -0
  4. package/agents/enricher.md +56 -0
  5. package/agents/lesson-drafter.md +64 -0
  6. package/agents/pattern-detector.md +62 -0
  7. package/agents/promotion-arbiter.md +71 -0
  8. package/agents/prospector.md +51 -0
  9. package/agents/writer.md +58 -0
  10. package/bin/roster.js +2093 -0
  11. package/lib/.gitkeep +0 -0
  12. package/package.json +68 -0
  13. package/skills/chief-of-staff/SKILL.md +218 -0
  14. package/skills/dreamer/SKILL.md +112 -0
  15. package/skills/roster-orchestrator/SKILL.md +122 -0
  16. package/skills/sdr/SKILL.md +147 -0
  17. package/templates/CLAUDE.project.template.md +45 -0
  18. package/templates/CONTEXT.template.md +51 -0
  19. package/templates/env.example +25 -0
  20. package/templates/gitignore-defaults.txt +28 -0
  21. package/templates/scaffold/.config/functions.yaml +22 -0
  22. package/templates/scaffold/chief-of-staff/README.md +86 -0
  23. package/templates/scaffold/chief-of-staff/agent.md +122 -0
  24. package/templates/scaffold/chief-of-staff/logs/.gitkeep +0 -0
  25. package/templates/scaffold/chief-of-staff/plans/add-agent-to-project.yaml +45 -0
  26. package/templates/scaffold/chief-of-staff/plans/archive-project.yaml +51 -0
  27. package/templates/scaffold/chief-of-staff/plans/audit-agent.yaml +32 -0
  28. package/templates/scaffold/chief-of-staff/plans/audit-project.yaml +34 -0
  29. package/templates/scaffold/chief-of-staff/plans/audit-repo.yaml +26 -0
  30. package/templates/scaffold/chief-of-staff/plans/create-agent.yaml +123 -0
  31. package/templates/scaffold/chief-of-staff/plans/create-function.yaml +48 -0
  32. package/templates/scaffold/chief-of-staff/plans/create-project.yaml +65 -0
  33. package/templates/scaffold/chief-of-staff/plans/remove-agent-from-project.yaml +50 -0
  34. package/templates/scaffold/chief-of-staff/plans/rename-project.yaml +62 -0
  35. package/templates/scaffold/chief-of-staff/plans/unarchive-project.yaml +41 -0
  36. package/templates/scaffold/chief-of-staff/playbook/.gitkeep +0 -0
  37. package/templates/scaffold/conventions.md +608 -0
  38. package/templates/scaffold/design/.gitkeep +0 -0
  39. package/templates/scaffold/design/EXPERT.md +68 -0
  40. package/templates/scaffold/dreamer/README.md +32 -0
  41. package/templates/scaffold/dreamer/agent.md +101 -0
  42. package/templates/scaffold/dreamer/logs/.gitkeep +0 -0
  43. package/templates/scaffold/dreamer/pending/.gitkeep +0 -0
  44. package/templates/scaffold/dreamer/plans/nightly-reflection.yaml +113 -0
  45. package/templates/scaffold/dreamer/playbook/.gitkeep +0 -0
  46. package/templates/scaffold/dreamer/state.md +13 -0
  47. package/templates/scaffold/dreamer/subagents/lesson-drafter.md +56 -0
  48. package/templates/scaffold/dreamer/subagents/pattern-detector.md +55 -0
  49. package/templates/scaffold/dreamer/subagents/promotion-arbiter.md +64 -0
  50. package/templates/scaffold/gtm/EXPERT.md +83 -0
  51. package/templates/scaffold/gtm/sdr/.claude/settings.json +3 -0
  52. package/templates/scaffold/gtm/sdr/.mcp.json +21 -0
  53. package/templates/scaffold/gtm/sdr/README.md +46 -0
  54. package/templates/scaffold/gtm/sdr/agent.md +136 -0
  55. package/templates/scaffold/gtm/sdr/plans/cold-outreach.yaml +92 -0
  56. package/templates/scaffold/gtm/sdr/playbook/.gitkeep +0 -0
  57. package/templates/scaffold/gtm/sdr/projects/_demo/asset-references.md +7 -0
  58. package/templates/scaffold/gtm/sdr/projects/_demo/config/default.yaml +69 -0
  59. package/templates/scaffold/gtm/sdr/projects/_demo/log/feedback/.gitkeep +0 -0
  60. package/templates/scaffold/gtm/sdr/projects/_demo/log/runs/.gitkeep +0 -0
  61. package/templates/scaffold/gtm/sdr/projects/_demo/playbook/.gitkeep +0 -0
  62. package/templates/scaffold/gtm/sdr/subagents/critic.md +67 -0
  63. package/templates/scaffold/gtm/sdr/subagents/enricher.md +49 -0
  64. package/templates/scaffold/gtm/sdr/subagents/prospector.md +44 -0
  65. package/templates/scaffold/gtm/sdr/subagents/writer.md +51 -0
  66. package/templates/scaffold/logs/cron/.gitkeep +0 -0
  67. package/templates/scaffold/ops/.gitkeep +0 -0
  68. package/templates/scaffold/ops/EXPERT.md +84 -0
  69. package/templates/scaffold/product/.gitkeep +0 -0
  70. package/templates/scaffold/product/EXPERT.md +87 -0
  71. package/templates/scaffold/projects/_demo/CLAUDE.md +35 -0
  72. package/templates/scaffold/projects/_demo/README.md +16 -0
  73. package/templates/scaffold/projects/_demo/assets/.gitkeep +0 -0
  74. package/templates/scaffold/projects/_demo/config/default.yaml +28 -0
  75. package/templates/scaffold/projects/_demo/guidelines/asset-links.md +15 -0
  76. package/templates/scaffold/projects/_demo/guidelines/brand-book.md +25 -0
  77. package/templates/scaffold/projects/_demo/guidelines/icps/_persona-template.md +44 -0
  78. package/templates/scaffold/projects/_demo/guidelines/messaging.md +20 -0
  79. package/templates/scaffold/projects/_demo/guidelines/voice.md +29 -0
  80. package/templates/scaffold/projects/_demo/state.md +11 -0
  81. package/templates/scaffold/scripts/lib/README.md +13 -0
  82. package/templates/scaffold/scripts/lib/functions.sh +89 -0
  83. 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,3 @@
1
+ {
2
+ "_comment": "Agent-scoped Claude Code settings for sdr. Inherited universal settings from agent-team/.claude/settings.json."
3
+ }
@@ -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.