@twentylabs/ai-os-registry 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +14 -0
- package/knowledge-slots/audience-icp.yaml +26 -0
- package/knowledge-slots/brand-voice.yaml +24 -0
- package/knowledge-slots/budget.yaml +18 -0
- package/knowledge-slots/channel-registry.yaml +20 -0
- package/knowledge-slots/data-access.yaml +26 -0
- package/knowledge-slots/design-surface.yaml +37 -0
- package/knowledge-slots/domain-playbook.yaml +23 -0
- package/knowledge-slots/flow-map.yaml +22 -0
- package/knowledge-slots/market-landscape.yaml +20 -0
- package/knowledge-slots/measurement-plan.yaml +28 -0
- package/knowledge-slots/metrics-catalog.yaml +28 -0
- package/knowledge-slots/offer-catalog.yaml +23 -0
- package/knowledge-slots/prior-findings.yaml +21 -0
- package/knowledge-slots/product-strategy.yaml +25 -0
- package/knowledge-slots/store-review.yaml +37 -0
- package/knowledge-slots/test-surface.yaml +29 -0
- package/knowledge-slots/tracker-surface.yaml +32 -0
- package/migrations.json +7 -0
- package/package.json +33 -0
- package/policies/decision-log.yaml +16 -0
- package/policies/english-identifiers.yaml +10 -0
- package/policies/github-account.yaml +19 -0
- package/policies/mcp-env-only.yaml +12 -0
- package/policies/no-gh-auth-switch.yaml +23 -0
- package/policies/no-product-code-edits.yaml +12 -0
- package/policies/worktree-discipline.yaml +14 -0
- package/profiles/marketing.yaml +24 -0
- package/profiles/software.yaml +31 -0
- package/roles/business-analyst.md +47 -0
- package/roles/business-analyst.yaml +43 -0
- package/roles/code-reviewer.md +28 -0
- package/roles/code-reviewer.yaml +29 -0
- package/roles/content-marketer.md +34 -0
- package/roles/content-marketer.yaml +39 -0
- package/roles/designer.md +48 -0
- package/roles/designer.yaml +48 -0
- package/roles/growth-marketer.md +42 -0
- package/roles/growth-marketer.yaml +44 -0
- package/roles/market-researcher.md +47 -0
- package/roles/market-researcher.yaml +41 -0
- package/roles/product-analyst.md +52 -0
- package/roles/product-analyst.yaml +40 -0
- package/roles/product-owner.md +57 -0
- package/roles/product-owner.yaml +46 -0
- package/roles/project-manager.md +44 -0
- package/roles/project-manager.yaml +44 -0
- package/roles/qa-engineer.md +40 -0
- package/roles/qa-engineer.yaml +48 -0
- package/skills/ab-testing/skill.yaml +13 -0
- package/skills/ad-creative/skill.yaml +13 -0
- package/skills/ads/skill.yaml +13 -0
- package/skills/ads-review/SKILL.md +70 -0
- package/skills/ads-review/references/channel-folders.md +28 -0
- package/skills/ads-review/skill.yaml +7 -0
- package/skills/ai-seo/skill.yaml +13 -0
- package/skills/analytics/skill.yaml +13 -0
- package/skills/app-store-compliance/SKILL.md +51 -0
- package/skills/app-store-compliance/references/review-checklist.md +46 -0
- package/skills/app-store-compliance/references/update-eligibility.md +23 -0
- package/skills/app-store-compliance/skill.yaml +9 -0
- package/skills/aso/skill.yaml +13 -0
- package/skills/aso-ops/SKILL.md +41 -0
- package/skills/aso-ops/references/field-rules.md +15 -0
- package/skills/aso-ops/skill.yaml +7 -0
- package/skills/attribution/skill.yaml +13 -0
- package/skills/churn-prevention/skill.yaml +13 -0
- package/skills/co-marketing/skill.yaml +13 -0
- package/skills/cold-email/skill.yaml +13 -0
- package/skills/community-marketing/skill.yaml +13 -0
- package/skills/competitor-profiling/skill.yaml +13 -0
- package/skills/competitors/skill.yaml +13 -0
- package/skills/content-pipeline/SKILL.md +39 -0
- package/skills/content-pipeline/skill.yaml +6 -0
- package/skills/content-strategy/skill.yaml +13 -0
- package/skills/conversion-audit/SKILL.md +67 -0
- package/skills/conversion-audit/references/funnel-playbook.md +80 -0
- package/skills/conversion-audit/references/journey-stations.md +57 -0
- package/skills/conversion-audit/references/report-template.md +60 -0
- package/skills/conversion-audit/skill.yaml +7 -0
- package/skills/copy-editing/skill.yaml +13 -0
- package/skills/copywriting/skill.yaml +13 -0
- package/skills/cro/skill.yaml +13 -0
- package/skills/cross-repo-contract-review/SKILL.md +39 -0
- package/skills/cross-repo-contract-review/skill.yaml +6 -0
- package/skills/customer-research/skill.yaml +13 -0
- package/skills/directory-submissions/skill.yaml +13 -0
- package/skills/emails/skill.yaml +13 -0
- package/skills/events/skill.yaml +12 -0
- package/skills/free-tools/skill.yaml +12 -0
- package/skills/growth-review/SKILL.md +44 -0
- package/skills/growth-review/skill.yaml +7 -0
- package/skills/image/skill.yaml +13 -0
- package/skills/influencer-marketing/skill.yaml +13 -0
- package/skills/launch/skill.yaml +13 -0
- package/skills/lead-magnets/skill.yaml +12 -0
- package/skills/lifecycle-campaign/SKILL.md +37 -0
- package/skills/lifecycle-campaign/references/campaign-design.md +35 -0
- package/skills/lifecycle-campaign/skill.yaml +6 -0
- package/skills/marketing-council/skill.yaml +13 -0
- package/skills/marketing-ideas/skill.yaml +13 -0
- package/skills/marketing-loops/skill.yaml +12 -0
- package/skills/marketing-plan/skill.yaml +13 -0
- package/skills/marketing-psychology/skill.yaml +12 -0
- package/skills/offers/skill.yaml +13 -0
- package/skills/onboarding/skill.yaml +13 -0
- package/skills/partner-outreach/SKILL.md +41 -0
- package/skills/partner-outreach/skill.yaml +6 -0
- package/skills/paywalls/skill.yaml +13 -0
- package/skills/popups/skill.yaml +13 -0
- package/skills/pricing/skill.yaml +13 -0
- package/skills/product-marketing/skill.yaml +13 -0
- package/skills/programmatic-seo/skill.yaml +13 -0
- package/skills/prospecting/skill.yaml +13 -0
- package/skills/public-relations/skill.yaml +13 -0
- package/skills/referrals/skill.yaml +12 -0
- package/skills/revops/skill.yaml +12 -0
- package/skills/sales-enablement/skill.yaml +13 -0
- package/skills/schema/skill.yaml +13 -0
- package/skills/seo-audit/skill.yaml +13 -0
- package/skills/signup/skill.yaml +13 -0
- package/skills/site-architecture/skill.yaml +13 -0
- package/skills/sms/skill.yaml +13 -0
- package/skills/social/skill.yaml +13 -0
- package/skills/video/skill.yaml +13 -0
- package/taxonomy.yaml +46 -0
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 Twenty Labs
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
package/README.md
ADDED
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
# @twentylabs/ai-os-registry
|
|
2
|
+
|
|
3
|
+
The content of the Twenty Labs AI OS: roles, skills, policies, knowledge slots and profiles (`software`,
|
|
4
|
+
`marketing`). Data only — nothing in this package is executed. Use it through
|
|
5
|
+
[`@twentylabs/ai-os`](https://www.npmjs.com/package/@twentylabs/ai-os); projects pin an exact version in `ai-os.yaml`.
|
|
6
|
+
|
|
7
|
+
Versioning follows content semver: tightening a policy, changing a gate, or removing/renaming an id is a major
|
|
8
|
+
release; new roles, skills or profiles are minor; wording is a patch. Renames ship in `migrations.json`, and
|
|
9
|
+
`ai-os upgrade` applies them.
|
|
10
|
+
|
|
11
|
+
External skills (e.g. the marketing pack from coreyhaines31/marketingskills, MIT) are referenced by commit and content
|
|
12
|
+
hash, not copied.
|
|
13
|
+
|
|
14
|
+
Source: https://github.com/twenty-labs/ai-os
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
apiVersion: ai-os.twentylabs.dev/v1
|
|
2
|
+
kind: KnowledgeSlot
|
|
3
|
+
metadata:
|
|
4
|
+
id: audience-icp
|
|
5
|
+
title: Audience and ICP
|
|
6
|
+
description: "Who the marketing targets — segments, jobs, objections, where they gather."
|
|
7
|
+
spec:
|
|
8
|
+
purpose: "Who marketing is aimed at — the ideal customer and secondary segments, the job they hire the product for, their objections, and where they can be reached."
|
|
9
|
+
template: |
|
|
10
|
+
## Ideal customer
|
|
11
|
+
The specific person (not a demographic blur): situation, goal, what they have tried, and why now.
|
|
12
|
+
|
|
13
|
+
## Secondary segments
|
|
14
|
+
Each with what differs and whether it is pursued on purpose.
|
|
15
|
+
|
|
16
|
+
## Jobs and outcomes
|
|
17
|
+
The job the product is hired for, in the customer's own words, and the outcome they would pay for.
|
|
18
|
+
|
|
19
|
+
## Objections
|
|
20
|
+
The top reasons a good-fit prospect does not convert, each with the answer and its evidence.
|
|
21
|
+
|
|
22
|
+
## Where they are
|
|
23
|
+
Channels, communities, searches, influencers and partners where this audience can be reached.
|
|
24
|
+
|
|
25
|
+
## Who we do not target
|
|
26
|
+
Segments deliberately excluded, and why.
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
apiVersion: ai-os.twentylabs.dev/v1
|
|
2
|
+
kind: KnowledgeSlot
|
|
3
|
+
metadata:
|
|
4
|
+
id: brand-voice
|
|
5
|
+
title: Brand voice
|
|
6
|
+
description: "How the brand sounds — voice, vocabulary, claims allowed and forbidden, per channel."
|
|
7
|
+
spec:
|
|
8
|
+
purpose: "How the brand sounds and what it may claim — voice, vocabulary, approved and forbidden claims, and per-channel adjustments — so every piece of copy reads as one brand and promises only what the product does."
|
|
9
|
+
template: |
|
|
10
|
+
## Voice
|
|
11
|
+
Three to five traits, each with a "this, not that" pair of example sentences.
|
|
12
|
+
|
|
13
|
+
## Vocabulary
|
|
14
|
+
Words the brand uses, words it avoids, how it refers to the product, its users and its features. Spelling and capitalization of names.
|
|
15
|
+
|
|
16
|
+
## Claims
|
|
17
|
+
- **Allowed** — claims the product can back today, with the evidence.
|
|
18
|
+
- **Forbidden** — claims it must never make (capabilities it lacks, regulated claims, unverifiable superlatives), each with the reason.
|
|
19
|
+
|
|
20
|
+
## Per channel
|
|
21
|
+
How tone, length and format change for store listings, ads, short video, email and push, social posts, and partner messages.
|
|
22
|
+
|
|
23
|
+
## Languages
|
|
24
|
+
Which languages the brand publishes in, which is primary, and who reviews each.
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
apiVersion: ai-os.twentylabs.dev/v1
|
|
2
|
+
kind: KnowledgeSlot
|
|
3
|
+
metadata:
|
|
4
|
+
id: budget
|
|
5
|
+
title: Budget
|
|
6
|
+
description: "Marketing budget by channel and period, with the reason for every reallocation."
|
|
7
|
+
spec:
|
|
8
|
+
purpose: "The marketing budget — total and per channel, per period — with the reason and date for every reallocation, and the rules for increasing spend."
|
|
9
|
+
template: |
|
|
10
|
+
## Current allocation
|
|
11
|
+
| Period | Channel | Budget | Currency | Reason |
|
|
12
|
+
| --- | --- | --- | --- | --- |
|
|
13
|
+
|
|
14
|
+
## Rules
|
|
15
|
+
Who approves changes, the maximum change without approval (normally none), and the conditions that must hold before total spend increases (for example: the paid conversion step is measured and not leaking).
|
|
16
|
+
|
|
17
|
+
## History
|
|
18
|
+
Dated reallocations, newest first: before, after, reason, and the readout that justified it.
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
apiVersion: ai-os.twentylabs.dev/v1
|
|
2
|
+
kind: KnowledgeSlot
|
|
3
|
+
metadata:
|
|
4
|
+
id: channel-registry
|
|
5
|
+
title: Channel registry
|
|
6
|
+
description: "Every marketing channel in use — accounts, owners, status, folders and cadence."
|
|
7
|
+
spec:
|
|
8
|
+
purpose: "Every marketing channel this team runs or has tried — platform, account, owner, status, where its decisions are logged, and its review cadence."
|
|
9
|
+
template: |
|
|
10
|
+
| Channel | Platform / account | Owner | Status (planned / live / paused / stopped) | Repository folder | Review cadence |
|
|
11
|
+
| --- | --- | --- | --- | --- | --- |
|
|
12
|
+
|
|
13
|
+
## Access
|
|
14
|
+
How each platform is reached (console, API, export), who has access, and where credentials live — never the values. Agents never sign in to a platform on anyone's behalf.
|
|
15
|
+
|
|
16
|
+
## Naming conventions
|
|
17
|
+
Campaign, ad set, creative and link naming, so exports can be joined.
|
|
18
|
+
|
|
19
|
+
## Stopped channels
|
|
20
|
+
Channels tried and stopped, with the date, the result and the reason — so they are not restarted blind.
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
apiVersion: ai-os.twentylabs.dev/v1
|
|
2
|
+
kind: KnowledgeSlot
|
|
3
|
+
metadata:
|
|
4
|
+
id: data-access
|
|
5
|
+
title: Data access
|
|
6
|
+
description: "How to query this project's analytics and production data, read-only, and the known counting traps."
|
|
7
|
+
spec:
|
|
8
|
+
purpose: "How to get numbers in this project, read-only — the analytics store, the production database, the join between them, and the traps that have already produced wrong numbers. No production number is quoted before this is filled."
|
|
9
|
+
template: |
|
|
10
|
+
Commands are written with credentials sourced from the environment — never secrets in arguments, output, or this file.
|
|
11
|
+
|
|
12
|
+
## Analytics store
|
|
13
|
+
- The tool and project, where read-capable credentials live, and the query shape that works.
|
|
14
|
+
- How internal and test users are filtered, exactly, and the failure mode of getting the filter backwards.
|
|
15
|
+
- Events emitted from more than one side (client and server): how to tell them apart, and the query that regenerates the current list.
|
|
16
|
+
|
|
17
|
+
## Production database
|
|
18
|
+
- Read paths, best first (stored procedures, a read replica, a console), and what each cannot express.
|
|
19
|
+
- The tables that hold money, users, sessions and content.
|
|
20
|
+
- Ready-made queries and dashboards that already answer common questions — reuse keeps numbers consistent with what the team sees.
|
|
21
|
+
|
|
22
|
+
## Joining the two
|
|
23
|
+
The key between analytics identity and database identity, and its gaps (pre-signup activity, unidentified events).
|
|
24
|
+
|
|
25
|
+
## Known counting traps
|
|
26
|
+
Mistakes that have already produced a wrong headline number here, each with the guard query.
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
apiVersion: ai-os.twentylabs.dev/v1
|
|
2
|
+
kind: KnowledgeSlot
|
|
3
|
+
metadata:
|
|
4
|
+
id: design-surface
|
|
5
|
+
title: Design surface
|
|
6
|
+
description: "The design system as it actually exists — tokens, brand canon, typography, components, capture tooling."
|
|
7
|
+
spec:
|
|
8
|
+
purpose: "The product's design system as it actually exists: token sources of truth, brand canon, typography traps, component inventory, capture tooling, and decided norms."
|
|
9
|
+
template: |
|
|
10
|
+
Stale by design: entries describe the surface as of their date.
|
|
11
|
+
|
|
12
|
+
## Brand canon
|
|
13
|
+
The accent color, the neutral family, the canvas, and the brand's named identity if it has one.
|
|
14
|
+
|
|
15
|
+
## Token sources of truth
|
|
16
|
+
The canonical token file first, then each surface's mirror (app theme, web CSS variables), in rank order. Record the call-site rule if there is one (for example "no raw hex outside token files").
|
|
17
|
+
|
|
18
|
+
## Scales
|
|
19
|
+
Spacing base unit and named steps; radius scale, including deliberate off-scale values.
|
|
20
|
+
|
|
21
|
+
## Typography
|
|
22
|
+
Families as registered (exact strings), glyph gaps, test-environment font gotchas.
|
|
23
|
+
|
|
24
|
+
## Component inventory
|
|
25
|
+
Where shared components live — point at directories rather than copying lists that go stale.
|
|
26
|
+
|
|
27
|
+
## Capture tooling
|
|
28
|
+
How to screenshot and screen-record each platform, deep-link tricks, what does not work.
|
|
29
|
+
|
|
30
|
+
## Store and marketing surfaces
|
|
31
|
+
Where store metadata and marketing assets live, and which surfaces deploy on merge.
|
|
32
|
+
|
|
33
|
+
## Decided norms
|
|
34
|
+
Design decisions made on purpose that a review must not re-litigate.
|
|
35
|
+
|
|
36
|
+
## Worked examples
|
|
37
|
+
Finished specs and reviews (path and one line each), so the next engagement starts from precedent.
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
apiVersion: ai-os.twentylabs.dev/v1
|
|
2
|
+
kind: KnowledgeSlot
|
|
3
|
+
metadata:
|
|
4
|
+
id: domain-playbook
|
|
5
|
+
title: Domain playbook
|
|
6
|
+
description: "How this product's category and market behave — value chain, what converts, unit economics, the local market, benchmarks."
|
|
7
|
+
spec:
|
|
8
|
+
purpose: "The domain reasoning generic playbooks cannot know: how this product's category and market behave — the value chain, what converts, unit economics, the local market, and benchmarks worth holding."
|
|
9
|
+
template: |
|
|
10
|
+
## The value chain in this category
|
|
11
|
+
The ordered steps from first contact to long-term paying customer, and the step products in this category most often lose.
|
|
12
|
+
|
|
13
|
+
## What converts here
|
|
14
|
+
Which limits and gates drive upgrades in this category versus merely punish, and where the strong paywall or upgrade moments sit.
|
|
15
|
+
|
|
16
|
+
## Unit economics
|
|
17
|
+
What serving one active user costs, and the constraint that puts on free tiers.
|
|
18
|
+
|
|
19
|
+
## The local market
|
|
20
|
+
Willingness to pay, payment methods, pricing anchors, cultural traps — whatever "local" means for this product's users.
|
|
21
|
+
|
|
22
|
+
## Benchmarks worth holding
|
|
23
|
+
Category reference numbers (activation, retention, trial-to-paid) with sources and dates — context, never targets.
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
apiVersion: ai-os.twentylabs.dev/v1
|
|
2
|
+
kind: KnowledgeSlot
|
|
3
|
+
metadata:
|
|
4
|
+
id: flow-map
|
|
5
|
+
title: Flow map
|
|
6
|
+
description: "Where each major product flow lives — code, state, contracts and gotchas."
|
|
7
|
+
spec:
|
|
8
|
+
purpose: "Where each major product flow lives — the code that implements it, the state that persists it, and the contract it sits inside. A map, not a source of truth: the code and tables win."
|
|
9
|
+
template: |
|
|
10
|
+
One row per flow the product actually has (sign-up, the core usage loop, purchase and entitlement, notifications, version gates, and the product's own feature flows):
|
|
11
|
+
|
|
12
|
+
| Flow | Repositories / directories | Key code and docs | State (tables, stores) | Contract / gotchas |
|
|
13
|
+
| --- | --- | --- | --- | --- |
|
|
14
|
+
|
|
15
|
+
## Deliberately removed behaviour
|
|
16
|
+
Features taken out on purpose, with the reason — so an as-is analysis does not resurrect them as gaps.
|
|
17
|
+
|
|
18
|
+
## Display-only versus enforced
|
|
19
|
+
Rules whose user-interface half and server half have drifted, and which side is authoritative.
|
|
20
|
+
|
|
21
|
+
## Cross-repository contracts
|
|
22
|
+
Where the contracts between repositories are documented (payloads, enums, feature flags shared across sides), or "single repository, none".
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
apiVersion: ai-os.twentylabs.dev/v1
|
|
2
|
+
kind: KnowledgeSlot
|
|
3
|
+
metadata:
|
|
4
|
+
id: market-landscape
|
|
5
|
+
title: Market landscape
|
|
6
|
+
description: "The competitor roster and what is known about each, dated."
|
|
7
|
+
spec:
|
|
8
|
+
purpose: "The competitor roster — who matters to this product and why. Every fact carries a date and an evidence tier; a dated fact expires to unverified after about 90 days."
|
|
9
|
+
template: |
|
|
10
|
+
## Direct competitors
|
|
11
|
+
Same job, same user. Per product: why it matters, what to watch.
|
|
12
|
+
|
|
13
|
+
## Category leaders
|
|
14
|
+
Different method, same time or money budget. Which of their mechanics depend on their scale and which travel to a product this size.
|
|
15
|
+
|
|
16
|
+
## Adjacent products and substitutes
|
|
17
|
+
Including the free or general-purpose substitute a motivated user already has — it sets the bar for "why pay".
|
|
18
|
+
|
|
19
|
+
## Standing questions
|
|
20
|
+
Comparisons the team keeps asking (free-tier limits, pricing, recurring review complaints — a competitor's recurring complaint is this product's opportunity list).
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
apiVersion: ai-os.twentylabs.dev/v1
|
|
2
|
+
kind: KnowledgeSlot
|
|
3
|
+
metadata:
|
|
4
|
+
id: measurement-plan
|
|
5
|
+
title: Measurement plan
|
|
6
|
+
description: "How marketing results are measured — attribution, funnel events, sources of truth, readout rules."
|
|
7
|
+
spec:
|
|
8
|
+
purpose: "How marketing results are measured — the attribution source of truth, the funnel and its events, which numbers come from where, and the rules for reading a result."
|
|
9
|
+
template: |
|
|
10
|
+
## Source of truth per question
|
|
11
|
+
| Question | Source of truth | Do not use |
|
|
12
|
+
| --- | --- | --- |
|
|
13
|
+
| Who paid, how much | | |
|
|
14
|
+
| Which channel an install or signup came from | | |
|
|
15
|
+
| Spend and cost per result | | |
|
|
16
|
+
| Which channel is worth more | | |
|
|
17
|
+
|
|
18
|
+
## Funnel
|
|
19
|
+
The ordered steps from impression to retained paying customer, with the event or table that observes each step, and the steps that are not yet measurable.
|
|
20
|
+
|
|
21
|
+
## Attribution
|
|
22
|
+
The arbiter between platforms (each platform credits itself), tracking links and parameters, and known gaps (privacy frameworks, untracked organic).
|
|
23
|
+
|
|
24
|
+
## Readout rules
|
|
25
|
+
Default windows, minimum sample before a result is read, how holdouts are built, and how long to wait after a change.
|
|
26
|
+
|
|
27
|
+
## Missing measurement
|
|
28
|
+
Links in the funnel that cannot be measured yet, each with the issue that would fix it.
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
apiVersion: ai-os.twentylabs.dev/v1
|
|
2
|
+
kind: KnowledgeSlot
|
|
3
|
+
metadata:
|
|
4
|
+
id: metrics-catalog
|
|
5
|
+
title: Metrics catalog
|
|
6
|
+
description: "Canonical metric definitions and each metric's source of truth."
|
|
7
|
+
spec:
|
|
8
|
+
purpose: "Canonical definitions so the same question asked twice returns the same number — per metric: definition, source of truth, and how it lies."
|
|
9
|
+
template: |
|
|
10
|
+
One row per metric: **definition · source of truth · how it lies**. Committed definitions (a dashboard tile, a stored query, an admin page) outrank hand-derived ones. Name proxies as proxies.
|
|
11
|
+
|
|
12
|
+
## Engagement
|
|
13
|
+
Active users as defined here (daily, weekly, monthly), sessions, and the unit of value the product delivers.
|
|
14
|
+
|
|
15
|
+
## Activation
|
|
16
|
+
The funnel to first real value, and the true activation event.
|
|
17
|
+
|
|
18
|
+
## Retention
|
|
19
|
+
Cohort definitions and day-bucketing choices (by install date, not calendar date).
|
|
20
|
+
|
|
21
|
+
## Money
|
|
22
|
+
The revenue source of truth (almost never client events), how paid, trial and promotional are separated, and how refunds and sandbox purchases are excluded.
|
|
23
|
+
|
|
24
|
+
## Product-specific surfaces
|
|
25
|
+
The two or three feature areas whose metrics are asked about most often.
|
|
26
|
+
|
|
27
|
+
## Segmentation axes
|
|
28
|
+
The standard cuts (platform, plan, acquisition source, lifecycle stage) and where each field's truth lives.
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
apiVersion: ai-os.twentylabs.dev/v1
|
|
2
|
+
kind: KnowledgeSlot
|
|
3
|
+
metadata:
|
|
4
|
+
id: offer-catalog
|
|
5
|
+
title: Offer catalog
|
|
6
|
+
description: "What can be offered — plans, prices, trials, discounts, codes, gifts — and their live sources."
|
|
7
|
+
spec:
|
|
8
|
+
purpose: "What marketing may offer — plans, prices, trials, discount codes, gifts, referral rewards — where each is configured live, and the rules for using them."
|
|
9
|
+
template: |
|
|
10
|
+
Quote prices and limits from their live source, not from this file; this file records where the live source is.
|
|
11
|
+
|
|
12
|
+
## Plans and prices
|
|
13
|
+
| Plan | Price per market | Billing period | Trial | Live source (store, billing tool, table) |
|
|
14
|
+
| --- | --- | --- | --- | --- |
|
|
15
|
+
|
|
16
|
+
## Promotions
|
|
17
|
+
Discount codes, introductory and win-back offers, gifts and referral rewards: what exists, where each is configured, who can create one, and how redemptions are measured.
|
|
18
|
+
|
|
19
|
+
## Rules
|
|
20
|
+
Who may receive what (never offer a discount to someone in a trial, never send paid users an upsell they cannot use), stacking rules, and the cost of each giveaway against its paid equivalent.
|
|
21
|
+
|
|
22
|
+
## Product capabilities that may be promised
|
|
23
|
+
The features that exist in the current release, and where to check before a claim is made.
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
apiVersion: ai-os.twentylabs.dev/v1
|
|
2
|
+
kind: KnowledgeSlot
|
|
3
|
+
metadata:
|
|
4
|
+
id: prior-findings
|
|
5
|
+
title: Prior findings
|
|
6
|
+
description: "What has been measured, tried, reverted or deliberately decided — dated."
|
|
7
|
+
spec:
|
|
8
|
+
purpose: "What has already been measured, tried, reverted or deliberately decided, so no one rediscovers it, contradicts it unknowingly, or re-proposes what was rejected. Every entry is dated; whoever proves an entry wrong fixes it in the same engagement."
|
|
9
|
+
template: |
|
|
10
|
+
One entry per finding:
|
|
11
|
+
|
|
12
|
+
```
|
|
13
|
+
## <short title> (<YYYY-MM-DD>)
|
|
14
|
+
What was measured or decided, the number or decision, the source, and what would invalidate it.
|
|
15
|
+
If something was removed or disabled on purpose, say so and link the reason.
|
|
16
|
+
```
|
|
17
|
+
|
|
18
|
+
## Standing lists
|
|
19
|
+
- Events that have never fired.
|
|
20
|
+
- Names that appear in docs but do not exist.
|
|
21
|
+
- Numbers commonly quoted from memory that drift (prices, plan limits).
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
apiVersion: ai-os.twentylabs.dev/v1
|
|
2
|
+
kind: KnowledgeSlot
|
|
3
|
+
metadata:
|
|
4
|
+
id: product-strategy
|
|
5
|
+
title: Product strategy
|
|
6
|
+
description: "North star, ideal customer, moat, hard constraints and standing risks."
|
|
7
|
+
spec:
|
|
8
|
+
purpose: "The strategy every product verdict applies — north star, ideal customer, moat, hard constraints and standing risks, as stated by the owner. Until it is filled, no build verdict can be a GO."
|
|
9
|
+
template: |
|
|
10
|
+
Recorded from the owner, not invented. Where the owner has not decided something, write "undecided".
|
|
11
|
+
|
|
12
|
+
## North star
|
|
13
|
+
The one outcome the product optimizes, and what it deliberately does not optimize.
|
|
14
|
+
|
|
15
|
+
## Ideal customer
|
|
16
|
+
The specific user (not a demographic), the problem they have, and who the product accepts losing.
|
|
17
|
+
|
|
18
|
+
## Moat
|
|
19
|
+
The bet competitors cannot easily copy, and the observation that would falsify it.
|
|
20
|
+
|
|
21
|
+
## Hard constraints
|
|
22
|
+
Budget, team, platforms, cost-of-service realities — the walls every verdict respects.
|
|
23
|
+
|
|
24
|
+
## Standing risks
|
|
25
|
+
Risks weighed in every verdict (not automatic vetoes), each with the sign that it is materializing.
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
apiVersion: ai-os.twentylabs.dev/v1
|
|
2
|
+
kind: KnowledgeSlot
|
|
3
|
+
metadata:
|
|
4
|
+
id: store-review
|
|
5
|
+
title: Store review surface
|
|
6
|
+
description: "What app store review meets: app records, config paths, reviewer access, monetization and deletion seams, rejection history."
|
|
7
|
+
spec:
|
|
8
|
+
purpose: "What app store review will meet when it opens this product — app records, where platform config lives, reviewer access, monetization and account-deletion seams, SDK inventory, over-the-air update policy, and the rejection history."
|
|
9
|
+
template: |
|
|
10
|
+
Stale by design. If the project ships no store app, write "not applicable" and stop.
|
|
11
|
+
|
|
12
|
+
## App records
|
|
13
|
+
Bundle or package identifier per environment, store app names, primary category, age rating, which builds go to review.
|
|
14
|
+
|
|
15
|
+
## Where platform config lives
|
|
16
|
+
The real paths for this stack: Info.plist, entitlements, privacy manifest, Android manifest, permission strings, and where generated config comes from.
|
|
17
|
+
|
|
18
|
+
## Reviewer access
|
|
19
|
+
The demo or reviewer account and how it is kept alive, or the demo mode; where previous review notes are kept. Credentials are named by location, never pasted.
|
|
20
|
+
|
|
21
|
+
## Monetization seams
|
|
22
|
+
Product identifiers, which component validates purchases and receives store notifications, where restore lives on the client.
|
|
23
|
+
|
|
24
|
+
## Account lifecycle seams
|
|
25
|
+
The in-app deletion entry point and the backend handler behind it, what deletion removes and retains, and sign-in token revocation where applicable.
|
|
26
|
+
|
|
27
|
+
## SDK inventory
|
|
28
|
+
Third-party SDKs that collect data or need privacy declarations, and where the store privacy answers are recorded.
|
|
29
|
+
|
|
30
|
+
## Over-the-air update policy
|
|
31
|
+
This project's line between what may ship as an over-the-air update and what needs a store build.
|
|
32
|
+
|
|
33
|
+
## Rejection history
|
|
34
|
+
Dated: build, guideline cited, the store's wording, the fix, and the build that passed.
|
|
35
|
+
|
|
36
|
+
## Decided positions
|
|
37
|
+
Review stances taken on purpose, with the reasoning or the thread that settled them.
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
apiVersion: ai-os.twentylabs.dev/v1
|
|
2
|
+
kind: KnowledgeSlot
|
|
3
|
+
metadata:
|
|
4
|
+
id: test-surface
|
|
5
|
+
title: Test surface
|
|
6
|
+
description: "Test suites, environments, test accounts and known gaps."
|
|
7
|
+
spec:
|
|
8
|
+
purpose: "What test infrastructure exists, how to run it, which environments are safe to write to, and where the known holes are."
|
|
9
|
+
template: |
|
|
10
|
+
Stale by design: entries describe the surface as of their date; update an entry when an engagement finds it has moved.
|
|
11
|
+
|
|
12
|
+
## Suites
|
|
13
|
+
| Area / package | Run command | What it covers | Runs in CI on PR |
|
|
14
|
+
| --- | --- | --- | --- |
|
|
15
|
+
|
|
16
|
+
## Environments and test accounts
|
|
17
|
+
Which environments are safe to write to (development, staging) and which are read-only (production, always). Test accounts per tier, with where their credentials live — never the values.
|
|
18
|
+
|
|
19
|
+
## Suite landmines
|
|
20
|
+
Pre-existing failures that are not regressions (named, so a red run can be read), flaky tests, mock-only areas, tooling traps such as a filtered run that executes zero tests and still exits 0.
|
|
21
|
+
|
|
22
|
+
## Simulator and device divergence
|
|
23
|
+
What an emulator, simulator or headless browser cannot genuinely test here (sensors, native dialogs, purchases, push), so the human/agent split has a factual basis.
|
|
24
|
+
|
|
25
|
+
## Evidence tools
|
|
26
|
+
The error tracker and logs used for bug reproduction, and version-specific traps.
|
|
27
|
+
|
|
28
|
+
## Known gaps and their triggers
|
|
29
|
+
Automation the project lacks, each with the condition under which adopting it should be proposed.
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
apiVersion: ai-os.twentylabs.dev/v1
|
|
2
|
+
kind: KnowledgeSlot
|
|
3
|
+
metadata:
|
|
4
|
+
id: tracker-surface
|
|
5
|
+
title: Tracker surface
|
|
6
|
+
description: "Where work items live, how to reach them, and the conventions that make the tracker readable."
|
|
7
|
+
spec:
|
|
8
|
+
purpose: "Where this project's work items live, how to reach the tracker, and the conventions — fields, labels, definition of done, cadence — without which a wrong board cannot be told from an unfamiliar one."
|
|
9
|
+
template: |
|
|
10
|
+
## Access
|
|
11
|
+
The tracker (issue tracker, project board) and the account commands run as. For GitHub: the expected login and the per-command token prefix (`GH_TOKEN=$(gh auth token --user <login>)`), and the scopes the token needs. Never record a token value.
|
|
12
|
+
|
|
13
|
+
## Boards — or the absence of one
|
|
14
|
+
Whether a project board exists at all. Many projects run on issues, milestones and labels alone; record that as a configuration. With a board: which one is authoritative, and the field and option identifiers that writes need.
|
|
15
|
+
|
|
16
|
+
| Field | Field ID | Option | Option ID |
|
|
17
|
+
| --- | --- | --- | --- |
|
|
18
|
+
|
|
19
|
+
## Repositories with their own issues
|
|
20
|
+
| Repository | Issues used | On the board | Notes |
|
|
21
|
+
| --- | --- | --- | --- |
|
|
22
|
+
|
|
23
|
+
## Conventions
|
|
24
|
+
- **Field meanings** — what each status, priority and size value means here.
|
|
25
|
+
- **Labels** — the vocabulary, and which labels automation depends on.
|
|
26
|
+
- **Definition of done** — merged or released, and who closes.
|
|
27
|
+
- **Stale threshold** — days without activity before an in-progress item counts as stalled.
|
|
28
|
+
- **Cadence** — cycle length, review rhythm, milestone naming.
|
|
29
|
+
- **Scale** — roughly how many open and closed items exist, so reads are scoped.
|
|
30
|
+
|
|
31
|
+
## Known traps
|
|
32
|
+
Dated: items nobody will close, a second tracker some work lives in, work that routinely happens with no issue.
|
package/migrations.json
ADDED
package/package.json
ADDED
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@twentylabs/ai-os-registry",
|
|
3
|
+
"version": "1.0.0",
|
|
4
|
+
"description": "Twenty Labs AI OS registry: roles, skills, policies, knowledge slots and profiles. Data only.",
|
|
5
|
+
"license": "MIT",
|
|
6
|
+
"repository": {
|
|
7
|
+
"type": "git",
|
|
8
|
+
"url": "git+https://github.com/twenty-labs/ai-os.git",
|
|
9
|
+
"directory": "packages/registry"
|
|
10
|
+
},
|
|
11
|
+
"homepage": "https://github.com/twenty-labs/ai-os#readme",
|
|
12
|
+
"files": [
|
|
13
|
+
"taxonomy.yaml",
|
|
14
|
+
"profiles",
|
|
15
|
+
"roles",
|
|
16
|
+
"skills",
|
|
17
|
+
"policies",
|
|
18
|
+
"knowledge-slots",
|
|
19
|
+
"migrations.json",
|
|
20
|
+
"README.md",
|
|
21
|
+
"LICENSE"
|
|
22
|
+
],
|
|
23
|
+
"aiOs": {
|
|
24
|
+
"contentFormat": 1,
|
|
25
|
+
"cli": ">=0.1.0 <1.0.0"
|
|
26
|
+
},
|
|
27
|
+
"publishConfig": {
|
|
28
|
+
"access": "public"
|
|
29
|
+
},
|
|
30
|
+
"scripts": {
|
|
31
|
+
"validate": "node ../cli/dist/bin.mjs registry validate ."
|
|
32
|
+
}
|
|
33
|
+
}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
apiVersion: ai-os.twentylabs.dev/v1
|
|
2
|
+
kind: Policy
|
|
3
|
+
metadata:
|
|
4
|
+
id: decision-log
|
|
5
|
+
title: Decision log for external platforms
|
|
6
|
+
description: Every change made on an external platform gets a dated changelog line in the repository with its reason and readout date.
|
|
7
|
+
spec:
|
|
8
|
+
enforcement: default
|
|
9
|
+
appliesTo:
|
|
10
|
+
profiles: [marketing]
|
|
11
|
+
instruction: |
|
|
12
|
+
The platform keeps the numbers; this repository keeps the decisions. Every change on an external platform — ad accounts, store listings, CRM, email or push tools, analytics flags — gets a changelog line in this repository, newest first, in the folder of the channel it belongs to:
|
|
13
|
+
|
|
14
|
+
`YYYY-MM-DD · platform · object · before → after · reason · readout date`
|
|
15
|
+
|
|
16
|
+
The reason is mandatory, and so is the readout date: the day the effect will be read and judged. Log deliberate non-changes too ("left X alone because …") when someone would otherwise undo them. If the repository disagrees with the live platform, fix the repository to match the platform and record why they drifted.
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
apiVersion: ai-os.twentylabs.dev/v1
|
|
2
|
+
kind: Policy
|
|
3
|
+
metadata:
|
|
4
|
+
id: english-identifiers
|
|
5
|
+
title: English identifiers
|
|
6
|
+
description: Identifiers, file names, branch names, commit titles and PR titles are written in English.
|
|
7
|
+
spec:
|
|
8
|
+
enforcement: default
|
|
9
|
+
instruction: |
|
|
10
|
+
Write identifiers (code symbols, config keys, event and metric names), file and folder names, branch names, commit titles and pull-request titles in English, whatever language the project's prose uses. Bodies of commits, PRs and issues follow the project's locale.
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
apiVersion: ai-os.twentylabs.dev/v1
|
|
2
|
+
kind: Policy
|
|
3
|
+
metadata:
|
|
4
|
+
id: github-account
|
|
5
|
+
title: GitHub account for this repository
|
|
6
|
+
description: Names the GitHub account this repository's gh and git-remote operations run as, selected per command.
|
|
7
|
+
spec:
|
|
8
|
+
enforcement: optional
|
|
9
|
+
params:
|
|
10
|
+
account:
|
|
11
|
+
description: the GitHub login that owns this repository's remote
|
|
12
|
+
instruction: |
|
|
13
|
+
This repository's GitHub operations run as `{{account}}`. Prefix every `gh` command, and every git command that talks to the remote (`git push`, `git fetch`, `git pull`, `git ls-remote`), with the token for that account:
|
|
14
|
+
|
|
15
|
+
```sh
|
|
16
|
+
GH_TOKEN=$(gh auth token --user {{account}}) gh pr create ...
|
|
17
|
+
```
|
|
18
|
+
|
|
19
|
+
Git picks the token up only when `gh` is its credential helper (`gh auth setup-git`); otherwise git uses its own credentials. A bare `gh` runs as whichever account happens to be active on this machine and does not say so. If `gh auth token --user {{account}}` fails, stop and tell the owner; do not log in or switch accounts.
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
apiVersion: ai-os.twentylabs.dev/v1
|
|
2
|
+
kind: Policy
|
|
3
|
+
metadata:
|
|
4
|
+
id: mcp-env-only
|
|
5
|
+
title: Secrets in MCP config come from the environment
|
|
6
|
+
description: MCP and tool-server configs reference secrets only through environment variables, never as literal values.
|
|
7
|
+
spec:
|
|
8
|
+
enforcement: locked
|
|
9
|
+
instruction: |
|
|
10
|
+
MCP and tool-server configuration (`.mcp.json`, `.codex/config.toml`, `.cursor/mcp.json`, `.vscode/mcp.json`) references every secret through an environment variable — `${VAR}` or the runtime's env-var field — and never contains a literal token, key or password. The variable is supplied by the developer's environment (for example a git-ignored `.envrc`), never committed. When a server needs a new secret, add the variable reference and tell the owner which variable to set; do not paste the value anywhere in the repository, and never print it.
|
|
11
|
+
gate:
|
|
12
|
+
enforcement: ci
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
apiVersion: ai-os.twentylabs.dev/v1
|
|
2
|
+
kind: Policy
|
|
3
|
+
metadata:
|
|
4
|
+
id: no-gh-auth-switch
|
|
5
|
+
title: Never switch the GitHub account
|
|
6
|
+
description: Never switch the machine-wide active GitHub account; select the account per command instead.
|
|
7
|
+
spec:
|
|
8
|
+
enforcement: locked
|
|
9
|
+
instruction: |
|
|
10
|
+
Never run `gh auth switch`. The active GitHub account is machine-global state: switching it silently changes the account every other session on this machine runs as. Select the account per command instead:
|
|
11
|
+
|
|
12
|
+
```sh
|
|
13
|
+
GH_TOKEN=$(gh auth token --user <account>) gh <command>
|
|
14
|
+
```
|
|
15
|
+
|
|
16
|
+
Do not run `gh auth login`, `gh auth logout` or `gh auth refresh` either, even when `gh` suggests it. Report a missing login or scope to the owner and stop. Never print a token value.
|
|
17
|
+
permissions:
|
|
18
|
+
- tool: shell
|
|
19
|
+
command: [gh, auth, switch]
|
|
20
|
+
decision: deny
|
|
21
|
+
reason: switching the active account rewrites machine-global state and breaks sessions in other repositories
|
|
22
|
+
gate:
|
|
23
|
+
enforcement: permission
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
apiVersion: ai-os.twentylabs.dev/v1
|
|
2
|
+
kind: Policy
|
|
3
|
+
metadata:
|
|
4
|
+
id: no-product-code-edits
|
|
5
|
+
title: No product code edits
|
|
6
|
+
description: Marketing work never edits product code; a needed product change becomes an issue in the code repository.
|
|
7
|
+
spec:
|
|
8
|
+
enforcement: default
|
|
9
|
+
appliesTo:
|
|
10
|
+
profiles: [marketing]
|
|
11
|
+
instruction: |
|
|
12
|
+
Never edit, commit to, or open pull requests against product code — the app, backend or website repositories — even for a one-line fix. When marketing work shows that the product must change (a missing event, a broken deep link, a paywall bug, copy that ships in the app), open an issue in the code repository instead. The issue carries the evidence that led to it (the numbers, the screenshot, the file and line you read) and how the fix will be measured. Reading product code to understand behaviour is fine.
|