@synap-core/workspace-templates 0.3.0 → 0.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/templates.d.ts.map +1 -1
- package/dist/templates.js +339 -0
- package/dist/types.d.ts +22 -0
- package/dist/types.d.ts.map +1 -1
- package/package.json +25 -16
- package/src/agent-fleet.yaml +38 -0
- package/src/brand-library.yaml +37 -0
- package/src/builder.yaml +36 -0
- package/src/content-os.yaml +31 -0
- package/src/content-studio.yaml +38 -0
- package/src/crm.yaml +112 -0
- package/src/dev-dashboard.yaml +37 -0
- package/src/finance.yaml +39 -0
- package/src/foundation.yaml +34 -0
- package/src/hr.yaml +41 -0
- package/src/legal.yaml +43 -0
- package/src/life-os.yaml +42 -0
- package/src/marketing.yaml +37 -0
- package/src/operations.yaml +39 -0
- package/src/personal.yaml +38 -0
- package/src/project-management.yaml +38 -0
- package/src/radar.yaml +34 -0
- package/src/templates.ts +339 -0
- package/src/types.ts +27 -0
package/package.json
CHANGED
|
@@ -1,18 +1,28 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@synap-core/workspace-templates",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.4.0",
|
|
4
4
|
"type": "module",
|
|
5
|
+
"packageManager": "pnpm@9.15.4",
|
|
5
6
|
"description": "Canonical workspace definitions — YAML source + typed exports for browser, backend, CLI, and marketplace",
|
|
6
7
|
"exports": {
|
|
7
8
|
".": {
|
|
8
|
-
"types": "./
|
|
9
|
-
"
|
|
9
|
+
"types": "./src/index.ts",
|
|
10
|
+
"node": "./dist/index.js",
|
|
11
|
+
"default": "./src/index.ts"
|
|
10
12
|
}
|
|
11
13
|
},
|
|
12
14
|
"files": [
|
|
13
15
|
"dist",
|
|
14
16
|
"src"
|
|
15
17
|
],
|
|
18
|
+
"scripts": {
|
|
19
|
+
"type-check": "tsc --noEmit",
|
|
20
|
+
"build:yaml": "node build.mjs",
|
|
21
|
+
"build": "node build.mjs && tsc -p tsconfig.build.json",
|
|
22
|
+
"provision": "node scripts/provision.mjs",
|
|
23
|
+
"eval": "node scripts/eval-standard.mjs",
|
|
24
|
+
"prepublishOnly": "node build.mjs && tsc -p tsconfig.build.json"
|
|
25
|
+
},
|
|
16
26
|
"dependencies": {
|
|
17
27
|
"zod": "^3.0.0",
|
|
18
28
|
"js-yaml": "^4.1.0"
|
|
@@ -24,16 +34,15 @@
|
|
|
24
34
|
},
|
|
25
35
|
"publishConfig": {
|
|
26
36
|
"registry": "https://registry.npmjs.org",
|
|
27
|
-
"access": "public"
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
"
|
|
31
|
-
"
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
}
|
|
37
|
+
"access": "public",
|
|
38
|
+
"main": "./dist/index.js",
|
|
39
|
+
"module": "./dist/index.js",
|
|
40
|
+
"types": "./dist/index.d.ts",
|
|
41
|
+
"exports": {
|
|
42
|
+
".": {
|
|
43
|
+
"types": "./dist/index.d.ts",
|
|
44
|
+
"default": "./dist/index.js"
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
}
|
package/src/agent-fleet.yaml
CHANGED
|
@@ -1016,6 +1016,44 @@ playbooks:
|
|
|
1016
1016
|
onboarding:
|
|
1017
1017
|
goal: "Capture the agent fleet the user runs — the agents themselves, the model providers behind them, the skills they carry, and the projects they work — so the workspace reflects their real AI operation."
|
|
1018
1018
|
framing: "Act as a pragmatic AI ops lead. Tease out which agents are live, what models and providers power them, what each agent can do, and what work they're pointed at. Translate that into agents, providers, skills, and projects."
|
|
1019
|
+
expertise:
|
|
1020
|
+
starters:
|
|
1021
|
+
- >
|
|
1022
|
+
For every live agent, pin down the trio that actually matters: model, provider, and daily
|
|
1023
|
+
budget ceiling. "I have an agent" is not an entity — "a Coder agent on Claude via OpenRouter,
|
|
1024
|
+
capped at $5/day" is. Lead by capturing that trio for the one agent running most, then fan
|
|
1025
|
+
out. An agent with no budget number is an uncapped spend waiting to happen.
|
|
1026
|
+
- >
|
|
1027
|
+
Capture each provider as its own entity with cost-per-token AND key health, not just a name.
|
|
1028
|
+
Propose logging the provider behind your busiest agent first, with its input/output token
|
|
1029
|
+
cost and when the key expires — because the two ways a fleet dies are a blown budget and an
|
|
1030
|
+
expired key, and both live on the provider, not the agent.
|
|
1031
|
+
- >
|
|
1032
|
+
Scope each agent to ONE role and catalogue the specific skills it carries, with a trust
|
|
1033
|
+
level on each. Lead with "what is this agent FOR, and what exactly can it do?" A named,
|
|
1034
|
+
scoped agent with three trusted skills beats one vague "assistant" agent that can supposedly
|
|
1035
|
+
do everything.
|
|
1036
|
+
blindSpots:
|
|
1037
|
+
- >
|
|
1038
|
+
Untracked spend is the fleet-killer. Agents burn tokens silently — a runaway loop, a retry
|
|
1039
|
+
storm, a context window nobody trimmed — and the first signal is the invoice. Surface daily
|
|
1040
|
+
budget ceilings and weekly actual spend per provider proactively; the CFO view (which work
|
|
1041
|
+
is burning budget) is the one nobody builds until it's too late.
|
|
1042
|
+
- >
|
|
1043
|
+
The "one agent for everything" anti-pattern feels efficient and is the opposite. A single
|
|
1044
|
+
generalist agent with every skill and every key is un-auditable, un-scopeable, and a fat
|
|
1045
|
+
blast radius when a skill goes rogue. Push toward scoped agents — Coder, Researcher, Ops —
|
|
1046
|
+
each with only the skills and provider budget its job needs.
|
|
1047
|
+
- >
|
|
1048
|
+
Single-provider risk hides until the provider has an outage or rate-limits you mid-run.
|
|
1049
|
+
Teams wire every agent to one provider and have no fallback, so one 429 halts the whole
|
|
1050
|
+
fleet. Capture provider fallback intent (primary + backup) so a single vendor's bad day
|
|
1051
|
+
isn't your whole operation's bad day.
|
|
1052
|
+
bar: >
|
|
1053
|
+
A great result is a fleet you can run like an operation, not a pile of daemons: every live
|
|
1054
|
+
agent has a model, a provider, a budget, and a scoped set of trusted skills; every provider
|
|
1055
|
+
shows its cost, key health, and spend-against-budget; and you can answer "which agent is
|
|
1056
|
+
burning the most, on whose key, and what happens if that provider goes down?" in one glance.
|
|
1019
1057
|
collect:
|
|
1020
1058
|
- profileSlug: agent
|
|
1021
1059
|
what: "The agents they run and what powers each"
|
package/src/brand-library.yaml
CHANGED
|
@@ -518,6 +518,43 @@ onboarding:
|
|
|
518
518
|
colors, type), and the non-negotiable rules. Translate fuzzy vibes into
|
|
519
519
|
concrete voice guides and rules. Reference the Foundation (mission, audience,
|
|
520
520
|
positioning) so the brand expresses the strategy, never contradicts it.
|
|
521
|
+
expertise:
|
|
522
|
+
starters:
|
|
523
|
+
- >
|
|
524
|
+
Adjectives don't define a voice — "friendly, bold, human" describes every
|
|
525
|
+
brand and constrains none. Propose voice as a small set of DO / DON'T pairs
|
|
526
|
+
instead ("say 'you', not 'users'"; "short declaratives, never hedged
|
|
527
|
+
qualifiers"). Pairs are testable; adjectives are decoration.
|
|
528
|
+
- >
|
|
529
|
+
A voice guide is only real if it survives a sentence test. Take one actual
|
|
530
|
+
line from their site or a competitor's and rewrite it in the proposed voice
|
|
531
|
+
on the spot — if the rewrite looks identical to the original, the voice isn't
|
|
532
|
+
differentiated yet. Push until the two versions are visibly different.
|
|
533
|
+
- >
|
|
534
|
+
Build the palette around ROLES, not just favorite colors. Pin the semantic
|
|
535
|
+
roles first — primary, surface, text, and one restrained accent — and make
|
|
536
|
+
the accent earn its keep. Most brands leak trust by using three "brand
|
|
537
|
+
colors" as accents; propose one hero accent and demote the rest to support.
|
|
538
|
+
blindSpots:
|
|
539
|
+
- >
|
|
540
|
+
"Brand = logo" is the classic trap. The logo is the least-used, most-argued
|
|
541
|
+
asset; the voice, the color roles, and the do/don't rules drive 90% of what
|
|
542
|
+
anyone actually ships. If they lead with the logo, redirect to how the brand
|
|
543
|
+
SOUNDS and behaves in a paragraph of copy.
|
|
544
|
+
- >
|
|
545
|
+
Rules with no severity are ignored. A pile of equally-weighted "guidelines"
|
|
546
|
+
gives an AI or a teammate nothing to obey — mark each as mandatory,
|
|
547
|
+
important, or guideline so the non-negotiables (clearspace, accessibility
|
|
548
|
+
contrast, forbidden words) actually hold under pressure.
|
|
549
|
+
- >
|
|
550
|
+
Color contrast is a silent brand-killer: a beautiful palette that fails WCAG
|
|
551
|
+
AA on text is off-brand the moment it's inaccessible. If they've picked
|
|
552
|
+
colors without checking text-on-surface contrast, flag it before it's
|
|
553
|
+
codified into tokens.
|
|
554
|
+
bar: >
|
|
555
|
+
A stranger handed the voice pairs, the color roles, and the rules could write a
|
|
556
|
+
new paragraph and pick a button color that both read unmistakably as THIS brand —
|
|
557
|
+
and every rule is testable on a real sentence or a real screen, not a vibe.
|
|
521
558
|
collect:
|
|
522
559
|
- profileSlug: brand-identity
|
|
523
560
|
what: The core brand identity — name, essence, and how it presents itself.
|
package/src/builder.yaml
CHANGED
|
@@ -1266,6 +1266,42 @@ onboarding:
|
|
|
1266
1266
|
lives (repos + local paths), what runs behind each app, where it deploys, and what's on
|
|
1267
1267
|
the bench right now. Prefer concrete over aspirational — a repo URL beats a wish. Tie the
|
|
1268
1268
|
roadmap back to the Foundation's mission and audiences: the surface exists to serve them.
|
|
1269
|
+
expertise:
|
|
1270
|
+
starters:
|
|
1271
|
+
- >
|
|
1272
|
+
Don't ask "what do you want to build?" — ask what's already running. Propose starting from
|
|
1273
|
+
the ONE app that's live today, its primary deploy target, and the single feature in flight
|
|
1274
|
+
right now. One real node with a repo URL beats ten aspirational ones. The map grows from
|
|
1275
|
+
what exists, not from the org chart you wish you had.
|
|
1276
|
+
- >
|
|
1277
|
+
For each app, capture the deploy path end to end: repo → branch that auto-deploys → target
|
|
1278
|
+
(Vercel/Coolify/bare VPS) → the URL it lands on. A node that says "app" but can't answer
|
|
1279
|
+
"how does a commit reach production?" is a label, not a map.
|
|
1280
|
+
- >
|
|
1281
|
+
Lead with the in-flight work as first-class entities, not a backlog dump. Take the feature
|
|
1282
|
+
being coded this week, give it a status and an acceptance criterion, and link it to its app.
|
|
1283
|
+
That single live thread is what makes the workspace a command center instead of a wiki.
|
|
1284
|
+
blindSpots:
|
|
1285
|
+
- >
|
|
1286
|
+
The map is worthless the moment it drifts from reality. Founders capture the IDEAL
|
|
1287
|
+
architecture (the clean diagram) instead of the system AS IT IS — the hacky cron, the
|
|
1288
|
+
service everyone forgot owns auth, the package no one dares upgrade. Capture the mess;
|
|
1289
|
+
the mess is where the incidents come from.
|
|
1290
|
+
- >
|
|
1291
|
+
"We'll document it later" is how tribal knowledge dies. The one engineer who knows why
|
|
1292
|
+
service X can't be restarted during a deploy leaves, and it becomes a 2am incident. Capture
|
|
1293
|
+
the non-obvious operational facts (decision records, gotchas) NOW, while someone still
|
|
1294
|
+
remembers the why — not after the outage.
|
|
1295
|
+
- >
|
|
1296
|
+
Packages and their dependency edges are the silent killer. Founders track apps but not the
|
|
1297
|
+
shared substrate underneath — so a "small" bump to a core package breaks three apps nobody
|
|
1298
|
+
connected to it. Capture what depends on what; the blast radius lives in the edges, not the
|
|
1299
|
+
nodes.
|
|
1300
|
+
bar: >
|
|
1301
|
+
A great result is a graph you can navigate in any direction to answer a real operational
|
|
1302
|
+
question — "if I bump this package, what breaks?", "how does a commit reach prod for app X?",
|
|
1303
|
+
"what's actually in flight and who's on it?" — and every answer matches what's true in the
|
|
1304
|
+
terminal right now, not what was true at kickoff.
|
|
1269
1305
|
collect:
|
|
1270
1306
|
- profileSlug: devplane_app
|
|
1271
1307
|
what: The apps that are shipped or actively being built — with where their code lives and what stack they run on.
|
package/src/content-os.yaml
CHANGED
|
@@ -1009,6 +1009,37 @@ playbooks: []
|
|
|
1009
1009
|
onboarding:
|
|
1010
1010
|
goal: "Capture the user's brand voice, audience, content pillars, and publishing rhythm across channels — so the workspace reflects how they actually create and distribute content, not a generic calendar."
|
|
1011
1011
|
framing: "Act as a seasoned content strategist. Tease out their voice and positioning, who they're talking to, the recurring themes they own, the channels they publish on, and how often. Translate that into pillars, platforms, and a seeded content calendar."
|
|
1012
|
+
expertise:
|
|
1013
|
+
starters:
|
|
1014
|
+
- >
|
|
1015
|
+
Most creators over-index on one format and burn out. Propose 3–4 pillars
|
|
1016
|
+
that mix TEACH (how it works), PROVE (customer/results), and PROVOKE
|
|
1017
|
+
(point of view) — then adapt the mix to their niche. Don't ask for pillars
|
|
1018
|
+
from a blank slate; offer a starting set and let them react.
|
|
1019
|
+
- >
|
|
1020
|
+
Better to own ONE channel consistently than be thin on four. If they list
|
|
1021
|
+
many platforms, propose a primary channel + a cadence they can actually
|
|
1022
|
+
sustain, and treat the rest as repurposing targets, not separate efforts.
|
|
1023
|
+
- >
|
|
1024
|
+
Every pillar should ladder to a business goal — awareness, trust, or
|
|
1025
|
+
conversion. If a pillar is just "stuff we post", propose the job it should
|
|
1026
|
+
do and tie it to a specific audience segment.
|
|
1027
|
+
blindSpots:
|
|
1028
|
+
- >
|
|
1029
|
+
Distribution is the silent killer — great content nobody sees. If they
|
|
1030
|
+
haven't said HOW each piece gets discovered (SEO, a platform's algorithm,
|
|
1031
|
+
an email list, founder-led amplification), raise it before moving on.
|
|
1032
|
+
- >
|
|
1033
|
+
No repurposing plan = 5× the work for 1× the reach. If they treat each
|
|
1034
|
+
post as one-and-done, propose a chain: one deep piece → clips → posts →
|
|
1035
|
+
newsletter.
|
|
1036
|
+
- >
|
|
1037
|
+
Pillars with no audience attached reach no one. Tie each pillar to a
|
|
1038
|
+
specific segment — "content for everyone" is content for nobody.
|
|
1039
|
+
bar: >
|
|
1040
|
+
The pillars + primary platform + cadence read like a system a small team
|
|
1041
|
+
could actually run for 3 months without burning out — where every pillar has
|
|
1042
|
+
a clear audience, a clear job, and a way to get discovered.
|
|
1012
1043
|
collect:
|
|
1013
1044
|
- profileSlug: pillar
|
|
1014
1045
|
what: "Their recurring content themes / brand voice — the lenses their audience knows them for, and who each speaks to"
|
package/src/content-studio.yaml
CHANGED
|
@@ -298,6 +298,44 @@ onboarding:
|
|
|
298
298
|
and series they actually run, not one-off ideas. Pull voice and visual identity
|
|
299
299
|
from Brand and target audience from Foundation so every piece lands on-brand.
|
|
300
300
|
Be concrete about specs; a fuzzy "we make videos" helps no one.
|
|
301
|
+
expertise:
|
|
302
|
+
starters:
|
|
303
|
+
- >
|
|
304
|
+
Produce in BATCHES, not one-at-a-time. Setup — lighting, wardrobe, template
|
|
305
|
+
loading, brand assets — is the real cost; shooting or composing five pieces
|
|
306
|
+
in one session amortizes it. Propose a batch cadence (e.g. one shoot day →
|
|
307
|
+
a month of cuts) rather than a per-video pipeline.
|
|
308
|
+
- >
|
|
309
|
+
The hook is 80% of the view. On a 9:16 feed the first 1–2 seconds decide
|
|
310
|
+
whether the piece is watched at all, so it's worth more iteration than the
|
|
311
|
+
rest combined. Propose a template whose title card / cold-open IS the hook,
|
|
312
|
+
and treat the hook as its own reusable asset.
|
|
313
|
+
- >
|
|
314
|
+
Design every shoot for REPURPOSING before you roll. One long-form capture
|
|
315
|
+
should yield the long cut, several vertical clips, and stills — but only if
|
|
316
|
+
it's framed and shot with those crops in mind. Propose the repurpose chain
|
|
317
|
+
up front so the raw footage is cut-once, use-many.
|
|
318
|
+
blindSpots:
|
|
319
|
+
- >
|
|
320
|
+
The velocity-vs-quality tradeoff is a real dial, not a failing — a weekly
|
|
321
|
+
show that's "good enough and on time" beats a cinematic piece that ships
|
|
322
|
+
quarterly. If they're chasing polish on a high-cadence line, name the
|
|
323
|
+
tradeoff and propose a quality bar that survives the schedule.
|
|
324
|
+
- >
|
|
325
|
+
No reusable templates = every video rebuilt from scratch, and brand drift
|
|
326
|
+
creeps in. If they're producing on a cadence but have no locked
|
|
327
|
+
intros/outros/lower-thirds, that's the gap — templates are what make output
|
|
328
|
+
both fast AND on-brand. Surface it.
|
|
329
|
+
- >
|
|
330
|
+
Aspect ratio and platform are a production decision, not an export
|
|
331
|
+
afterthought. Shooting 16:9 and cropping to 9:16 later loses the frame and
|
|
332
|
+
the hook. If a pipeline's platform doesn't match how it's actually shot,
|
|
333
|
+
flag the mismatch before it's baked into every render.
|
|
334
|
+
bar: >
|
|
335
|
+
The studio reads like a production LINE: recurring shows with locked specs,
|
|
336
|
+
reusable templates that carry brand into every render, and asset sources feeding
|
|
337
|
+
a batch-then-repurpose flow — so a producer could ship the next episode this week
|
|
338
|
+
without reinventing the format or fighting brand drift.
|
|
301
339
|
collect:
|
|
302
340
|
- profileSlug: content-pipeline
|
|
303
341
|
what: The recurring productions you run — the shows, series, or content lines that generate output on a cadence (e.g. weekly reels, product demos, explainer drops).
|
package/src/crm.yaml
CHANGED
|
@@ -620,6 +620,64 @@ profiles:
|
|
|
620
620
|
- healthy
|
|
621
621
|
- at_risk
|
|
622
622
|
- critical
|
|
623
|
+
- slug: partner
|
|
624
|
+
displayName: Partner
|
|
625
|
+
icon: handshake
|
|
626
|
+
color: teal
|
|
627
|
+
description: A partner relationship — both a referral source and a co-delivery collaborator, distinguished by partner type.
|
|
628
|
+
properties:
|
|
629
|
+
- slug: partnerStatus
|
|
630
|
+
label: Status
|
|
631
|
+
valueType: string
|
|
632
|
+
inputType: select
|
|
633
|
+
enumValues:
|
|
634
|
+
- active
|
|
635
|
+
- paused
|
|
636
|
+
- churned
|
|
637
|
+
- slug: partnerType
|
|
638
|
+
label: Partner Type
|
|
639
|
+
valueType: string
|
|
640
|
+
inputType: select
|
|
641
|
+
enumValues:
|
|
642
|
+
- referral
|
|
643
|
+
- co-delivery
|
|
644
|
+
- both
|
|
645
|
+
- slug: accountManager
|
|
646
|
+
label: Account Manager
|
|
647
|
+
valueType: string
|
|
648
|
+
inputType: text
|
|
649
|
+
- slug: engagementStartDate
|
|
650
|
+
label: Engagement Start
|
|
651
|
+
valueType: date
|
|
652
|
+
inputType: date
|
|
653
|
+
- slug: satisfactionScore
|
|
654
|
+
label: Satisfaction
|
|
655
|
+
valueType: number
|
|
656
|
+
inputType: number
|
|
657
|
+
- slug: lifetimeValue
|
|
658
|
+
label: Lifetime Value
|
|
659
|
+
valueType: number
|
|
660
|
+
inputType: number
|
|
661
|
+
- slug: notes
|
|
662
|
+
label: Notes
|
|
663
|
+
valueType: string
|
|
664
|
+
inputType: textarea
|
|
665
|
+
- slug: contractValue
|
|
666
|
+
label: Contract Value
|
|
667
|
+
valueType: number
|
|
668
|
+
inputType: number
|
|
669
|
+
- slug: renewalDate
|
|
670
|
+
label: Renewal Date
|
|
671
|
+
valueType: date
|
|
672
|
+
inputType: date
|
|
673
|
+
- slug: healthScore
|
|
674
|
+
label: Health
|
|
675
|
+
valueType: string
|
|
676
|
+
inputType: select
|
|
677
|
+
enumValues:
|
|
678
|
+
- healthy
|
|
679
|
+
- at_risk
|
|
680
|
+
- critical
|
|
623
681
|
- slug: contact
|
|
624
682
|
displayName: Contact
|
|
625
683
|
icon: user
|
|
@@ -1555,6 +1613,21 @@ entityLinks:
|
|
|
1555
1613
|
- sourceProfileSlug: deal
|
|
1556
1614
|
targetProfileSlug: pipeline
|
|
1557
1615
|
type: belongs_to
|
|
1616
|
+
- sourceProfileSlug: client
|
|
1617
|
+
targetProfileSlug: company
|
|
1618
|
+
type: belongs_to
|
|
1619
|
+
- sourceProfileSlug: client
|
|
1620
|
+
targetProfileSlug: contact
|
|
1621
|
+
type: primary_contact
|
|
1622
|
+
- sourceProfileSlug: partner
|
|
1623
|
+
targetProfileSlug: company
|
|
1624
|
+
type: works_with
|
|
1625
|
+
- sourceProfileSlug: partner
|
|
1626
|
+
targetProfileSlug: contact
|
|
1627
|
+
type: primary_contact
|
|
1628
|
+
- sourceProfileSlug: partner
|
|
1629
|
+
targetProfileSlug: client
|
|
1630
|
+
type: refers
|
|
1558
1631
|
displayTemplates:
|
|
1559
1632
|
- name: Deal Card
|
|
1560
1633
|
description: Sales deal with pipeline stage, value, probability, and linked company
|
|
@@ -2145,6 +2218,45 @@ integrations:
|
|
|
2145
2218
|
onboarding:
|
|
2146
2219
|
goal: Capture the user's sales pipeline shape, their key accounts/contacts, and how they qualify and move deals — so the CRM reflects their real revenue motion, not a generic template.
|
|
2147
2220
|
framing: "Act as a sharp revenue/sales-ops lead. Tease out how they actually sell: who they sell to, what stages a deal moves through, where leads come from, and what 'qualified' means to them. Translate their words into pipeline config, companies, contacts, and deals."
|
|
2221
|
+
expertise:
|
|
2222
|
+
starters:
|
|
2223
|
+
- >
|
|
2224
|
+
Don't ask for stages on a blank slate — infer the motion first and propose
|
|
2225
|
+
a default pipeline for it. PLG: Signup → Activated → PQL → Expansion.
|
|
2226
|
+
Sales-led: Discovery → Qualified → Demo → Proposal → Negotiation → Closed.
|
|
2227
|
+
Agency/retainer: Lead → Scoping → Proposal → Won → Delivery. Offer the one
|
|
2228
|
+
that fits and let them cut stages, rather than starting from nothing.
|
|
2229
|
+
- >
|
|
2230
|
+
Define every stage by a BUYER action, not a seller activity — "Demo booked"
|
|
2231
|
+
or "Security review passed", not "Following up" or "Sent email". Seller-verb
|
|
2232
|
+
stages are why pipelines rot: they describe effort, not progress. If they
|
|
2233
|
+
name an activity stage, reflect it back as the buyer commitment it's meant
|
|
2234
|
+
to prove.
|
|
2235
|
+
- >
|
|
2236
|
+
Anchor qualification to a named framework, don't leave "qualified" as a
|
|
2237
|
+
feeling. Propose BANT for transactional deals or MEDDIC for enterprise, then
|
|
2238
|
+
make the exit criteria out of it — e.g. a deal can't leave Qualified without
|
|
2239
|
+
a known budget, an identified economic buyer, and a compelling event.
|
|
2240
|
+
blindSpots:
|
|
2241
|
+
- >
|
|
2242
|
+
The "everything is 'in progress'" pipeline. If most deals sit in middle
|
|
2243
|
+
stages with no close date or next step, that's not a pipeline, it's a
|
|
2244
|
+
graveyard — hygiene has collapsed. Push for a next step + a date on every
|
|
2245
|
+
open deal, and be willing to mark the dead ones lost.
|
|
2246
|
+
- >
|
|
2247
|
+
A stage with no exit criteria is a wish, not a stage. If they can't tell you
|
|
2248
|
+
the ONE thing that must be true to advance a deal, the stage is theater.
|
|
2249
|
+
Force a crisp gate for each — what the buyer must have done to move forward.
|
|
2250
|
+
- >
|
|
2251
|
+
Founders track deal value but not the two numbers that actually predict
|
|
2252
|
+
revenue: win rate by stage and average sales-cycle length. Without them you
|
|
2253
|
+
can't forecast or spot where deals stall. Surface both early even if the
|
|
2254
|
+
first answer is a rough guess.
|
|
2255
|
+
bar: >
|
|
2256
|
+
The pipeline stages mirror how a buyer actually commits (not how the rep works
|
|
2257
|
+
their day), each stage has a one-line exit gate, "qualified" maps to a real
|
|
2258
|
+
framework, and every live deal on the board has an owner, a value, a next step,
|
|
2259
|
+
and a close date — so a glance at the board tells the truth about revenue.
|
|
2148
2260
|
collect:
|
|
2149
2261
|
- profileSlug: pipeline
|
|
2150
2262
|
what: Their real deal stages in order (e.g. Lead → Qualified → Demo → Proposal → Won/Lost)
|
package/src/dev-dashboard.yaml
CHANGED
|
@@ -888,6 +888,43 @@ bento:
|
|
|
888
888
|
onboarding:
|
|
889
889
|
goal: "Capture the user's infrastructure surface — the services they run, the repositories behind them, their environments, the vendors they depend on, and their credentials inventory — so the command center reflects their real stack."
|
|
890
890
|
framing: "Act as a staff platform engineer doing an infra walkthrough. Tease out what's running in production, where the code lives, how environments are laid out, which third parties they depend on, and what secrets need tracking. Translate that into services, repositories, environments, vendors, and credentials."
|
|
891
|
+
expertise:
|
|
892
|
+
starters:
|
|
893
|
+
- >
|
|
894
|
+
Start from what's serving live traffic RIGHT NOW, not the architecture diagram. Walk the
|
|
895
|
+
request path: what does a user hit first, and what does that call, and what does THAT call?
|
|
896
|
+
Capture each hop as a service with its host and health-check URL. The production edge is the
|
|
897
|
+
map's anchor; everything else hangs off it.
|
|
898
|
+
- >
|
|
899
|
+
For every third party, capture the cost AND who owns the account. Propose logging each
|
|
900
|
+
vendor with its pricing model and monthly spend the moment you name it — the €12/mo that
|
|
901
|
+
became €400/mo is always a vendor nobody was watching. An untracked line item is a future
|
|
902
|
+
surprise on the card.
|
|
903
|
+
- >
|
|
904
|
+
Inventory credentials by their EXPIRY, not their existence. For each secret, capture where
|
|
905
|
+
it's stored (vault ref), what it unlocks, and when it expires or was last rotated. The
|
|
906
|
+
credential nobody wrote down is the one that expires at 3am and takes prod with it.
|
|
907
|
+
blindSpots:
|
|
908
|
+
- >
|
|
909
|
+
The untracked credential is the classic infra time-bomb: the SSH key on one laptop, the API
|
|
910
|
+
token in someone's .env, the cert that auto-renewed until it didn't. Teams track services
|
|
911
|
+
obsessively and secrets not at all — surface expiry dates and rotation policy proactively,
|
|
912
|
+
because the outage is silent until the exact moment it isn't.
|
|
913
|
+
- >
|
|
914
|
+
Vendor cost creep has no owner. Each SaaS was signed up "just to try," and now the monthly
|
|
915
|
+
bill is a mystery no single person can explain line by line. Force a monthly-cost number and
|
|
916
|
+
an owner on every vendor — the sum is almost always higher than anyone guessed.
|
|
917
|
+
- >
|
|
918
|
+
"Works on my machine" is environment drift, and it hides until deploy day. Staging runs a
|
|
919
|
+
different Node, prod has an env var dev doesn't, the migration ran here but not there. Map
|
|
920
|
+
each environment EXPLICITLY with its branch and base URL so the deltas between prod, staging,
|
|
921
|
+
and dev are visible instead of discovered during an incident.
|
|
922
|
+
bar: >
|
|
923
|
+
A great result is a command center where you can answer, without SSHing anywhere: what's
|
|
924
|
+
serving traffic and is it healthy, which credential expires next and who rotates it, what each
|
|
925
|
+
vendor costs and who owns it, and exactly how prod differs from staging. The value is in the
|
|
926
|
+
facts nobody keeps in one place — expiry dates, cost owners, environment deltas — surfaced
|
|
927
|
+
before they become incidents.
|
|
891
928
|
collect:
|
|
892
929
|
- profileSlug: service
|
|
893
930
|
what: "The services / apps they run and their stack"
|
package/src/finance.yaml
CHANGED
|
@@ -362,6 +362,45 @@ onboarding:
|
|
|
362
362
|
leaves. Push for real numbers over estimates, flag anything that doesn't add
|
|
363
363
|
up, and tie revenue back to the company's positioning and pricing (from
|
|
364
364
|
Foundation) so the model is grounded in strategy, not spreadsheets.
|
|
365
|
+
expertise:
|
|
366
|
+
starters:
|
|
367
|
+
- >
|
|
368
|
+
Don't reconstruct a full P&L on day one — default the model to the three
|
|
369
|
+
numbers that keep a startup alive: cash in bank, monthly net burn, and
|
|
370
|
+
runway (cash ÷ burn, in months). Propose those first and layer detail later;
|
|
371
|
+
a founder who knows their runway to the month is ahead of one with a
|
|
372
|
+
beautiful chart of accounts.
|
|
373
|
+
- >
|
|
374
|
+
Add a small set of unit economics, not a whole finance stack: gross margin,
|
|
375
|
+
CAC, and LTV (or at minimum LTV:CAC ratio). Propose sensible defaults —
|
|
376
|
+
payback under ~12 months, LTV:CAC above ~3:1 — as reference points to react
|
|
377
|
+
to, rather than asking them to define metrics from scratch.
|
|
378
|
+
- >
|
|
379
|
+
Model cash on a timing basis, not an accrual one. When they give you revenue,
|
|
380
|
+
ask when the cash actually LANDS — Net-30/60 invoices, annual prepay,
|
|
381
|
+
Stripe payout lag — and capture that gap explicitly, because a profitable
|
|
382
|
+
month can still run the account dry.
|
|
383
|
+
blindSpots:
|
|
384
|
+
- >
|
|
385
|
+
Revenue ≠ cash. Founders book an annual contract and feel rich, but the cash
|
|
386
|
+
arrives monthly or after Net-60 — meanwhile payroll is due Friday. If they
|
|
387
|
+
conflate the two, separate signed bookings from collected cash before
|
|
388
|
+
computing anything.
|
|
389
|
+
- >
|
|
390
|
+
Runway is THE number that predicts survival, and it's the one most often
|
|
391
|
+
stale. If there's no current runway figure — or it hasn't been recomputed
|
|
392
|
+
since the last big hire or price change — that's the first gap to close.
|
|
393
|
+
Everything else is secondary to "how many months of oxygen is left".
|
|
394
|
+
- >
|
|
395
|
+
Bookings, revenue, and cash are three different numbers and founders routinely
|
|
396
|
+
merge them. A signed deal (booking), revenue recognized over its term, and
|
|
397
|
+
the money in the account are rarely equal in any given month. Name which one
|
|
398
|
+
each figure is, or the whole model lies.
|
|
399
|
+
bar: >
|
|
400
|
+
A stranger could open the workspace and answer three questions in ten seconds:
|
|
401
|
+
how much cash is in the bank, how much it burns a month, and how many months of
|
|
402
|
+
runway that leaves — with revenue captured on a cash-timing basis, bookings kept
|
|
403
|
+
distinct from collected cash, and at least a rough gross margin and LTV:CAC in view.
|
|
365
404
|
collect:
|
|
366
405
|
- profileSlug: account
|
|
367
406
|
what: The bank and credit accounts holding company cash, with current balances.
|
package/src/foundation.yaml
CHANGED
|
@@ -254,6 +254,40 @@ onboarding:
|
|
|
254
254
|
THE COFOUNDER: Act as a sharp, skeptical co-founder. Pressure-test why-now, why-you, and
|
|
255
255
|
why-this. Refuse fuzzy answers; push for specifics and evidence. Be
|
|
256
256
|
respectful but direct — a vague mission helps no one.
|
|
257
|
+
expertise:
|
|
258
|
+
starters:
|
|
259
|
+
- >
|
|
260
|
+
A mission is a CHANGE in the world, not a description of the product
|
|
261
|
+
("make complex products understandable", not "we make explainer videos").
|
|
262
|
+
If they describe the deliverable, reflect the underlying change back and
|
|
263
|
+
propose THAT as the mission.
|
|
264
|
+
- >
|
|
265
|
+
Positioning is sharpest as ONE sentence — "the <X> for <who>" or "the only
|
|
266
|
+
<category> that <wedge>". If they give you a vague "we help companies with
|
|
267
|
+
Y", propose a crisp category+wedge framing from what they've told you and
|
|
268
|
+
let them sharpen it — never file the vague version.
|
|
269
|
+
- >
|
|
270
|
+
Audience is a SPECIFIC buyer at a specific stage ("Head of Product
|
|
271
|
+
Marketing at Series A–B technical SaaS"), not a market ("SaaS companies").
|
|
272
|
+
Push from the market to the person who actually signs off.
|
|
273
|
+
blindSpots:
|
|
274
|
+
- >
|
|
275
|
+
Founders skip the NON-goal — what they deliberately DON'T do. A company
|
|
276
|
+
with no "no" has no focus. If they haven't named boundaries, ask what they
|
|
277
|
+
turn down.
|
|
278
|
+
- >
|
|
279
|
+
A differentiator that's just "we're better / faster / care more" isn't
|
|
280
|
+
defensible. Push for a structural moat a competitor can't easily copy — and
|
|
281
|
+
if it's founder-dependent (bus-factor), capture that honestly rather than
|
|
282
|
+
dressing it up.
|
|
283
|
+
- >
|
|
284
|
+
The #1 tells of fuzzy strategy: a mission that's really a deliverable, and
|
|
285
|
+
positioning that's really a feature list. When you see either, name it and
|
|
286
|
+
dig.
|
|
287
|
+
bar: >
|
|
288
|
+
A stranger could read the mission, audience, and positioning and instantly
|
|
289
|
+
explain WHO this is for, WHAT changes for them, and WHY this company over the
|
|
290
|
+
alternatives — in one breath, with no fluff.
|
|
257
291
|
collect:
|
|
258
292
|
- profileSlug: mission
|
|
259
293
|
what: The one mission that anchors the company — what we serve, what we change, why now.
|
package/src/hr.yaml
CHANGED
|
@@ -328,6 +328,47 @@ onboarding:
|
|
|
328
328
|
Foundation values and reflect them back as the hiring bar and review rubric.
|
|
329
329
|
Be direct about gaps (no owner on a policy, a role open with no hiring manager),
|
|
330
330
|
but never clinical — these are people.
|
|
331
|
+
expertise:
|
|
332
|
+
starters:
|
|
333
|
+
- >
|
|
334
|
+
Don't ask for a hiring wishlist — propose the first roles by what unblocks
|
|
335
|
+
the FOUNDER. Whatever the founder is the bottleneck on (sales they can't
|
|
336
|
+
scale, product they can't ship fast enough, ops eating their week) is the
|
|
337
|
+
next hire. Reflect their week back and name the role that buys their time
|
|
338
|
+
back, rather than filling an org chart.
|
|
339
|
+
- >
|
|
340
|
+
Hire for the next 12 months, not the dream team. Propose the role at the
|
|
341
|
+
seniority the company needs NOW — often a scrappy generalist over a
|
|
342
|
+
specialist VP who'll be bored and expensive. Push back on premature senior
|
|
343
|
+
hires the stage can't feed with real scope.
|
|
344
|
+
- >
|
|
345
|
+
Anchor the hiring bar and review rubric to the company's actual values
|
|
346
|
+
(pull them from Foundation), not generic competencies. Propose 3–4 concrete
|
|
347
|
+
"must be true" signals per role derived from those values, so "a great hire"
|
|
348
|
+
means something specific here rather than "smart and nice".
|
|
349
|
+
blindSpots:
|
|
350
|
+
- >
|
|
351
|
+
Culture is not perks — it's what you REWARD and what you TOLERATE. Founders
|
|
352
|
+
describe culture as ping-pong and free lunch; the real culture is who gets
|
|
353
|
+
promoted and what bad behavior goes unchecked. If they answer "culture" with
|
|
354
|
+
benefits, redirect to: what do you celebrate, and what do you refuse to
|
|
355
|
+
put up with?
|
|
356
|
+
- >
|
|
357
|
+
Onboarding and role clarity beat headcount. A team that doesn't know who owns
|
|
358
|
+
what will thrash no matter how many people you add. Before proposing new
|
|
359
|
+
hires, check that existing roles have clear ownership and every new hire has a
|
|
360
|
+
30/60/90 plan — hiring into ambiguity just scales the confusion.
|
|
361
|
+
- >
|
|
362
|
+
An open role with no hiring manager, or a policy with no owner, is a gap
|
|
363
|
+
hiding in plain sight. Surface these directly: unowned reqs stall for months
|
|
364
|
+
and unowned policies get ignored. Every role needs a decision-maker; every
|
|
365
|
+
policy needs someone accountable for it.
|
|
366
|
+
bar: >
|
|
367
|
+
The org is honest — real people with clear ownership and no orphaned roles or
|
|
368
|
+
policies — the open roles map to what actually unblocks the founder at the right
|
|
369
|
+
seniority for the stage, "a great hire" is defined by concrete signals tied to
|
|
370
|
+
the company's real values, and every new hire lands into role clarity and a
|
|
371
|
+
30/60/90 plan rather than ambiguity.
|
|
331
372
|
collect:
|
|
332
373
|
- profileSlug: team-member
|
|
333
374
|
what: The people currently on the team, with their role, department, and status.
|
package/src/legal.yaml
CHANGED
|
@@ -368,6 +368,49 @@ onboarding:
|
|
|
368
368
|
renews, what filings and obligations have deadlines, and what IP is worth protecting.
|
|
369
369
|
Be precise about dates and counterparties; flag risk plainly; never invent legal
|
|
370
370
|
conclusions. Turn their answers into entities, contracts, compliance items, and IP assets.
|
|
371
|
+
expertise:
|
|
372
|
+
starters:
|
|
373
|
+
- >
|
|
374
|
+
Start by mapping the corporate skeleton, then hang contracts off it. Ask what the
|
|
375
|
+
top-level entity is, where it's incorporated (Delaware C-corp? a local Ltd/GmbH?),
|
|
376
|
+
and whether any subsidiaries or branches exist — because a contract's counterparty
|
|
377
|
+
and an IP asset's owner only mean something once you know which entity signed or
|
|
378
|
+
holds it. Seed the entities first; everything else references them.
|
|
379
|
+
- >
|
|
380
|
+
For each contract they name, capture the RENEWAL and NOTICE dates, not just the
|
|
381
|
+
signing date. The dangerous field is the auto-renew clause with a 30/60/90-day
|
|
382
|
+
notice window — that's what silently locks a company into another year. Propose
|
|
383
|
+
the renewal date and renewal type up front so the workspace can surface it before
|
|
384
|
+
the window closes.
|
|
385
|
+
- >
|
|
386
|
+
Frame the whole session as surfacing RISK, not giving advice. Capture what exists
|
|
387
|
+
and flag what's missing for a real lawyer to review — never state whether something
|
|
388
|
+
is enforceable, compliant, or "fine". Turn "is this okay?" into a captured gap:
|
|
389
|
+
"contract with no signed copy on file — flag for counsel", not a legal opinion.
|
|
390
|
+
blindSpots:
|
|
391
|
+
- >
|
|
392
|
+
The handshake-deal risk: real obligations — a vendor arrangement, a co-founder
|
|
393
|
+
split, a customer commitment — exist with no signed paper behind them. Ask
|
|
394
|
+
explicitly what agreements are operating verbally or by email only, and capture
|
|
395
|
+
each as a contract in "draft" with a flag; an unpapered deal is a dispute waiting
|
|
396
|
+
to happen, and it's invisible unless you go looking for it.
|
|
397
|
+
- >
|
|
398
|
+
Missing IP assignment is the classic startup landmine: founders, early employees,
|
|
399
|
+
and especially contractors who wrote code or designed the brand without a signed
|
|
400
|
+
IP-assignment / work-for-hire clause. The company may not legally own its own
|
|
401
|
+
product. Probe for it directly — "did every contributor sign IP assignment?" — and
|
|
402
|
+
log any gap as a high-priority matter, because it kills fundraises and acquisitions.
|
|
403
|
+
- >
|
|
404
|
+
Renewal, expiry, and filing dates that nobody owns: trademark renewals, annual
|
|
405
|
+
registered-agent/franchise-tax filings, insurance and license expirations, data-
|
|
406
|
+
privacy obligations. These lapse silently and are expensive to revive. Every date
|
|
407
|
+
captured needs an OWNER and a deadline — an unowned deadline is a missed one.
|
|
408
|
+
bar: >
|
|
409
|
+
A GREAT result is an accurate, date-aware risk map: the real legal entities and
|
|
410
|
+
where they sit, the live contracts with their renewal/notice dates and owners, the
|
|
411
|
+
compliance obligations with deadlines and owners, and the IP the company actually
|
|
412
|
+
needs to own — with every gap and unpapered deal explicitly FLAGGED for a real
|
|
413
|
+
lawyer, and not one invented legal conclusion anywhere in it.
|
|
371
414
|
collect:
|
|
372
415
|
- profileSlug: legal-entity
|
|
373
416
|
what: The company's legal entities and the jurisdictions they operate in.
|