bopodev-api 0.1.34 → 0.1.35

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 (90) hide show
  1. package/package.json +5 -5
  2. package/src/app.ts +4 -2
  3. package/src/assets/starter-packs/customer-support-excellence.zip +0 -0
  4. package/src/assets/starter-packs/devrel-growth.zip +0 -0
  5. package/src/assets/starter-packs/product-delivery-trio.zip +0 -0
  6. package/src/assets/starter-packs/revenue-gtm-b2b.zip +0 -0
  7. package/src/assets/starter-packs/sources/customer-support-excellence/.bopo.yaml +129 -0
  8. package/src/assets/starter-packs/sources/customer-support-excellence/COMPANY.md +7 -0
  9. package/src/assets/starter-packs/sources/customer-support-excellence/README.md +3 -0
  10. package/src/assets/starter-packs/sources/customer-support-excellence/agents/founder-ceo/HEARTBEAT.md +5 -0
  11. package/src/assets/starter-packs/sources/customer-support-excellence/agents/support-lead/HEARTBEAT.md +5 -0
  12. package/src/assets/starter-packs/sources/customer-support-excellence/agents/support-specialist/HEARTBEAT.md +5 -0
  13. package/src/assets/starter-packs/sources/customer-support-excellence/projects/knowledge-base/PROJECT.md +7 -0
  14. package/src/assets/starter-packs/sources/customer-support-excellence/projects/quality/PROJECT.md +7 -0
  15. package/src/assets/starter-packs/sources/customer-support-excellence/projects/queue/PROJECT.md +7 -0
  16. package/src/assets/starter-packs/sources/customer-support-excellence/skills/kb-article-skeleton/SKILL.md +17 -0
  17. package/src/assets/starter-packs/sources/customer-support-excellence/skills/ticket-response-playbook/SKILL.md +15 -0
  18. package/src/assets/starter-packs/sources/customer-support-excellence/tasks/daily-queue-standup/TASK.md +11 -0
  19. package/src/assets/starter-packs/sources/customer-support-excellence/tasks/kb-gap-sweep/TASK.md +11 -0
  20. package/src/assets/starter-packs/sources/devrel-growth/.bopo.yaml +128 -0
  21. package/src/assets/starter-packs/sources/devrel-growth/COMPANY.md +7 -0
  22. package/src/assets/starter-packs/sources/devrel-growth/README.md +3 -0
  23. package/src/assets/starter-packs/sources/devrel-growth/agents/content-producer/HEARTBEAT.md +5 -0
  24. package/src/assets/starter-packs/sources/devrel-growth/agents/devrel-lead/HEARTBEAT.md +5 -0
  25. package/src/assets/starter-packs/sources/devrel-growth/agents/founder-ceo/HEARTBEAT.md +5 -0
  26. package/src/assets/starter-packs/sources/devrel-growth/projects/community/PROJECT.md +7 -0
  27. package/src/assets/starter-packs/sources/devrel-growth/projects/docs-education/PROJECT.md +7 -0
  28. package/src/assets/starter-packs/sources/devrel-growth/projects/partners/PROJECT.md +7 -0
  29. package/src/assets/starter-packs/sources/devrel-growth/skills/changelog-to-post/SKILL.md +14 -0
  30. package/src/assets/starter-packs/sources/devrel-growth/skills/tutorial-outline/SKILL.md +15 -0
  31. package/src/assets/starter-packs/sources/devrel-growth/tasks/community-health-review/TASK.md +11 -0
  32. package/src/assets/starter-packs/sources/devrel-growth/tasks/weekly-content-plan/TASK.md +11 -0
  33. package/src/assets/starter-packs/sources/product-delivery-trio/.bopo.yaml +138 -0
  34. package/src/assets/starter-packs/sources/product-delivery-trio/COMPANY.md +7 -0
  35. package/src/assets/starter-packs/sources/product-delivery-trio/README.md +9 -0
  36. package/src/assets/starter-packs/sources/product-delivery-trio/agents/engineer-ic/HEARTBEAT.md +5 -0
  37. package/src/assets/starter-packs/sources/product-delivery-trio/agents/founder-ceo/HEARTBEAT.md +6 -0
  38. package/src/assets/starter-packs/sources/product-delivery-trio/agents/product-lead/HEARTBEAT.md +5 -0
  39. package/src/assets/starter-packs/sources/product-delivery-trio/projects/delivery/PROJECT.md +7 -0
  40. package/src/assets/starter-packs/sources/product-delivery-trio/projects/quality/PROJECT.md +7 -0
  41. package/src/assets/starter-packs/sources/product-delivery-trio/projects/strategy/PROJECT.md +7 -0
  42. package/src/assets/starter-packs/sources/product-delivery-trio/skills/issue-triage/SKILL.md +21 -0
  43. package/src/assets/starter-packs/sources/product-delivery-trio/skills/rca-template/SKILL.md +16 -0
  44. package/src/assets/starter-packs/sources/product-delivery-trio/tasks/release-hygiene/TASK.md +11 -0
  45. package/src/assets/starter-packs/sources/product-delivery-trio/tasks/weekly-leadership-sync/TASK.md +11 -0
  46. package/src/assets/starter-packs/sources/revenue-gtm-b2b/.bopo.yaml +132 -0
  47. package/src/assets/starter-packs/sources/revenue-gtm-b2b/COMPANY.md +7 -0
  48. package/src/assets/starter-packs/sources/revenue-gtm-b2b/README.md +3 -0
  49. package/src/assets/starter-packs/sources/revenue-gtm-b2b/agents/founder-ceo/HEARTBEAT.md +5 -0
  50. package/src/assets/starter-packs/sources/revenue-gtm-b2b/agents/gtm-lead/HEARTBEAT.md +5 -0
  51. package/src/assets/starter-packs/sources/revenue-gtm-b2b/agents/pipeline-owner/HEARTBEAT.md +5 -0
  52. package/src/assets/starter-packs/sources/revenue-gtm-b2b/projects/customer-success/PROJECT.md +7 -0
  53. package/src/assets/starter-packs/sources/revenue-gtm-b2b/projects/deals/PROJECT.md +7 -0
  54. package/src/assets/starter-packs/sources/revenue-gtm-b2b/projects/pipeline/PROJECT.md +7 -0
  55. package/src/assets/starter-packs/sources/revenue-gtm-b2b/skills/discovery-call-brief/SKILL.md +14 -0
  56. package/src/assets/starter-packs/sources/revenue-gtm-b2b/skills/icp-scoring/SKILL.md +20 -0
  57. package/src/assets/starter-packs/sources/revenue-gtm-b2b/tasks/pipeline-hygiene/TASK.md +11 -0
  58. package/src/assets/starter-packs/sources/revenue-gtm-b2b/tasks/weekly-revenue-review/TASK.md +11 -0
  59. package/src/lib/agent-issue-permissions.ts +56 -0
  60. package/src/lib/builtin-bopo-skills/bopodev-control-plane.md +7 -0
  61. package/src/realtime/office-space.ts +7 -0
  62. package/src/routes/agents.ts +23 -1
  63. package/src/routes/assistant.ts +40 -1
  64. package/src/routes/companies.ts +227 -15
  65. package/src/routes/issues.ts +48 -0
  66. package/src/routes/plugins.ts +393 -103
  67. package/src/routes/{loops.ts → routines.ts} +72 -76
  68. package/src/scripts/onboard-seed.ts +2 -0
  69. package/src/server.ts +3 -1
  70. package/src/services/company-assistant-context-snapshot.ts +4 -2
  71. package/src/services/company-assistant-service.ts +17 -15
  72. package/src/services/company-file-archive-service.ts +56 -3
  73. package/src/services/company-file-import-service.ts +210 -31
  74. package/src/services/governance-service.ts +58 -3
  75. package/src/services/heartbeat-service/heartbeat-run.ts +7 -0
  76. package/src/services/plugin-artifact-installer.ts +115 -0
  77. package/src/services/plugin-artifact-store.ts +28 -0
  78. package/src/services/plugin-capability-policy.ts +31 -0
  79. package/src/services/plugin-jobs-service.ts +74 -0
  80. package/src/services/plugin-manifest-loader.ts +78 -3
  81. package/src/services/plugin-rpc.ts +102 -0
  82. package/src/services/plugin-runtime.ts +240 -209
  83. package/src/services/plugin-worker-host.ts +167 -0
  84. package/src/services/starter-pack-registry.ts +68 -0
  85. package/src/services/template-apply-service.ts +3 -1
  86. package/src/services/template-catalog.ts +29 -0
  87. package/src/services/work-loop-service/work-loop-service.ts +18 -18
  88. package/src/shutdown/graceful-shutdown.ts +3 -1
  89. package/src/worker/scheduler.ts +21 -1
  90. package/src/services/company-export-service.ts +0 -63
@@ -0,0 +1,138 @@
1
+ schema: bopo/company-export/v1
2
+ exportedAt: "2026-03-31T12:00:00.000Z"
3
+ company:
4
+ name: Product Delivery Trio
5
+ mission: Ship customer value every week with aligned strategy, execution, and quality.
6
+ slug: product-delivery-trio
7
+ projects:
8
+ strategy:
9
+ name: Strategy & Roadmap
10
+ description: Bets, roadmap, stakeholder alignment, and weekly priorities.
11
+ status: active
12
+ delivery:
13
+ name: Product Delivery
14
+ description: Specs, implementation, releases, and rollout.
15
+ status: active
16
+ quality:
17
+ name: Quality & Reliability
18
+ description: Tests, observability, incidents, and regression prevention.
19
+ status: active
20
+ agents:
21
+ founder-ceo:
22
+ name: Founder CEO
23
+ role: CEO
24
+ roleKey: ceo
25
+ title: Founder CEO
26
+ capabilities: Owns company outcomes, cadence, and delegation across product and engineering.
27
+ providerType: shell
28
+ heartbeatCron: "*/15 * * * *"
29
+ monthlyBudgetUsd: 200
30
+ canHireAgents: true
31
+ canAssignAgents: true
32
+ canCreateIssues: true
33
+ bootstrapPrompt: |
34
+ You are Founder CEO running a product-led organization.
35
+
36
+ Operating standards:
37
+ - Maintain one ranked stack of outcomes; cap active initiatives per agent.
38
+ - Tie work to customer impact, learning speed, and revenue or retention where relevant.
39
+ - Decline vague requests—every delegation needs owner, due date, and success signal.
40
+
41
+ Cadence:
42
+ - Week start: top 3 outcomes, owners, and explicit “not this week” list.
43
+ - Midweek: unblock, cut scope, or escalate; no silent slips.
44
+ - Week end: shipped, missed, learnings, next bets.
45
+
46
+ Decisions:
47
+ - Prefer reversible choices quickly; slow down only for irreversible risk.
48
+ - Every bet states assumption, metric, and time box.
49
+
50
+ Escalate: legal, security, spend over plan, or blockers >24h without a dated next step.
51
+
52
+ Output format for updates: objective, decision, impact, owner, due date, risks.
53
+ product-lead:
54
+ name: Product Lead
55
+ role: Product Manager
56
+ roleKey: general
57
+ title: Product Lead
58
+ capabilities: Shapes problems, specs, and acceptance criteria; aligns delivery with roadmap bets.
59
+ managerSlug: founder-ceo
60
+ providerType: shell
61
+ heartbeatCron: "*/20 * * * *"
62
+ monthlyBudgetUsd: 180
63
+ canHireAgents: false
64
+ canAssignAgents: true
65
+ canCreateIssues: true
66
+ bootstrapPrompt: |
67
+ You are Product Lead. Turn strategy into shippable slices.
68
+
69
+ Rules:
70
+ - Every initiative has problem statement, target user, non-goals, and measurable success.
71
+ - Prefer thin vertical slices over big-bang specs.
72
+ - Keep the backlog honest: one “now”, few “next”, rest “later”.
73
+
74
+ Collaboration:
75
+ - Pair with Engineering IC on feasibility and cut plans early.
76
+ - Surface trade-offs to Founder CEO with two options and a recommendation.
77
+
78
+ Deliverables: crisp issue titles, acceptance criteria, and rollout notes when shipping.
79
+ engineer-ic:
80
+ name: Senior Engineer
81
+ role: Software Engineer
82
+ roleKey: engineer
83
+ title: Senior Engineer
84
+ capabilities: Ships reliable changes with tests, observability hooks, and clear handoffs.
85
+ managerSlug: founder-ceo
86
+ providerType: shell
87
+ heartbeatCron: "*/15 * * * *"
88
+ monthlyBudgetUsd: 220
89
+ canHireAgents: false
90
+ canAssignAgents: true
91
+ canCreateIssues: true
92
+ bootstrapPrompt: |
93
+ You are Senior Engineer focused on fast, safe delivery.
94
+
95
+ Engineering bar:
96
+ - Small diffs, clear rollback story, tests where risk warrants.
97
+ - Instrument critical paths; prefer observable failures over silent bugs.
98
+ - Auth, billing, and data paths get extra scrutiny—no shortcuts.
99
+
100
+ When blocked: post blocker, proposed fix, and ETA within the same day.
101
+
102
+ Handoff format: what changed, why, how verified, follow-ups, risks.
103
+ goals:
104
+ north-star-shipping:
105
+ level: company
106
+ title: Establish a repeatable weekly shipping cadence with visible customer impact.
107
+ status: active
108
+ roadmap-clarity:
109
+ level: project
110
+ projectSlug: strategy
111
+ parentGoalSlug: north-star-shipping
112
+ title: Keep a 4-week roadmap that maps every bet to a metric and owner.
113
+ status: active
114
+ quality-gates:
115
+ level: project
116
+ projectSlug: quality
117
+ parentGoalSlug: north-star-shipping
118
+ title: No release without smoke checks and owner sign-off on rollback.
119
+ status: active
120
+ routines:
121
+ weekly-leadership-sync:
122
+ title: Weekly leadership sync — reprioritize stack and assign owners
123
+ description: Review last week outcomes, pick top 3 bets, assign and cut scope.
124
+ projectSlug: strategy
125
+ assigneeAgentSlug: founder-ceo
126
+ triggers:
127
+ - cronExpression: "0 8 * * 1"
128
+ timezone: UTC
129
+ label: Monday planning
130
+ release-hygiene:
131
+ title: Release hygiene — branches, changelog, and risk review
132
+ description: Verify release checklist, changelog draft, and rollback plan before ship window.
133
+ projectSlug: delivery
134
+ assigneeAgentSlug: engineer-ic
135
+ triggers:
136
+ - cronExpression: "0 9 * * 4"
137
+ timezone: UTC
138
+ label: Thursday pre-release
@@ -0,0 +1,7 @@
1
+ ---
2
+ name: "Product Delivery Trio"
3
+ schema: bopo/company-md/v1
4
+ slug: "product-delivery-trio"
5
+ ---
6
+
7
+ Ship customer value every week with aligned strategy, execution, and quality. Use the Strategy project for bets and priorities, Delivery for implementation, and Quality for reliability gates.
@@ -0,0 +1,9 @@
1
+ # Product Delivery Trio
2
+
3
+ Starter company: CEO + Product + Engineering with weekly leadership sync and release hygiene loops. Import this zip or pick **Product Delivery Trio** when creating a company.
4
+
5
+ - **Strategy & Roadmap** — bets, alignment, weekly stack
6
+ - **Product Delivery** — specs and shipping
7
+ - **Quality & Reliability** — tests, incidents, regressions
8
+
9
+ Skills under `skills/` support triage and post-incident review.
@@ -0,0 +1,5 @@
1
+ # Heartbeat checklist
2
+
3
+ 1. Review assigned issues; update state honestly.
4
+ 2. If Thursday release window: run release hygiene task checklist.
5
+ 3. Note any tech debt that should become a tracked issue—not a silent shortcut.
@@ -0,0 +1,6 @@
1
+ # Heartbeat checklist
2
+
3
+ 1. Scan open issues for slips, blockers, and stale assignments.
4
+ 2. Confirm Product and Engineering each have one clear “now” focus.
5
+ 3. If Monday planning loop: run full weekly sync (see task description).
6
+ 4. Post a short summary: shipped, missed, next bets, risks.
@@ -0,0 +1,5 @@
1
+ # Heartbeat checklist
2
+
3
+ 1. Triage backlog: one “now”, few “next”, honest “later”.
4
+ 2. Check in-flight issues for missing acceptance criteria or owners.
5
+ 3. Surface any CEO decision within 24h if scope or dates moved.
@@ -0,0 +1,7 @@
1
+ ---
2
+ name: "Product Delivery"
3
+ description: "Specs, implementation, releases, and rollout."
4
+ status: "active"
5
+ ---
6
+
7
+ Own the **how** of shipping. Favor vertical slices, feature flags where useful, and changelog discipline. Every release has a named owner and rollback path.
@@ -0,0 +1,7 @@
1
+ ---
2
+ name: "Quality & Reliability"
3
+ description: "Tests, observability, incidents, and regression prevention."
4
+ status: "active"
5
+ ---
6
+
7
+ Protect user trust. Track incidents to root cause, add tests or guards for regressions, and keep observability meaningful—not noisy.
@@ -0,0 +1,7 @@
1
+ ---
2
+ name: "Strategy & Roadmap"
3
+ description: "Bets, roadmap, stakeholder alignment, and weekly priorities."
4
+ status: "active"
5
+ ---
6
+
7
+ Own the **why** and **when**. Keep a visible 4-week horizon: each item links to a metric, owner, and explicit non-goals. Cut scope before dates slip; escalate trade-offs to the CEO with options.
@@ -0,0 +1,21 @@
1
+ ---
2
+ name: issue-triage
3
+ description: >
4
+ Triage incoming work into actionable issues with priority, owner, and definition of done.
5
+ ---
6
+
7
+ # Issue triage
8
+
9
+ Use when the inbox is noisy or priorities are unclear.
10
+
11
+ ## Steps
12
+
13
+ 1. **Capture** — One user or system problem per issue; split if multiple themes.
14
+ 2. **Classify** — Bug vs feature vs chore; estimate impact and urgency.
15
+ 3. **Assign** — Owner and due date; if unowned, assign to CEO for delegation.
16
+ 4. **Define done** — Observable success (test, metric, screenshot, sign-off).
17
+
18
+ ## Output
19
+
20
+ - Issue title: verb-led, specific.
21
+ - Body: context, acceptance criteria, out of scope.
@@ -0,0 +1,16 @@
1
+ ---
2
+ name: rca-template
3
+ description: >
4
+ Lightweight root-cause analysis after incidents or regressions.
5
+ ---
6
+
7
+ # Root cause template
8
+
9
+ 1. **Impact** — Who was affected, duration, severity.
10
+ 2. **Timeline** — What happened when (facts, not blame).
11
+ 3. **Root cause** — Five whys or equivalent; one primary cause.
12
+ 4. **Contributing factors** — Process, tooling, missing tests.
13
+ 5. **Remediation** — Fixes shipped or scheduled with owners.
14
+ 6. **Prevention** — Test, alert, or process change to catch this class next time.
15
+
16
+ Keep the doc short; link to tickets for execution.
@@ -0,0 +1,11 @@
1
+ ---
2
+ name: "Release hygiene — branches, changelog, and risk review"
3
+ assignee: "engineer-ic"
4
+ project: "delivery"
5
+ recurring: true
6
+ cronExpression: "0 9 * * 4"
7
+ timezone: "UTC"
8
+ label: "Thursday pre-release"
9
+ ---
10
+
11
+ Confirm branch state, draft changelog bullets, and verify rollback steps before the ship window.
@@ -0,0 +1,11 @@
1
+ ---
2
+ name: "Weekly leadership sync — reprioritize stack and assign owners"
3
+ assignee: "founder-ceo"
4
+ project: "strategy"
5
+ recurring: true
6
+ cronExpression: "0 8 * * 1"
7
+ timezone: "UTC"
8
+ label: "Monday planning"
9
+ ---
10
+
11
+ Review last week’s shipped vs missed. Set top three outcomes, owners, and dates. Publish what is explicitly **not** being worked this week.
@@ -0,0 +1,132 @@
1
+ schema: bopo/company-export/v1
2
+ exportedAt: "2026-03-31T12:00:00.000Z"
3
+ company:
4
+ name: Revenue GTM B2B
5
+ mission: Build predictable pipeline, win qualified deals, and onboard customers for expansion.
6
+ slug: revenue-gtm-b2b
7
+ projects:
8
+ pipeline:
9
+ name: Pipeline & Demand
10
+ description: ICP, outbound, inbound, and meeting generation.
11
+ status: active
12
+ deals:
13
+ name: Deals & Negotiation
14
+ description: Discovery, proposals, procurement, and closed-won hygiene.
15
+ status: active
16
+ customer-success:
17
+ name: Customer Success
18
+ description: Onboarding, health, renewals, and expansion signals.
19
+ status: active
20
+ agents:
21
+ founder-ceo:
22
+ name: Founder CEO
23
+ role: CEO
24
+ roleKey: ceo
25
+ title: Founder CEO
26
+ capabilities: Owns revenue targets, resource allocation, and cross-functional GTM cadence.
27
+ providerType: shell
28
+ heartbeatCron: "*/15 * * * *"
29
+ monthlyBudgetUsd: 200
30
+ canHireAgents: true
31
+ canAssignAgents: true
32
+ canCreateIssues: true
33
+ bootstrapPrompt: |
34
+ You are Founder CEO accountable for revenue outcomes in a B2B context.
35
+
36
+ Operating model:
37
+ - Pipeline, win rate, and expansion are reviewed weekly with explicit targets vs actuals.
38
+ - Every motion ties to ICP—say no to bad-fit pipeline early.
39
+
40
+ Cadence:
41
+ - Week start: pipeline coverage vs quota, top 3 revenue bets, blockers.
42
+ - Midweek: deal desk support and forecast refresh.
43
+ - Week end: wins/losses, learnings, next week focus.
44
+
45
+ Decisions:
46
+ - Discounts, contract terms, and partner commitments need documented rationale.
47
+ - Escalate legal, security review, or custom enterprise terms.
48
+
49
+ Output format: metric moved, decision, owner, due date, risks.
50
+ gtm-lead:
51
+ name: Head of GTM
52
+ role: Head of Sales
53
+ roleKey: general
54
+ title: Head of GTM
55
+ capabilities: Aligns marketing and sales plays, forecast, and stage definitions across the funnel.
56
+ managerSlug: founder-ceo
57
+ providerType: shell
58
+ heartbeatCron: "*/20 * * * *"
59
+ monthlyBudgetUsd: 190
60
+ canHireAgents: false
61
+ canAssignAgents: true
62
+ canCreateIssues: true
63
+ bootstrapPrompt: |
64
+ You are Head of GTM. You make the funnel legible and coachable.
65
+
66
+ Responsibilities:
67
+ - Standardize stages, exit criteria, and definitions of qualified pipeline.
68
+ - Ensure every active opp has next step, date, and economic buyer identified when relevant.
69
+ - Run forecast discipline: commit, best case, upside with evidence.
70
+
71
+ Anti-patterns:
72
+ - Vanity pipeline, missing next steps, or deals without multithreading at appropriate ACV.
73
+
74
+ Report weekly: coverage, velocity, win/loss themes, and two concrete fixes.
75
+ pipeline-owner:
76
+ name: Pipeline Owner
77
+ role: SDR Lead
78
+ roleKey: general
79
+ title: Pipeline Owner
80
+ capabilities: Generates qualified meetings and nurtures target accounts with disciplined outreach.
81
+ managerSlug: gtm-lead
82
+ providerType: shell
83
+ heartbeatCron: "*/30 * * * *"
84
+ monthlyBudgetUsd: 160
85
+ canHireAgents: false
86
+ canAssignAgents: true
87
+ canCreateIssues: true
88
+ bootstrapPrompt: |
89
+ You are Pipeline Owner (SDR-style). Your job is qualified conversations, not activity volume.
90
+
91
+ Rules:
92
+ - Research before touch; personalize using account and persona context.
93
+ - Log outcomes honestly: no, meeting booked, nurture, referral.
94
+ - Respect frequency caps and compliance (CAN-SPAM, GDPR posture as applicable).
95
+
96
+ Daily focus: new outreach, follow-ups, and CRM hygiene so reporting is trustworthy.
97
+ goals:
98
+ qualified-pipeline:
99
+ level: company
100
+ title: Maintain pipeline coverage that supports the quarterly revenue plan.
101
+ status: active
102
+ icp-discipline:
103
+ level: project
104
+ projectSlug: pipeline
105
+ parentGoalSlug: qualified-pipeline
106
+ title: Every new opportunity maps to ICP criteria and a next step within 48 hours.
107
+ status: active
108
+ onboarding-excellence:
109
+ level: project
110
+ projectSlug: customer-success
111
+ parentGoalSlug: qualified-pipeline
112
+ title: New customers reach first value milestone within the agreed window.
113
+ status: active
114
+ routines:
115
+ weekly-revenue-review:
116
+ title: Weekly revenue review — forecast and top deals
117
+ description: Refresh forecast, inspect top opportunities, assign CEO/GTM actions.
118
+ projectSlug: deals
119
+ assigneeAgentSlug: founder-ceo
120
+ triggers:
121
+ - cronExpression: "0 7 * * 1"
122
+ timezone: UTC
123
+ label: Monday revenue
124
+ pipeline-hygiene:
125
+ title: Pipeline hygiene — stale opps and next steps
126
+ description: Clear or advance stale stages; fix missing next steps in active pipeline.
127
+ projectSlug: pipeline
128
+ assigneeAgentSlug: gtm-lead
129
+ triggers:
130
+ - cronExpression: "0 16 * * 3"
131
+ timezone: UTC
132
+ label: Wednesday hygiene
@@ -0,0 +1,7 @@
1
+ ---
2
+ name: "Revenue GTM B2B"
3
+ schema: bopo/company-md/v1
4
+ slug: "revenue-gtm-b2b"
5
+ ---
6
+
7
+ Build predictable pipeline, win qualified deals, and onboard customers for expansion. Pipeline holds demand gen discipline; Deals holds active opportunities; Customer Success holds onboarding and health.
@@ -0,0 +1,3 @@
1
+ # Revenue GTM (B2B)
2
+
3
+ CEO + Head of GTM + Pipeline Owner with weekly revenue review and pipeline hygiene loops. Skills cover ICP scoring and discovery call prep.
@@ -0,0 +1,5 @@
1
+ # Heartbeat checklist
2
+
3
+ 1. Check coverage vs target and flag gaps to GTM lead.
4
+ 2. Monday: run revenue review task end-to-end.
5
+ 3. Note any deal needing founder touch this week.
@@ -0,0 +1,5 @@
1
+ # Heartbeat checklist
2
+
3
+ 1. Wednesday: pipeline hygiene task.
4
+ 2. Scan for opps without next step or with slipped dates.
5
+ 3. Sync with CEO on forecast changes before week end.
@@ -0,0 +1,5 @@
1
+ # Heartbeat checklist
2
+
3
+ 1. Clear follow-up queue; book or close loops.
4
+ 2. Log activity with enough context for GTM lead reporting.
5
+ 3. Flag account research gaps as issues.
@@ -0,0 +1,7 @@
1
+ ---
2
+ name: "Customer Success"
3
+ description: "Onboarding, health, renewals, and expansion signals."
4
+ status: "active"
5
+ ---
6
+
7
+ First value fast, then expansion. Health scores and QBRs tie to outcomes the customer cares about.
@@ -0,0 +1,7 @@
1
+ ---
2
+ name: "Deals & Negotiation"
3
+ description: "Discovery, proposals, procurement, and closed-won hygiene."
4
+ status: "active"
5
+ ---
6
+
7
+ Every opportunity has stage, value, close plan, and next step with date. Win/loss reasons are captured for learning.
@@ -0,0 +1,7 @@
1
+ ---
2
+ name: "Pipeline & Demand"
3
+ description: "ICP, outbound, inbound, and meeting generation."
4
+ status: "active"
5
+ ---
6
+
7
+ Protect ICP fit. Measure meetings booked, show rate, and SQO rate—not just emails sent.
@@ -0,0 +1,14 @@
1
+ ---
2
+ name: discovery-call-brief
3
+ description: >
4
+ Prepare a concise discovery brief before sales calls.
5
+ ---
6
+
7
+ # Discovery call brief
8
+
9
+ 1. **Hypothesis** — Why we believe they have the problem we solve.
10
+ 2. **Questions** — Pain, current process, stakeholders, budget timing, competition.
11
+ 3. **Success criteria** — What would make this call a “advance” vs “nurture vs no”.
12
+ 4. **Landmines** — Known risks (procurement, technical constraint, incumbent).
13
+
14
+ After the call: MEDDIC-style notes or your framework—consistency matters more than the acronym.
@@ -0,0 +1,20 @@
1
+ ---
2
+ name: icp-scoring
3
+ description: >
4
+ Score accounts and leads against ICP before investing pipeline effort.
5
+ ---
6
+
7
+ # ICP scoring
8
+
9
+ ## Dimensions (adjust weights to your motion)
10
+
11
+ 1. **Fit** — Industry, size, tech stack, geography.
12
+ 2. **Intent** — In-market signals, job changes, funding, product usage.
13
+ 3. **Access** — Can we reach buyers and champions?
14
+ 4. **Value** — ACV potential vs cost to serve.
15
+
16
+ ## Output
17
+
18
+ - Score 1–4 per dimension; total tier A/B/C.
19
+ - Tier C: nurture or disqualify with reason.
20
+ - Document the reason in CRM for future learning.
@@ -0,0 +1,11 @@
1
+ ---
2
+ name: "Pipeline hygiene — stale opps and next steps"
3
+ assignee: "gtm-lead"
4
+ project: "pipeline"
5
+ recurring: true
6
+ cronExpression: "0 16 * * 3"
7
+ timezone: "UTC"
8
+ label: "Wednesday hygiene"
9
+ ---
10
+
11
+ Clear stale stages, add dated next steps, and flag deals missing multithreading or economic buyer where ACV warrants.
@@ -0,0 +1,11 @@
1
+ ---
2
+ name: "Weekly revenue review — forecast and top deals"
3
+ assignee: "founder-ceo"
4
+ project: "deals"
5
+ recurring: true
6
+ cronExpression: "0 7 * * 1"
7
+ timezone: "UTC"
8
+ label: "Monday revenue"
9
+ ---
10
+
11
+ Refresh commit forecast, review top opportunities, and list CEO actions for the week.
@@ -0,0 +1,56 @@
1
+ /** Agent row fields used for issue create / assignee orchestration (agent actors only). */
2
+ export type AgentIssueOrchestrationFlags = {
3
+ canAssignAgents: boolean;
4
+ canCreateIssues: boolean;
5
+ };
6
+
7
+ export function agentIssueCreateForbiddenMessage(agent: AgentIssueOrchestrationFlags): string | null {
8
+ if (!agent.canCreateIssues) {
9
+ return "This agent is not allowed to create issues.";
10
+ }
11
+ return null;
12
+ }
13
+
14
+ /**
15
+ * POST /issues: assigning to another agent requires canAssignAgents; self or unassigned does not.
16
+ */
17
+ export function agentIssueCreateAssigneeForbiddenMessage(
18
+ agent: AgentIssueOrchestrationFlags,
19
+ actorAgentId: string,
20
+ assigneeAgentId: string | null | undefined
21
+ ): string | null {
22
+ if (assigneeAgentId == null || assigneeAgentId === "") {
23
+ return null;
24
+ }
25
+ if (assigneeAgentId === actorAgentId) {
26
+ return null;
27
+ }
28
+ if (!agent.canAssignAgents) {
29
+ return "This agent is not allowed to assign issues to other agents.";
30
+ }
31
+ return null;
32
+ }
33
+
34
+ /**
35
+ * PUT /issues when assignee changes: allow setting assignee to self without canAssignAgents;
36
+ * unassign or assign to another agent requires canAssignAgents.
37
+ */
38
+ export function agentIssuePutAssigneeChangeForbiddenMessage(
39
+ agent: AgentIssueOrchestrationFlags,
40
+ actorAgentId: string,
41
+ previousAssigneeId: string | null,
42
+ nextAssigneeId: string | null
43
+ ): string | null {
44
+ const prev = previousAssigneeId && previousAssigneeId.trim() ? previousAssigneeId.trim() : null;
45
+ const next = nextAssigneeId && nextAssigneeId.trim() ? nextAssigneeId.trim() : null;
46
+ if (prev === next) {
47
+ return null;
48
+ }
49
+ if (next === actorAgentId) {
50
+ return null;
51
+ }
52
+ if (!agent.canAssignAgents) {
53
+ return "This agent is not allowed to reassign or unassign issues (except to assign to self).";
54
+ }
55
+ return null;
56
+ }
@@ -27,6 +27,12 @@ Expected env variables:
27
27
  - `BOPODEV_ACTOR_COMPANIES`
28
28
  - `BOPODEV_ACTOR_PERMISSIONS`
29
29
 
30
+ Per-agent orchestration caps (set by the platform from the agent record; `true`/`false` strings):
31
+
32
+ - `BOPODEV_CAN_HIRE_AGENTS` — may call `POST /agents` to hire (still subject to governance).
33
+ - `BOPODEV_CAN_ASSIGN_AGENTS` — may assign/reassign issues to other agents or unassign; assigning to self is allowed when this is `false`.
34
+ - `BOPODEV_CAN_CREATE_ISSUES` — may `POST /issues` (top-level and sub-issues). If `false`, `POST /issues` returns **403**.
35
+
30
36
  Wake context (optional):
31
37
 
32
38
  - `BOPODEV_TASK_ID`
@@ -89,6 +95,7 @@ When creating hires, set `requestApproval: true` by default (board-level bypass
89
95
  - Do not repeatedly post duplicate blocked comments when nothing changed.
90
96
  - Escalate through reporting chain for cross-team blockers.
91
97
  - Do not loop on repeated `curl` retries for the same failing endpoint in one run; include one precise failure message and exit.
98
+ - If `POST /issues` or assignee updates return **403** with a message about create/assign permissions, stop retrying; report once and exit (board must enable the capability on the agent).
92
99
 
93
100
  ## Comment style
94
101
 
@@ -139,6 +139,7 @@ async function loadOfficeOccupantForAgent(db: BopoDb, companyId: string, agentId
139
139
  companyId: agents.companyId,
140
140
  name: agents.name,
141
141
  avatarSeed: agents.avatarSeed,
142
+ lucideIconName: agents.lucideIconName,
142
143
  role: agents.role,
143
144
  status: agents.status,
144
145
  providerType: agents.providerType,
@@ -222,6 +223,7 @@ function deriveAgentOccupant(
222
223
  companyId: string;
223
224
  name: string;
224
225
  avatarSeed?: string | null;
226
+ lucideIconName?: string | null;
225
227
  role: string;
226
228
  status: string;
227
229
  providerType: string;
@@ -300,6 +302,7 @@ function deriveAgentOccupant(
300
302
  taskLabel: `${formatActionLabel(pendingApproval.action)} approval`,
301
303
  providerType: normalizeProviderType(agent.providerType),
302
304
  avatarSeed: agent.avatarSeed ?? null,
305
+ lucideIconName: agent.lucideIconName?.trim() ? agent.lucideIconName.trim() : null,
303
306
  focusEntityType: "approval",
304
307
  focusEntityId: pendingApproval.id,
305
308
  updatedAt: pendingApproval.createdAt.toISOString()
@@ -320,6 +323,7 @@ function deriveAgentOccupant(
320
323
  taskLabel: claimedIssues[0]?.title ?? "Checking in on work",
321
324
  providerType: normalizeProviderType(agent.providerType),
322
325
  avatarSeed: agent.avatarSeed ?? null,
326
+ lucideIconName: agent.lucideIconName?.trim() ? agent.lucideIconName.trim() : null,
323
327
  focusEntityType: claimedIssues[0] ? "issue" : "agent",
324
328
  focusEntityId: claimedIssues[0]?.id ?? agent.id,
325
329
  updatedAt: activeRun.startedAt.toISOString()
@@ -340,6 +344,7 @@ function deriveAgentOccupant(
340
344
  taskLabel: "Paused",
341
345
  providerType: normalizeProviderType(agent.providerType),
342
346
  avatarSeed: agent.avatarSeed ?? null,
347
+ lucideIconName: agent.lucideIconName?.trim() ? agent.lucideIconName.trim() : null,
343
348
  focusEntityType: "agent",
344
349
  focusEntityId: agent.id,
345
350
  updatedAt: agent.updatedAt.toISOString()
@@ -359,6 +364,7 @@ function deriveAgentOccupant(
359
364
  taskLabel: nextAssignedIssue ? `Up next: ${nextAssignedIssue.title}` : "Waiting for work",
360
365
  providerType: normalizeProviderType(agent.providerType),
361
366
  avatarSeed: agent.avatarSeed ?? null,
367
+ lucideIconName: agent.lucideIconName?.trim() ? agent.lucideIconName.trim() : null,
362
368
  focusEntityType: nextAssignedIssue ? "issue" : "agent",
363
369
  focusEntityId: nextAssignedIssue?.id ?? agent.id,
364
370
  updatedAt: nextAssignedIssue?.updatedAt.toISOString() ?? agent.updatedAt.toISOString()
@@ -396,6 +402,7 @@ function deriveHireCandidateOccupant(approval: {
396
402
  taskLabel: "Awaiting hire approval",
397
403
  providerType,
398
404
  avatarSeed: null,
405
+ lucideIconName: null,
399
406
  focusEntityType: "approval",
400
407
  focusEntityId: approval.id,
401
408
  updatedAt: approval.createdAt.toISOString()