@elevasis/sdk 1.22.1 → 1.24.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/cli.cjs +5738 -6283
- package/dist/index.d.ts +187 -242
- package/dist/index.js +1830 -2912
- package/dist/node/index.d.ts +3722 -2
- package/dist/node/index.js +163 -1
- package/dist/test-utils/index.d.ts +61 -72
- package/dist/test-utils/index.js +240 -1479
- package/dist/types/worker/index.d.ts +2 -0
- package/dist/types/worker/utils.d.ts +9 -0
- package/dist/worker/index.js +261 -1487
- package/package.json +5 -4
- package/reference/_navigation.md +1 -0
- package/reference/claude-config/rules/active-change-index.md +11 -80
- package/reference/claude-config/rules/agent-start-here.md +11 -277
- package/reference/claude-config/rules/deployment.md +11 -57
- package/reference/claude-config/rules/error-handling.md +11 -56
- package/reference/claude-config/rules/execution.md +11 -40
- package/reference/claude-config/rules/frontend.md +11 -43
- package/reference/claude-config/rules/observability.md +11 -31
- package/reference/claude-config/rules/operations.md +11 -80
- package/reference/claude-config/rules/organization-model.md +7 -115
- package/reference/claude-config/rules/organization-os.md +8 -112
- package/reference/claude-config/rules/package-taxonomy.md +11 -33
- package/reference/claude-config/rules/platform.md +11 -42
- package/reference/claude-config/rules/shared-types.md +10 -48
- package/reference/claude-config/rules/task-tracking.md +11 -47
- package/reference/claude-config/rules/ui.md +11 -200
- package/reference/claude-config/rules/vibe.md +11 -235
- package/reference/claude-config/skills/om/SKILL.md +324 -0
- package/reference/claude-config/skills/{knowledge → om}/operations/customers.md +110 -109
- package/reference/claude-config/skills/{knowledge → om}/operations/features.md +77 -76
- package/reference/claude-config/skills/{knowledge → om}/operations/goals.md +119 -118
- package/reference/claude-config/skills/{knowledge → om}/operations/identity.md +94 -93
- package/reference/claude-config/skills/{knowledge → om}/operations/labels.md +94 -94
- package/reference/claude-config/skills/{knowledge → om}/operations/offerings.md +110 -109
- package/reference/claude-config/skills/{knowledge → om}/operations/roles.md +100 -99
- package/reference/claude-config/skills/{knowledge → om}/operations/techStack.md +30 -30
- package/reference/claude-config/skills/project/SKILL.md +1088 -1088
- package/reference/claude-config/skills/setup/SKILL.md +275 -275
- package/reference/claude-config/skills/tutorial/SKILL.md +259 -259
- package/reference/claude-config/skills/tutorial/progress-template.md +74 -74
- package/reference/claude-config/skills/tutorial/technical.md +1303 -1303
- package/reference/claude-config/skills/tutorial/vibe-coder.md +890 -890
- package/reference/claude-config/sync-notes/2026-05-04-knowledge-bundle.md +83 -83
- package/reference/claude-config/sync-notes/2026-05-15-om-skill-rename-and-write-family.md +52 -0
- package/reference/claude-config/sync-notes/2026-05-17-sdk-boundary-consolidation.md +33 -0
- package/reference/rules/active-change-index.md +83 -0
- package/reference/rules/agent-start-here.md +280 -0
- package/reference/rules/deployment.md +60 -0
- package/reference/rules/error-handling.md +59 -0
- package/reference/rules/execution.md +43 -0
- package/reference/rules/frontend.md +46 -0
- package/reference/rules/observability.md +34 -0
- package/reference/rules/operations.md +85 -0
- package/reference/rules/organization-model.md +119 -0
- package/reference/rules/organization-os.md +118 -0
- package/reference/rules/package-taxonomy.md +36 -0
- package/reference/rules/platform.md +45 -0
- package/reference/rules/shared-types.md +52 -0
- package/reference/rules/task-tracking.md +50 -0
- package/reference/rules/ui.md +203 -0
- package/reference/rules/vibe.md +238 -0
- package/reference/scaffold/core/organization-graph.mdx +4 -5
- package/reference/scaffold/core/organization-model.mdx +1 -1
- package/reference/scaffold/recipes/query-the-knowledge-graph.md +189 -185
- package/reference/scaffold/reference/contracts.md +108 -96
- package/reference/scaffold/reference/glossary.md +71 -69
- package/reference/claude-config/skills/knowledge/SKILL.md +0 -345
- /package/reference/claude-config/skills/{knowledge → om}/operations/codify-level-a.md +0 -0
- /package/reference/claude-config/skills/{knowledge → om}/operations/codify-level-b.md +0 -0
|
@@ -1,76 +1,77 @@
|
|
|
1
|
-
# Features Compatibility Notes
|
|
2
|
-
|
|
3
|
-
`features` is legacy organization-model wording. Current Organization OS vocabulary is
|
|
4
|
-
System/Action oriented:
|
|
5
|
-
|
|
6
|
-
- **Systems** describe availability, routing, ownership, navigation grouping, and knowledge
|
|
7
|
-
mounts.
|
|
8
|
-
- **Actions** describe invokable operations such as workflows, agents, commands, and UI-triggered
|
|
9
|
-
tasks.
|
|
10
|
-
|
|
11
|
-
Use this file only when older prompts, browser copy text, SDK references, or scaffold recipes still
|
|
12
|
-
say "feature". For current tenant organization-model work, route the user to Systems and Actions
|
|
13
|
-
wording and use `/by-system/<id>` knowledge paths.
|
|
14
|
-
|
|
15
|
-
## Compatibility Mapping
|
|
16
|
-
|
|
17
|
-
| Legacy wording
|
|
18
|
-
|
|
|
19
|
-
| Feature toggle
|
|
20
|
-
| Feature ID
|
|
21
|
-
| Add a custom feature
|
|
22
|
-
| Feature governs X
|
|
23
|
-
| `/knowledge read-folder feature:x` | `/
|
|
24
|
-
| `/by-feature/x`
|
|
25
|
-
|
|
26
|
-
`by-feature` may still exist as a legacy compatibility axis in older tools. Do not introduce new
|
|
27
|
-
guidance that depends on it; prefer `by-system` everywhere.
|
|
28
|
-
|
|
29
|
-
## What To Do With Toggle Requests
|
|
30
|
-
|
|
31
|
-
For natural-language requests like "turn on lead gen", "disable SEO", or "enable CRM":
|
|
32
|
-
|
|
33
|
-
1. Treat the request as a System availability/routing change.
|
|
34
|
-
2. Read `core/config/organization-model.ts` and find the matching System entry or platform
|
|
35
|
-
default constant exposed by `@elevasis/core/organization-model`.
|
|
36
|
-
3. Propose the exact availability/routing change in plain language.
|
|
37
|
-
4. After confirmation, run the Level A codify ceremony in `operations/codify-level-a.md`.
|
|
38
|
-
|
|
39
|
-
Do not create new extension files for a simple on/off change.
|
|
40
|
-
|
|
41
|
-
## When Level B Applies
|
|
42
|
-
|
|
43
|
-
Level B applies only when the user explicitly asks for a new structural concept that cannot be
|
|
44
|
-
represented as an existing System or Action configuration. In current vocabulary this usually
|
|
45
|
-
means adding a project-owned extension under `core/config/extensions/` and wiring it into the
|
|
46
|
-
organization model.
|
|
47
|
-
|
|
48
|
-
Older references may call this "adding a custom feature"; translate it to "add or extend a
|
|
49
|
-
System and define any Actions it owns" before invoking `operations/codify-level-b.md`.
|
|
50
|
-
|
|
51
|
-
## UI Package Exception
|
|
52
|
-
|
|
53
|
-
Keep the word `features` only for legacy frontend source paths that still use that directory
|
|
54
|
-
name, such as `ui/src/features/`. Current published shell APIs are System-oriented:
|
|
55
|
-
`SystemShell`, `SystemModule`, and `ElevasisSystemsProvider`.
|
|
56
|
-
|
|
57
|
-
## Read Examples
|
|
58
|
-
|
|
59
|
-
Use current system paths:
|
|
60
|
-
|
|
61
|
-
```bash
|
|
62
|
-
pnpm exec elevasis-sdk
|
|
63
|
-
pnpm exec elevasis-sdk
|
|
64
|
-
```
|
|
65
|
-
|
|
66
|
-
Legacy browser output:
|
|
67
|
-
|
|
68
|
-
```text
|
|
69
|
-
/knowledge read-folder feature:<id>
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
1
|
+
# Features Compatibility Notes
|
|
2
|
+
|
|
3
|
+
`features` is legacy organization-model wording. Current Organization OS vocabulary is
|
|
4
|
+
System/Action oriented:
|
|
5
|
+
|
|
6
|
+
- **Systems** describe availability, routing, ownership, navigation grouping, and knowledge
|
|
7
|
+
mounts.
|
|
8
|
+
- **Actions** describe invokable operations such as workflows, agents, commands, and UI-triggered
|
|
9
|
+
tasks.
|
|
10
|
+
|
|
11
|
+
Use this file only when older prompts, browser copy text, SDK references, or scaffold recipes still
|
|
12
|
+
say "feature". For current tenant organization-model work, route the user to Systems and Actions
|
|
13
|
+
wording and use `/by-system/<id>` knowledge paths.
|
|
14
|
+
|
|
15
|
+
## Compatibility Mapping
|
|
16
|
+
|
|
17
|
+
| Legacy wording | Current wording |
|
|
18
|
+
| ------------------------------------------------------------------------------------- | ----------------------------------------------- |
|
|
19
|
+
| Feature toggle | System availability or routing toggle |
|
|
20
|
+
| Feature ID | System ID when discussing Organization OS |
|
|
21
|
+
| Add a custom feature | Add or extend a System, then define any Actions |
|
|
22
|
+
| Feature governs X | System governs X |
|
|
23
|
+
| `/om read-folder feature:x` (legacy `/knowledge read-folder feature:x` also accepted) | `/om read-folder system:x` |
|
|
24
|
+
| `/by-feature/x` | `/by-system/x` |
|
|
25
|
+
|
|
26
|
+
`by-feature` may still exist as a legacy compatibility axis in older tools. Do not introduce new
|
|
27
|
+
guidance that depends on it; prefer `by-system` everywhere.
|
|
28
|
+
|
|
29
|
+
## What To Do With Toggle Requests
|
|
30
|
+
|
|
31
|
+
For natural-language requests like "turn on lead gen", "disable SEO", or "enable CRM":
|
|
32
|
+
|
|
33
|
+
1. Treat the request as a System availability/routing change.
|
|
34
|
+
2. Read `core/config/organization-model.ts` and find the matching System entry or platform
|
|
35
|
+
default constant exposed by `@elevasis/core/organization-model`.
|
|
36
|
+
3. Propose the exact availability/routing change in plain language.
|
|
37
|
+
4. After confirmation, run the Level A codify ceremony in `operations/codify-level-a.md`.
|
|
38
|
+
|
|
39
|
+
Do not create new extension files for a simple on/off change.
|
|
40
|
+
|
|
41
|
+
## When Level B Applies
|
|
42
|
+
|
|
43
|
+
Level B applies only when the user explicitly asks for a new structural concept that cannot be
|
|
44
|
+
represented as an existing System or Action configuration. In current vocabulary this usually
|
|
45
|
+
means adding a project-owned extension under `core/config/extensions/` and wiring it into the
|
|
46
|
+
organization model.
|
|
47
|
+
|
|
48
|
+
Older references may call this "adding a custom feature"; translate it to "add or extend a
|
|
49
|
+
System and define any Actions it owns" before invoking `operations/codify-level-b.md`.
|
|
50
|
+
|
|
51
|
+
## UI Package Exception
|
|
52
|
+
|
|
53
|
+
Keep the word `features` only for legacy frontend source paths that still use that directory
|
|
54
|
+
name, such as `ui/src/features/`. Current published shell APIs are System-oriented:
|
|
55
|
+
`SystemShell`, `SystemModule`, and `ElevasisSystemsProvider`.
|
|
56
|
+
|
|
57
|
+
## Read Examples
|
|
58
|
+
|
|
59
|
+
Use current system paths:
|
|
60
|
+
|
|
61
|
+
```bash
|
|
62
|
+
pnpm exec elevasis-sdk om:ls /by-system/<id> --ids-only
|
|
63
|
+
pnpm exec elevasis-sdk om:cat <node-id>
|
|
64
|
+
```
|
|
65
|
+
|
|
66
|
+
Legacy browser output (the `/knowledge` slash form is preserved as a permanent alias for `/om`):
|
|
67
|
+
|
|
68
|
+
```text
|
|
69
|
+
/knowledge read-folder feature:<id>
|
|
70
|
+
/om read-folder feature:<id>
|
|
71
|
+
```
|
|
72
|
+
|
|
73
|
+
Resolve as:
|
|
74
|
+
|
|
75
|
+
```bash
|
|
76
|
+
pnpm exec elevasis-sdk om:ls /by-system/<id> --ids-only
|
|
77
|
+
```
|
|
@@ -1,118 +1,119 @@
|
|
|
1
|
-
# Goals domain
|
|
2
|
-
|
|
3
|
-
The `goals` domain captures what the organization is working toward — time-bounded goals with
|
|
4
|
-
measurable outcomes. The schema shape is OKR-inspired (objectives + key results) but all
|
|
5
|
-
user-facing language must say "goals" and "measurable outcomes". Never say "OKR", "objective",
|
|
6
|
-
or "key result" to the user.
|
|
7
|
-
|
|
8
|
-
Agents use this domain for quarterly planning, priority routing, and understanding which outcomes
|
|
9
|
-
matter most right now.
|
|
10
|
-
|
|
11
|
-
## Schema
|
|
12
|
-
|
|
13
|
-
Source: `packages/core/src/organization-model/domains/goals.ts`
|
|
14
|
-
|
|
15
|
-
```typescript
|
|
16
|
-
GoalsDomainSchema = z.object({
|
|
17
|
-
objectives: z.array(ObjectiveSchema).default([])
|
|
18
|
-
})
|
|
19
|
-
|
|
20
|
-
ObjectiveSchema = z.object({
|
|
21
|
-
id: z.string().trim().min(1).max(100), // stable ID, e.g. "goal-grow-arr-q1-2026"
|
|
22
|
-
description: z.string().trim().min(1).max(1000), // plain-language goal statement
|
|
23
|
-
periodStart: z.string().regex(ISO_DATE), // YYYY-MM-DD — must be before periodEnd
|
|
24
|
-
periodEnd: z.string().regex(ISO_DATE), // YYYY-MM-DD — enforced in superRefine
|
|
25
|
-
keyResults: z.array(KeyResultSchema).default([]) // measurable outcomes under this goal
|
|
26
|
-
})
|
|
27
|
-
|
|
28
|
-
KeyResultSchema = z.object({
|
|
29
|
-
id: z.string().trim().min(1).max(100), // e.g. "kr-revenue-q1"
|
|
30
|
-
description: z.string().trim().min(1).max(500), // e.g. "Increase trial-to-paid conversion"
|
|
31
|
-
targetMetric: z.string().trim().min(1).max(200), // what is being measured, e.g. "monthly revenue"
|
|
32
|
-
currentValue: z.number().default(0), // current tracked value
|
|
33
|
-
targetValue: z.number().optional() // target to hit (omit if directional)
|
|
34
|
-
})
|
|
35
|
-
```
|
|
36
|
-
|
|
37
|
-
## Field reference
|
|
38
|
-
|
|
39
|
-
| Field | Type | Notes |
|
|
40
|
-
| ------------- | ------------- | ---------------------------------------------------------- |
|
|
41
|
-
| `id` | string (100) | Stable key; e.g. `"goal-grow-arr-q1-2026"` |
|
|
42
|
-
| `description` | string (1000) | Plain-language goal statement; min 1 char required |
|
|
43
|
-
| `periodStart` | string | ISO date `YYYY-MM-DD`; must be strictly before `periodEnd` |
|
|
44
|
-
| `periodEnd` | string | ISO date `YYYY-MM-DD`; enforced by `superRefine` |
|
|
45
|
-
| `keyResults` | array | Measurable outcomes under this goal; defaults to `[]` |
|
|
46
|
-
|
|
47
|
-
Key result fields:
|
|
48
|
-
|
|
49
|
-
| Field | Type | Notes |
|
|
50
|
-
| -------------- | ------------ | --------------------------------------------------- |
|
|
51
|
-
| `id` | string (100) | Stable key; e.g. `"kr-revenue-q1"` |
|
|
52
|
-
| `description` | string (500) | What is being tracked; min 1 char required |
|
|
53
|
-
| `targetMetric` | string (200) | The metric name; e.g. `"monthly recurring revenue"` |
|
|
54
|
-
| `currentValue` | number | Current value; defaults to `0` |
|
|
55
|
-
| `targetValue` | number | Optional target; omit if the outcome is directional |
|
|
56
|
-
|
|
57
|
-
## Validation rules
|
|
58
|
-
|
|
59
|
-
- `periodEnd` must be strictly after `periodStart`; enforced at parse time by
|
|
60
|
-
`OrganizationModelSchema.superRefine()`; setting equal dates is also invalid
|
|
61
|
-
- Both `periodStart` and `periodEnd` must match `YYYY-MM-DD` ISO date format exactly
|
|
62
|
-
- The internal field name for the goals array is `objectives` (not `goals`) — this is a
|
|
63
|
-
schema-level name, not user-facing vocabulary; always say "goals" to users
|
|
64
|
-
- The internal field name for measurable outcomes is `keyResults` (not `outcomes`) — same
|
|
65
|
-
convention applies; say "measurable outcomes" to users
|
|
66
|
-
- `targetValue` is optional for directional goals where there is no specific number target
|
|
67
|
-
|
|
68
|
-
## Examples
|
|
69
|
-
|
|
70
|
-
```typescript
|
|
71
|
-
goals: {
|
|
72
|
-
objectives: [
|
|
73
|
-
{
|
|
74
|
-
id: "goal-arr-q1-2026",
|
|
75
|
-
description: "Reach $50K MRR by end of Q1 2026",
|
|
76
|
-
periodStart: "2026-01-01",
|
|
77
|
-
periodEnd: "2026-03-31",
|
|
78
|
-
keyResults: [
|
|
79
|
-
{
|
|
80
|
-
id: "kr-mrr-q1",
|
|
81
|
-
description: "Grow monthly recurring revenue",
|
|
82
|
-
targetMetric: "monthly recurring revenue (MRR)",
|
|
83
|
-
currentValue: 32000,
|
|
84
|
-
targetValue: 50000
|
|
85
|
-
},
|
|
86
|
-
{
|
|
87
|
-
id: "kr-churn-q1",
|
|
88
|
-
description: "Reduce monthly churn rate",
|
|
89
|
-
targetMetric: "monthly churn rate (%)",
|
|
90
|
-
currentValue: 4.2,
|
|
91
|
-
targetValue: 2.5
|
|
92
|
-
}
|
|
93
|
-
]
|
|
94
|
-
}
|
|
95
|
-
]
|
|
96
|
-
}
|
|
97
|
-
```
|
|
98
|
-
|
|
99
|
-
## Where it lives in the adapter
|
|
100
|
-
|
|
101
|
-
`core/config/organization-model.ts` under the `goals` key of
|
|
102
|
-
`defineOrganizationModel({...})`.
|
|
103
|
-
|
|
104
|
-
To read current goals: open the adapter file and inspect the `goals.objectives` array, or use
|
|
105
|
-
`pnpm exec elevasis-sdk
|
|
106
|
-
|
|
107
|
-
## Write path
|
|
108
|
-
|
|
109
|
-
To add, edit, remove, or update progress on a goal, the `/
|
|
110
|
-
ceremony (`operations/codify-level-a.md`): snapshot → propose → confirm → write → typecheck →
|
|
111
|
-
Zod parse → rollback on failure. Only the `objectives` array is written; no other keys in the
|
|
112
|
-
adapter are touched. For progress-only updates (changing `currentValue` on an existing outcome),
|
|
113
|
-
a targeted edit is preferred over rewriting the entire goals block.
|
|
114
|
-
|
|
115
|
-
---
|
|
116
|
-
|
|
117
|
-
**Read via `/
|
|
118
|
-
"what's the current MRR against target?" route to this
|
|
1
|
+
# Goals domain
|
|
2
|
+
|
|
3
|
+
The `goals` domain captures what the organization is working toward — time-bounded goals with
|
|
4
|
+
measurable outcomes. The schema shape is OKR-inspired (objectives + key results) but all
|
|
5
|
+
user-facing language must say "goals" and "measurable outcomes". Never say "OKR", "objective",
|
|
6
|
+
or "key result" to the user.
|
|
7
|
+
|
|
8
|
+
Agents use this domain for quarterly planning, priority routing, and understanding which outcomes
|
|
9
|
+
matter most right now.
|
|
10
|
+
|
|
11
|
+
## Schema
|
|
12
|
+
|
|
13
|
+
Source: `packages/core/src/organization-model/domains/goals.ts`
|
|
14
|
+
|
|
15
|
+
```typescript
|
|
16
|
+
GoalsDomainSchema = z.object({
|
|
17
|
+
objectives: z.array(ObjectiveSchema).default([])
|
|
18
|
+
})
|
|
19
|
+
|
|
20
|
+
ObjectiveSchema = z.object({
|
|
21
|
+
id: z.string().trim().min(1).max(100), // stable ID, e.g. "goal-grow-arr-q1-2026"
|
|
22
|
+
description: z.string().trim().min(1).max(1000), // plain-language goal statement
|
|
23
|
+
periodStart: z.string().regex(ISO_DATE), // YYYY-MM-DD — must be before periodEnd
|
|
24
|
+
periodEnd: z.string().regex(ISO_DATE), // YYYY-MM-DD — enforced in superRefine
|
|
25
|
+
keyResults: z.array(KeyResultSchema).default([]) // measurable outcomes under this goal
|
|
26
|
+
})
|
|
27
|
+
|
|
28
|
+
KeyResultSchema = z.object({
|
|
29
|
+
id: z.string().trim().min(1).max(100), // e.g. "kr-revenue-q1"
|
|
30
|
+
description: z.string().trim().min(1).max(500), // e.g. "Increase trial-to-paid conversion"
|
|
31
|
+
targetMetric: z.string().trim().min(1).max(200), // what is being measured, e.g. "monthly revenue"
|
|
32
|
+
currentValue: z.number().default(0), // current tracked value
|
|
33
|
+
targetValue: z.number().optional() // target to hit (omit if directional)
|
|
34
|
+
})
|
|
35
|
+
```
|
|
36
|
+
|
|
37
|
+
## Field reference
|
|
38
|
+
|
|
39
|
+
| Field | Type | Notes |
|
|
40
|
+
| ------------- | ------------- | ---------------------------------------------------------- |
|
|
41
|
+
| `id` | string (100) | Stable key; e.g. `"goal-grow-arr-q1-2026"` |
|
|
42
|
+
| `description` | string (1000) | Plain-language goal statement; min 1 char required |
|
|
43
|
+
| `periodStart` | string | ISO date `YYYY-MM-DD`; must be strictly before `periodEnd` |
|
|
44
|
+
| `periodEnd` | string | ISO date `YYYY-MM-DD`; enforced by `superRefine` |
|
|
45
|
+
| `keyResults` | array | Measurable outcomes under this goal; defaults to `[]` |
|
|
46
|
+
|
|
47
|
+
Key result fields:
|
|
48
|
+
|
|
49
|
+
| Field | Type | Notes |
|
|
50
|
+
| -------------- | ------------ | --------------------------------------------------- |
|
|
51
|
+
| `id` | string (100) | Stable key; e.g. `"kr-revenue-q1"` |
|
|
52
|
+
| `description` | string (500) | What is being tracked; min 1 char required |
|
|
53
|
+
| `targetMetric` | string (200) | The metric name; e.g. `"monthly recurring revenue"` |
|
|
54
|
+
| `currentValue` | number | Current value; defaults to `0` |
|
|
55
|
+
| `targetValue` | number | Optional target; omit if the outcome is directional |
|
|
56
|
+
|
|
57
|
+
## Validation rules
|
|
58
|
+
|
|
59
|
+
- `periodEnd` must be strictly after `periodStart`; enforced at parse time by
|
|
60
|
+
`OrganizationModelSchema.superRefine()`; setting equal dates is also invalid
|
|
61
|
+
- Both `periodStart` and `periodEnd` must match `YYYY-MM-DD` ISO date format exactly
|
|
62
|
+
- The internal field name for the goals array is `objectives` (not `goals`) — this is a
|
|
63
|
+
schema-level name, not user-facing vocabulary; always say "goals" to users
|
|
64
|
+
- The internal field name for measurable outcomes is `keyResults` (not `outcomes`) — same
|
|
65
|
+
convention applies; say "measurable outcomes" to users
|
|
66
|
+
- `targetValue` is optional for directional goals where there is no specific number target
|
|
67
|
+
|
|
68
|
+
## Examples
|
|
69
|
+
|
|
70
|
+
```typescript
|
|
71
|
+
goals: {
|
|
72
|
+
objectives: [
|
|
73
|
+
{
|
|
74
|
+
id: "goal-arr-q1-2026",
|
|
75
|
+
description: "Reach $50K MRR by end of Q1 2026",
|
|
76
|
+
periodStart: "2026-01-01",
|
|
77
|
+
periodEnd: "2026-03-31",
|
|
78
|
+
keyResults: [
|
|
79
|
+
{
|
|
80
|
+
id: "kr-mrr-q1",
|
|
81
|
+
description: "Grow monthly recurring revenue",
|
|
82
|
+
targetMetric: "monthly recurring revenue (MRR)",
|
|
83
|
+
currentValue: 32000,
|
|
84
|
+
targetValue: 50000
|
|
85
|
+
},
|
|
86
|
+
{
|
|
87
|
+
id: "kr-churn-q1",
|
|
88
|
+
description: "Reduce monthly churn rate",
|
|
89
|
+
targetMetric: "monthly churn rate (%)",
|
|
90
|
+
currentValue: 4.2,
|
|
91
|
+
targetValue: 2.5
|
|
92
|
+
}
|
|
93
|
+
]
|
|
94
|
+
}
|
|
95
|
+
]
|
|
96
|
+
}
|
|
97
|
+
```
|
|
98
|
+
|
|
99
|
+
## Where it lives in the adapter
|
|
100
|
+
|
|
101
|
+
`core/config/organization-model.ts` under the `goals` key of
|
|
102
|
+
`defineOrganizationModel({...})`.
|
|
103
|
+
|
|
104
|
+
To read current goals: open the adapter file and inspect the `goals.objectives` array, or use
|
|
105
|
+
`pnpm exec elevasis-sdk om:cat goals` (external project).
|
|
106
|
+
|
|
107
|
+
## Write path
|
|
108
|
+
|
|
109
|
+
To add, edit, remove, or update progress on a goal, the `/om` skill runs the codify
|
|
110
|
+
ceremony (`operations/codify-level-a.md`): snapshot → propose → confirm → write → typecheck →
|
|
111
|
+
Zod parse → rollback on failure. Only the `objectives` array is written; no other keys in the
|
|
112
|
+
adapter are touched. For progress-only updates (changing `currentValue` on an existing outcome),
|
|
113
|
+
a targeted edit is preferred over rewriting the entire goals block.
|
|
114
|
+
|
|
115
|
+
---
|
|
116
|
+
|
|
117
|
+
**Read via `/om`** (legacy `/knowledge` alias also accepted) — natural-language queries like
|
|
118
|
+
"what are our goals this quarter?" or "what's the current MRR against target?" route to this
|
|
119
|
+
domain via the skill's intent classifier.
|
|
@@ -1,93 +1,94 @@
|
|
|
1
|
-
# Identity domain
|
|
2
|
-
|
|
3
|
-
The `identity` domain captures the organization's legal identity, purpose, and operational anchors.
|
|
4
|
-
It is distinct from `branding` (display identity: logos, product names) — editing identity fields
|
|
5
|
-
here does not touch any visual or branding configuration.
|
|
6
|
-
|
|
7
|
-
## Schema
|
|
8
|
-
|
|
9
|
-
Source: `packages/core/src/organization-model/domains/identity.ts`
|
|
10
|
-
|
|
11
|
-
```typescript
|
|
12
|
-
IdentityDomainSchema = z.object({
|
|
13
|
-
mission: z.string().trim().max(1000).default(''),
|
|
14
|
-
vision: z.string().trim().max(1000).default(''),
|
|
15
|
-
legalName: z.string().trim().max(200).default(''),
|
|
16
|
-
entityType: z.string().trim().max(100).default(''), // e.g. "LLC", "Corporation"
|
|
17
|
-
jurisdiction: z.string().trim().max(200).default(''), // e.g. "United States – Delaware"
|
|
18
|
-
industryCategory: z.string().trim().max(200).default(''), // e.g. "Marketing Agency"
|
|
19
|
-
geographicFocus: z.string().trim().max(200).default(''), // e.g. "North America"
|
|
20
|
-
timeZone: z.string().trim().max(100).default('UTC'), // IANA identifier
|
|
21
|
-
businessHours: BusinessHoursSchema // per-day { open, close } in HH:MM
|
|
22
|
-
})
|
|
23
|
-
```
|
|
24
|
-
|
|
25
|
-
`BusinessHoursSchema` is an object with optional keys `monday` through `sunday`, each holding
|
|
26
|
-
`{ open: "HH:MM", close: "HH:MM" }`. An empty object `{}` means not configured.
|
|
27
|
-
|
|
28
|
-
## Field reference
|
|
29
|
-
|
|
30
|
-
| Field | Type | Max | Notes |
|
|
31
|
-
| ------------------ | ------ | ---- | -------------------------------------------------------- |
|
|
32
|
-
| `mission` | string | 1000 | Why the organization exists |
|
|
33
|
-
| `vision` | string | 1000 | Where the organization is headed long-term |
|
|
34
|
-
| `legalName` | string | 200 | Registered legal name |
|
|
35
|
-
| `entityType` | string | 100 | e.g. "LLC", "Corporation", "Sole Proprietor" |
|
|
36
|
-
| `jurisdiction` | string | 200 | e.g. "United States – Delaware", "Canada – Ontario" |
|
|
37
|
-
| `industryCategory` | string | 200 | e.g. "Marketing Agency", "SaaS", "Professional Services" |
|
|
38
|
-
| `geographicFocus` | string | 200 | e.g. "North America", "Global", "Southeast Asia" |
|
|
39
|
-
| `timeZone` | string | 100 | IANA identifier, e.g. `America/Los_Angeles` |
|
|
40
|
-
| `businessHours` | object | -- | Per-day `{ open: "HH:MM", close: "HH:MM" }` |
|
|
41
|
-
|
|
42
|
-
## Validation rules
|
|
43
|
-
|
|
44
|
-
- All string fields default to empty string `''`; none are required to be non-empty at schema level
|
|
45
|
-
- `timeZone` defaults to `"UTC"` when not set; agents should treat a value of `"UTC"` as
|
|
46
|
-
potentially unconfigured and surface it for review
|
|
47
|
-
- `businessHours` defaults to `{}` (not configured); an empty object is valid
|
|
48
|
-
- Per-day entries must follow `"HH:MM"` 24-hour format; the schema does not enforce range bounds
|
|
49
|
-
but convention is `00:00`–`23:59`
|
|
50
|
-
- `jurisdiction` should use the format `"Country – Region"` (em dash, not hyphen) for
|
|
51
|
-
consistency across agents that parse it
|
|
52
|
-
|
|
53
|
-
## Examples
|
|
54
|
-
|
|
55
|
-
```typescript
|
|
56
|
-
identity: {
|
|
57
|
-
mission: "We help SMBs automate complex operations using AI.",
|
|
58
|
-
vision: "A world where every business operates at the efficiency of a Fortune 500.",
|
|
59
|
-
legalName: "Acme Operations LLC",
|
|
60
|
-
entityType: "LLC",
|
|
61
|
-
jurisdiction: "United States – Delaware",
|
|
62
|
-
industryCategory: "AI Automation / Professional Services",
|
|
63
|
-
geographicFocus: "North America",
|
|
64
|
-
timeZone: "America/Chicago",
|
|
65
|
-
businessHours: {
|
|
66
|
-
monday: { open: "09:00", close: "17:00" },
|
|
67
|
-
tuesday: { open: "09:00", close: "17:00" },
|
|
68
|
-
wednesday: { open: "09:00", close: "17:00" },
|
|
69
|
-
thursday: { open: "09:00", close: "17:00" },
|
|
70
|
-
friday: { open: "09:00", close: "17:00" }
|
|
71
|
-
}
|
|
72
|
-
}
|
|
73
|
-
```
|
|
74
|
-
|
|
75
|
-
## Where it lives in the adapter
|
|
76
|
-
|
|
77
|
-
`core/config/organization-model.ts` under the `identity` key of
|
|
78
|
-
`defineOrganizationModel({...})`.
|
|
79
|
-
|
|
80
|
-
To read the current values: open the adapter file and inspect the `identity` block directly, or
|
|
81
|
-
use `pnpm exec elevasis-sdk
|
|
82
|
-
|
|
83
|
-
## Write path
|
|
84
|
-
|
|
85
|
-
To edit any field, the `/
|
|
86
|
-
(`operations/codify-level-a.md`): snapshot → propose → confirm → write → typecheck → Zod parse →
|
|
87
|
-
rollback on failure. Only the confirmed fields are written; no other top-level keys in the adapter
|
|
88
|
-
are touched.
|
|
89
|
-
|
|
90
|
-
---
|
|
91
|
-
|
|
92
|
-
**Read via `/
|
|
93
|
-
"what timezone are we in?" route to this domain via the skill's
|
|
1
|
+
# Identity domain
|
|
2
|
+
|
|
3
|
+
The `identity` domain captures the organization's legal identity, purpose, and operational anchors.
|
|
4
|
+
It is distinct from `branding` (display identity: logos, product names) — editing identity fields
|
|
5
|
+
here does not touch any visual or branding configuration.
|
|
6
|
+
|
|
7
|
+
## Schema
|
|
8
|
+
|
|
9
|
+
Source: `packages/core/src/organization-model/domains/identity.ts`
|
|
10
|
+
|
|
11
|
+
```typescript
|
|
12
|
+
IdentityDomainSchema = z.object({
|
|
13
|
+
mission: z.string().trim().max(1000).default(''),
|
|
14
|
+
vision: z.string().trim().max(1000).default(''),
|
|
15
|
+
legalName: z.string().trim().max(200).default(''),
|
|
16
|
+
entityType: z.string().trim().max(100).default(''), // e.g. "LLC", "Corporation"
|
|
17
|
+
jurisdiction: z.string().trim().max(200).default(''), // e.g. "United States – Delaware"
|
|
18
|
+
industryCategory: z.string().trim().max(200).default(''), // e.g. "Marketing Agency"
|
|
19
|
+
geographicFocus: z.string().trim().max(200).default(''), // e.g. "North America"
|
|
20
|
+
timeZone: z.string().trim().max(100).default('UTC'), // IANA identifier
|
|
21
|
+
businessHours: BusinessHoursSchema // per-day { open, close } in HH:MM
|
|
22
|
+
})
|
|
23
|
+
```
|
|
24
|
+
|
|
25
|
+
`BusinessHoursSchema` is an object with optional keys `monday` through `sunday`, each holding
|
|
26
|
+
`{ open: "HH:MM", close: "HH:MM" }`. An empty object `{}` means not configured.
|
|
27
|
+
|
|
28
|
+
## Field reference
|
|
29
|
+
|
|
30
|
+
| Field | Type | Max | Notes |
|
|
31
|
+
| ------------------ | ------ | ---- | -------------------------------------------------------- |
|
|
32
|
+
| `mission` | string | 1000 | Why the organization exists |
|
|
33
|
+
| `vision` | string | 1000 | Where the organization is headed long-term |
|
|
34
|
+
| `legalName` | string | 200 | Registered legal name |
|
|
35
|
+
| `entityType` | string | 100 | e.g. "LLC", "Corporation", "Sole Proprietor" |
|
|
36
|
+
| `jurisdiction` | string | 200 | e.g. "United States – Delaware", "Canada – Ontario" |
|
|
37
|
+
| `industryCategory` | string | 200 | e.g. "Marketing Agency", "SaaS", "Professional Services" |
|
|
38
|
+
| `geographicFocus` | string | 200 | e.g. "North America", "Global", "Southeast Asia" |
|
|
39
|
+
| `timeZone` | string | 100 | IANA identifier, e.g. `America/Los_Angeles` |
|
|
40
|
+
| `businessHours` | object | -- | Per-day `{ open: "HH:MM", close: "HH:MM" }` |
|
|
41
|
+
|
|
42
|
+
## Validation rules
|
|
43
|
+
|
|
44
|
+
- All string fields default to empty string `''`; none are required to be non-empty at schema level
|
|
45
|
+
- `timeZone` defaults to `"UTC"` when not set; agents should treat a value of `"UTC"` as
|
|
46
|
+
potentially unconfigured and surface it for review
|
|
47
|
+
- `businessHours` defaults to `{}` (not configured); an empty object is valid
|
|
48
|
+
- Per-day entries must follow `"HH:MM"` 24-hour format; the schema does not enforce range bounds
|
|
49
|
+
but convention is `00:00`–`23:59`
|
|
50
|
+
- `jurisdiction` should use the format `"Country – Region"` (em dash, not hyphen) for
|
|
51
|
+
consistency across agents that parse it
|
|
52
|
+
|
|
53
|
+
## Examples
|
|
54
|
+
|
|
55
|
+
```typescript
|
|
56
|
+
identity: {
|
|
57
|
+
mission: "We help SMBs automate complex operations using AI.",
|
|
58
|
+
vision: "A world where every business operates at the efficiency of a Fortune 500.",
|
|
59
|
+
legalName: "Acme Operations LLC",
|
|
60
|
+
entityType: "LLC",
|
|
61
|
+
jurisdiction: "United States – Delaware",
|
|
62
|
+
industryCategory: "AI Automation / Professional Services",
|
|
63
|
+
geographicFocus: "North America",
|
|
64
|
+
timeZone: "America/Chicago",
|
|
65
|
+
businessHours: {
|
|
66
|
+
monday: { open: "09:00", close: "17:00" },
|
|
67
|
+
tuesday: { open: "09:00", close: "17:00" },
|
|
68
|
+
wednesday: { open: "09:00", close: "17:00" },
|
|
69
|
+
thursday: { open: "09:00", close: "17:00" },
|
|
70
|
+
friday: { open: "09:00", close: "17:00" }
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
```
|
|
74
|
+
|
|
75
|
+
## Where it lives in the adapter
|
|
76
|
+
|
|
77
|
+
`core/config/organization-model.ts` under the `identity` key of
|
|
78
|
+
`defineOrganizationModel({...})`.
|
|
79
|
+
|
|
80
|
+
To read the current values: open the adapter file and inspect the `identity` block directly, or
|
|
81
|
+
use `pnpm exec elevasis-sdk om:cat identity` (external project).
|
|
82
|
+
|
|
83
|
+
## Write path
|
|
84
|
+
|
|
85
|
+
To edit any field, the `/om` skill runs the codify ceremony
|
|
86
|
+
(`operations/codify-level-a.md`): snapshot → propose → confirm → write → typecheck → Zod parse →
|
|
87
|
+
rollback on failure. Only the confirmed fields are written; no other top-level keys in the adapter
|
|
88
|
+
are touched.
|
|
89
|
+
|
|
90
|
+
---
|
|
91
|
+
|
|
92
|
+
**Read via `/om`** (legacy `/knowledge` alias also accepted) — natural-language queries like
|
|
93
|
+
"what's our identity set to?" or "what timezone are we in?" route to this domain via the skill's
|
|
94
|
+
intent classifier.
|