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.
- package/package.json +5 -5
- package/src/app.ts +4 -2
- package/src/assets/starter-packs/customer-support-excellence.zip +0 -0
- package/src/assets/starter-packs/devrel-growth.zip +0 -0
- package/src/assets/starter-packs/product-delivery-trio.zip +0 -0
- package/src/assets/starter-packs/revenue-gtm-b2b.zip +0 -0
- package/src/assets/starter-packs/sources/customer-support-excellence/.bopo.yaml +129 -0
- package/src/assets/starter-packs/sources/customer-support-excellence/COMPANY.md +7 -0
- package/src/assets/starter-packs/sources/customer-support-excellence/README.md +3 -0
- package/src/assets/starter-packs/sources/customer-support-excellence/agents/founder-ceo/HEARTBEAT.md +5 -0
- package/src/assets/starter-packs/sources/customer-support-excellence/agents/support-lead/HEARTBEAT.md +5 -0
- package/src/assets/starter-packs/sources/customer-support-excellence/agents/support-specialist/HEARTBEAT.md +5 -0
- package/src/assets/starter-packs/sources/customer-support-excellence/projects/knowledge-base/PROJECT.md +7 -0
- package/src/assets/starter-packs/sources/customer-support-excellence/projects/quality/PROJECT.md +7 -0
- package/src/assets/starter-packs/sources/customer-support-excellence/projects/queue/PROJECT.md +7 -0
- package/src/assets/starter-packs/sources/customer-support-excellence/skills/kb-article-skeleton/SKILL.md +17 -0
- package/src/assets/starter-packs/sources/customer-support-excellence/skills/ticket-response-playbook/SKILL.md +15 -0
- package/src/assets/starter-packs/sources/customer-support-excellence/tasks/daily-queue-standup/TASK.md +11 -0
- package/src/assets/starter-packs/sources/customer-support-excellence/tasks/kb-gap-sweep/TASK.md +11 -0
- package/src/assets/starter-packs/sources/devrel-growth/.bopo.yaml +128 -0
- package/src/assets/starter-packs/sources/devrel-growth/COMPANY.md +7 -0
- package/src/assets/starter-packs/sources/devrel-growth/README.md +3 -0
- package/src/assets/starter-packs/sources/devrel-growth/agents/content-producer/HEARTBEAT.md +5 -0
- package/src/assets/starter-packs/sources/devrel-growth/agents/devrel-lead/HEARTBEAT.md +5 -0
- package/src/assets/starter-packs/sources/devrel-growth/agents/founder-ceo/HEARTBEAT.md +5 -0
- package/src/assets/starter-packs/sources/devrel-growth/projects/community/PROJECT.md +7 -0
- package/src/assets/starter-packs/sources/devrel-growth/projects/docs-education/PROJECT.md +7 -0
- package/src/assets/starter-packs/sources/devrel-growth/projects/partners/PROJECT.md +7 -0
- package/src/assets/starter-packs/sources/devrel-growth/skills/changelog-to-post/SKILL.md +14 -0
- package/src/assets/starter-packs/sources/devrel-growth/skills/tutorial-outline/SKILL.md +15 -0
- package/src/assets/starter-packs/sources/devrel-growth/tasks/community-health-review/TASK.md +11 -0
- package/src/assets/starter-packs/sources/devrel-growth/tasks/weekly-content-plan/TASK.md +11 -0
- package/src/assets/starter-packs/sources/product-delivery-trio/.bopo.yaml +138 -0
- package/src/assets/starter-packs/sources/product-delivery-trio/COMPANY.md +7 -0
- package/src/assets/starter-packs/sources/product-delivery-trio/README.md +9 -0
- package/src/assets/starter-packs/sources/product-delivery-trio/agents/engineer-ic/HEARTBEAT.md +5 -0
- package/src/assets/starter-packs/sources/product-delivery-trio/agents/founder-ceo/HEARTBEAT.md +6 -0
- package/src/assets/starter-packs/sources/product-delivery-trio/agents/product-lead/HEARTBEAT.md +5 -0
- package/src/assets/starter-packs/sources/product-delivery-trio/projects/delivery/PROJECT.md +7 -0
- package/src/assets/starter-packs/sources/product-delivery-trio/projects/quality/PROJECT.md +7 -0
- package/src/assets/starter-packs/sources/product-delivery-trio/projects/strategy/PROJECT.md +7 -0
- package/src/assets/starter-packs/sources/product-delivery-trio/skills/issue-triage/SKILL.md +21 -0
- package/src/assets/starter-packs/sources/product-delivery-trio/skills/rca-template/SKILL.md +16 -0
- package/src/assets/starter-packs/sources/product-delivery-trio/tasks/release-hygiene/TASK.md +11 -0
- package/src/assets/starter-packs/sources/product-delivery-trio/tasks/weekly-leadership-sync/TASK.md +11 -0
- package/src/assets/starter-packs/sources/revenue-gtm-b2b/.bopo.yaml +132 -0
- package/src/assets/starter-packs/sources/revenue-gtm-b2b/COMPANY.md +7 -0
- package/src/assets/starter-packs/sources/revenue-gtm-b2b/README.md +3 -0
- package/src/assets/starter-packs/sources/revenue-gtm-b2b/agents/founder-ceo/HEARTBEAT.md +5 -0
- package/src/assets/starter-packs/sources/revenue-gtm-b2b/agents/gtm-lead/HEARTBEAT.md +5 -0
- package/src/assets/starter-packs/sources/revenue-gtm-b2b/agents/pipeline-owner/HEARTBEAT.md +5 -0
- package/src/assets/starter-packs/sources/revenue-gtm-b2b/projects/customer-success/PROJECT.md +7 -0
- package/src/assets/starter-packs/sources/revenue-gtm-b2b/projects/deals/PROJECT.md +7 -0
- package/src/assets/starter-packs/sources/revenue-gtm-b2b/projects/pipeline/PROJECT.md +7 -0
- package/src/assets/starter-packs/sources/revenue-gtm-b2b/skills/discovery-call-brief/SKILL.md +14 -0
- package/src/assets/starter-packs/sources/revenue-gtm-b2b/skills/icp-scoring/SKILL.md +20 -0
- package/src/assets/starter-packs/sources/revenue-gtm-b2b/tasks/pipeline-hygiene/TASK.md +11 -0
- package/src/assets/starter-packs/sources/revenue-gtm-b2b/tasks/weekly-revenue-review/TASK.md +11 -0
- package/src/lib/agent-issue-permissions.ts +56 -0
- package/src/lib/builtin-bopo-skills/bopodev-control-plane.md +7 -0
- package/src/realtime/office-space.ts +7 -0
- package/src/routes/agents.ts +23 -1
- package/src/routes/assistant.ts +40 -1
- package/src/routes/companies.ts +227 -15
- package/src/routes/issues.ts +48 -0
- package/src/routes/plugins.ts +393 -103
- package/src/routes/{loops.ts → routines.ts} +72 -76
- package/src/scripts/onboard-seed.ts +2 -0
- package/src/server.ts +3 -1
- package/src/services/company-assistant-context-snapshot.ts +4 -2
- package/src/services/company-assistant-service.ts +17 -15
- package/src/services/company-file-archive-service.ts +56 -3
- package/src/services/company-file-import-service.ts +210 -31
- package/src/services/governance-service.ts +58 -3
- package/src/services/heartbeat-service/heartbeat-run.ts +7 -0
- package/src/services/plugin-artifact-installer.ts +115 -0
- package/src/services/plugin-artifact-store.ts +28 -0
- package/src/services/plugin-capability-policy.ts +31 -0
- package/src/services/plugin-jobs-service.ts +74 -0
- package/src/services/plugin-manifest-loader.ts +78 -3
- package/src/services/plugin-rpc.ts +102 -0
- package/src/services/plugin-runtime.ts +240 -209
- package/src/services/plugin-worker-host.ts +167 -0
- package/src/services/starter-pack-registry.ts +68 -0
- package/src/services/template-apply-service.ts +3 -1
- package/src/services/template-catalog.ts +29 -0
- package/src/services/work-loop-service/work-loop-service.ts +18 -18
- package/src/shutdown/graceful-shutdown.ts +3 -1
- package/src/worker/scheduler.ts +21 -1
- 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.
|
package/src/assets/starter-packs/sources/product-delivery-trio/agents/founder-ceo/HEARTBEAT.md
ADDED
|
@@ -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,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.
|
package/src/assets/starter-packs/sources/product-delivery-trio/tasks/weekly-leadership-sync/TASK.md
ADDED
|
@@ -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,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()
|