oris-skills 2.0.0 → 2.2.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.
Files changed (83) hide show
  1. package/.cursor-plugin/plugin.json +2 -11
  2. package/CHANGELOG.md +48 -0
  3. package/README.md +79 -31
  4. package/agents/oris-loop-debriefer.md +1 -0
  5. package/agents/oris-loop-doctor.md +1 -1
  6. package/agents/oris-loop-executor.md +5 -2
  7. package/agents/oris-loop-verifier.md +6 -2
  8. package/docs/architecture.md +9 -7
  9. package/docs/distribution.md +1 -1
  10. package/docs/maintainer-guide.md +5 -5
  11. package/docs/user-guide.md +12 -9
  12. package/package.json +2 -3
  13. package/references/clean-code-checklist.md +20 -107
  14. package/references/conventions.md +43 -3
  15. package/references/doc-policy.md +19 -3
  16. package/references/loop-contract.md +24 -17
  17. package/references/loop.schema.json +13 -0
  18. package/references/repo-map.md +3 -3
  19. package/references/repo-map.schema.json +41 -0
  20. package/references/settings.md +2 -1
  21. package/references/settings.schema.json +5 -0
  22. package/scripts/flow/oris-flow-layout.mjs +1 -0
  23. package/scripts/flow/oris-flow-scan.mjs +265 -27
  24. package/scripts/install/generate-agent-adapters.mjs +19 -2
  25. package/scripts/install/install-user-skills.mjs +61 -3
  26. package/scripts/install/uninstall-user-skills.mjs +17 -1
  27. package/scripts/loop/oris-loop-bootstrap.mjs +7 -2
  28. package/scripts/loop/oris-loop-chat.mjs +34 -16
  29. package/scripts/loop/oris-loop-demo.mjs +11 -20
  30. package/scripts/loop/oris-loop-document.mjs +24 -7
  31. package/scripts/loop/oris-loop-dry-run.mjs +8 -4
  32. package/scripts/loop/oris-loop-fixtures.mjs +13 -12
  33. package/scripts/loop/oris-loop-run.mjs +80 -20
  34. package/scripts/loop/oris-loop-stop.mjs +48 -9
  35. package/scripts/loop/oris-loop-templates.mjs +13 -10
  36. package/scripts/loop/oris-loop-verify.mjs +1 -2
  37. package/scripts/oris-skills.mjs +3 -2
  38. package/scripts/tests/run-all-tests.mjs +1 -2
  39. package/scripts/tests/test-oris-flow-scan.mjs +109 -1
  40. package/scripts/tests/test-oris-loop-document.mjs +39 -3
  41. package/scripts/tests/test-oris-loop-run.mjs +28 -2
  42. package/scripts/tests/test-oris-loop-smoke.mjs +36 -3
  43. package/scripts/tests/test-oris-loop-stop.mjs +65 -4
  44. package/scripts/tests/test-routing-lifecycle.mjs +38 -23
  45. package/scripts/tests/test-skill-style.mjs +64 -0
  46. package/skills/oris-flow/SKILL.md +53 -25
  47. package/skills/oris-flow/references/architecture.md +77 -0
  48. package/skills/oris-flow/references/change.md +60 -0
  49. package/skills/oris-flow/references/criteria.md +60 -0
  50. package/skills/oris-flow/references/discover.md +66 -0
  51. package/skills/oris-flow/references/docs.md +33 -0
  52. package/skills/oris-flow/references/fix.md +49 -0
  53. package/skills/oris-flow/references/help.md +34 -0
  54. package/skills/oris-flow/references/implement.md +48 -0
  55. package/skills/oris-flow/references/loop-craft.md +59 -0
  56. package/skills/oris-flow/references/loop-improve.md +32 -0
  57. package/skills/oris-flow/references/loop-run.md +47 -0
  58. package/skills/oris-flow/references/loop.md +56 -0
  59. package/skills/oris-flow/references/new.md +64 -0
  60. package/skills/oris-flow/references/plan.md +58 -0
  61. package/skills/oris-flow/references/setup.md +100 -0
  62. package/skills/oris-flow/references/verify.md +57 -0
  63. package/skills/{oris-loop → oris-flow}/templates/debriefer.md +2 -1
  64. package/skills/oris-flow/templates/doctor.md +22 -0
  65. package/skills/{oris-loop → oris-flow}/templates/executor.md +8 -2
  66. package/skills/{oris-loop → oris-flow}/templates/orchestrator.md +10 -7
  67. package/skills/{oris-loop → oris-flow}/templates/verifier.md +6 -3
  68. package/references/questions.md +0 -38
  69. package/skills/oris-flow-criteria/SKILL.md +0 -49
  70. package/skills/oris-flow-discover/SKILL.md +0 -58
  71. package/skills/oris-flow-docs/SKILL.md +0 -31
  72. package/skills/oris-flow-fix/SKILL.md +0 -42
  73. package/skills/oris-flow-implement/SKILL.md +0 -43
  74. package/skills/oris-flow-plan/SKILL.md +0 -51
  75. package/skills/oris-flow-setup/SKILL.md +0 -49
  76. package/skills/oris-help/SKILL.md +0 -30
  77. package/skills/oris-help/agents/openai.yaml +0 -4
  78. package/skills/oris-loop/SKILL.md +0 -66
  79. package/skills/oris-loop/agents/openai.yaml +0 -4
  80. package/skills/oris-loop/references/craft.md +0 -48
  81. package/skills/oris-loop/references/improve.md +0 -23
  82. package/skills/oris-loop/references/run.md +0 -30
  83. package/skills/oris-loop/templates/doctor.md +0 -20
@@ -8,23 +8,63 @@ Shared rules for every Oris skill. Skills reference this file instead of repeati
8
8
  - Installed: `~/.oris/oris-skills/`
9
9
  - Repo checkout: repository root.
10
10
 
11
+ ## Silence (the fluidity contract)
12
+
13
+ The user sees questions, answers, results, and gates — NEVER the machinery. Reading maps,
14
+ references, or settings, checking freshness, writing back facts, loading a route: all
15
+ SILENT. Never say "let me read…", "I'm checking the manifest…", "updating the map…".
16
+ One announcement exists: the route entry line ("Entering <route>: <why>"). Everything
17
+ else the user hears is the work itself.
18
+
19
+ ## Routing handles
20
+
21
+ ONE user-facing skill exists: `skills/oris-flow/SKILL.md` (/oris-flow — the router). Every destination is one of its references — name it by file path (`skills/oris-flow/references/fix.md`), the one canonical handle. Never by slash command or prose nickname. Routing means: read the reference file and apply it in the same chat.
22
+
23
+ ## CLI commands
24
+
25
+ The `oris-skills` CLI is NOT installed globally. ALWAYS invoke it as `npx oris-skills <command>` — a bare `oris-skills …` fails on user machines.
26
+
11
27
  ## Questions
12
28
 
13
29
  - ASK with the platform question UI (Cursor `AskQuestion`, Claude `AskUserQuestion`); ELSE ask plainly in chat.
14
30
  - ONE question per turn. Recommended answer FIRST.
15
31
  - ALWAYS include, localized to `uiLanguage`:
16
- - `Explain the options` / `Spiega le opzioni` — explain, then re-ask.
17
- - During interviews: `Enough questions — proceed` / `Basta domande — procedi` (early exit).
32
+ - `Explain the options` / `Spiega le opzioni` — explain, then re-ask the same question.
33
+ - During interviews: `Enough questions — proceed` / `Basta domande — procedi` (early exit → go to the generation gate; NOT approval to write).
18
34
  - NEVER ask what the workspace, docs, code, or setup map already answer. Explore first.
19
35
 
36
+ ## Generation gates
37
+
38
+ - Standard labels, localized: `Generate the document` / `Genera il documento`, `Approve document` / `Approva documento`, `Continue the interview` / `Continua l'intervista`, `Cancel` / `Annulla`.
39
+ - NEVER write documents before the explicit gate choice. Exception: `oris-flow-criteria` writes first, then asks ONCE — the document is confirmed only on approval.
40
+ - After a document is written: concise summary + contextual next-step menu. NEVER auto-start the next phase.
41
+
20
42
  ## Language
21
43
 
22
44
  - READ `references/settings.md` (user settings: `~/.oris/settings.json`).
23
45
  - Chat + questions: `uiLanguage`. Generated documents: `artifactLanguage`. Default both: `en`.
24
46
 
25
- ## Setup map
47
+ ## Response style
48
+
49
+ READ `orisFlow.responseStyle` (`standard` | `caveman`, default `standard`).
50
+
51
+ `caveman` = the user pays per token; chat goes maximum density. The contract, in its own voice:
52
+
53
+ > Caveman speak short. Answer first. No warm-up, no "I will now…", no repeat of what user said.
54
+ > One line beat three. Fragment fine. Code speak for itself.
55
+ > Caveman brain still big: same exploration, same gates, same evidence — only words shrink.
56
+ > Question still one per turn, labels still full. Recap = counted facts, no prose.
57
+ > Danger, error, secret → caveman speak clear, full sentence. Safety never shrink.
58
+
59
+ SCOPE: chat replies, recaps, status lines. NEVER compressed: generated documents, gate
60
+ labels, receipts, error reports, and anything another session must read cold.
61
+
62
+ ## Setup map & write-back
26
63
 
27
64
  - WHEN `.oris-flow/manifest.json` exists: read it + only the relevant `.oris-flow/maps/**` sections BEFORE scanning broadly.
65
+ - FRESHNESS is one call: `npx oris-skills flow scan --repository-root <repo> --check` — compares the manifest's `headSha` anchor to the current HEAD. `fresh: true` → trust the map, zero extra reads. Stale → refresh ONLY the areas the `changedFiles` list touches (`--area <section>`), in place; full rescans belong to setup.
66
+ - WRITE BACK what the flow proved — silently, at natural pauses (after verification, at close; never mid-move): a command observed green → mark it `confirmed`; a map fact the repo contradicts → correct that section in place. Small scoped edits only.
67
+ - Write-back must NEVER slow the work: nothing durable learned → write nothing; batch at the end of the turn; never block an edit or a verification on map bookkeeping; never full-rescan mid-task.
28
68
  - VERIFY stale or high-risk map facts against the repository before consequential actions.
29
69
 
30
70
  ## Gates
@@ -2,18 +2,34 @@
2
2
 
3
3
  Applies whenever an Oris skill writes or updates task documentation. Project-agnostic.
4
4
 
5
+ ## The {tasksRoot}
6
+
7
+ Oris keeps its artifacts in its own folder — it never dirties the project's docs by default.
8
+
9
+ - RESOLVE: `setup.tasksRoot` from `.oris-flow/manifest.json`; DEFAULT `.oris-flow/tasks` when missing.
10
+ - LEGACY: a repo with populated `docs/tasks/` and no manifest value keeps `docs/tasks` — setup records the choice once.
11
+ - NEVER mix roots in one repo; the manifest value is the single truth.
12
+
5
13
  ## Task folder
6
14
 
7
15
  One folder per feature, whole lifecycle:
8
16
 
9
17
  | File | Purpose | Written by |
10
18
  |------|---------|------------|
11
- | `docs/tasks/{task}/functional-analysis.md` | confirmed business behavior | discover |
12
- | `docs/tasks/{task}/acceptance-criteria.md` | QA criteria, stable `AC-xxx` IDs | criteria |
13
- | `docs/tasks/{task}/implementation-plan.md` | execution-ready technical plan | plan |
19
+ | `{tasksRoot}/{task}/functional-analysis.md` | confirmed business behavior | discover |
20
+ | `{tasksRoot}/{task}/acceptance-criteria.md` | QA criteria, stable `AC-xxx` IDs | criteria |
21
+ | `{tasksRoot}/{task}/implementation-plan.md` | execution-ready technical plan | plan |
22
+ | `{tasksRoot}/{task}/verification-report.md` | AC results with evidence | verify |
23
+ | `{tasksRoot}/{task}/change-log.md` | spec changes, stable `CH-xxx` IDs | change |
14
24
 
15
25
  NEVER split one feature's docs across unrelated directories.
16
26
 
27
+ ## The {task} slug
28
+
29
+ - DERIVE: kebab-case from the confirmed feature name (e.g. "Export invoices to CSV" → `export-invoices-csv`); prefix with the tracker ID when one exists (`feature-1213-export-invoices-csv`).
30
+ - BEFORE creating: LIST `{tasksRoot}/` and REUSE the existing folder when it covers the same feature — one feature, one folder, forever.
31
+ - IF two candidates could match → ask ONE question; never guess between them, never create a duplicate.
32
+
17
33
  ## Rules
18
34
 
19
35
  1. Language: documents in `artifactLanguage`; skill instructions stay English.
@@ -6,15 +6,15 @@ An Oris loop is a project-local feedback system: observe → choose ONE bounded
6
6
 
7
7
  ```text
8
8
  .oris-flow/
9
- adapter.json repo adapter (paths, commands, model aliases) — `oris-skills loop bootstrap`
9
+ adapter.json repo adapter (paths, commands, model aliases) — `npx oris-skills loop bootstrap`
10
10
  loops/{slug}/
11
11
  loop.md approved contract (front matter below)
12
- prompts/ one editable file per role
12
+ prompts/ one editable file per ACTIVE role
13
13
  orchestrator.md injected each pass by the stop hook (optional; default shipped)
14
14
  executor.md required
15
15
  verifier.md required
16
- doctor.md required
17
- debriefer.md optional (required for improve.mode: auto)
16
+ doctor.md only when roles includes doctor
17
+ debriefer.md only when roles includes debriefer (required for improve.mode: auto)
18
18
  context.md living handoff snapshot (facts, next action)
19
19
  receipts/ one compact receipt per pass
20
20
  proposals/ unapproved improvement patches
@@ -31,9 +31,10 @@ kind: oris-loop
31
31
  name: my-loop # stable slug
32
32
  approved: true # set by the user's approval at craft — loop cannot start without it
33
33
  phases: [work]
34
+ roles: [executor, verifier] # default; opt in doctor and/or debriefer only when needed
34
35
  limits:
35
- maxIterations: 25
36
- maxNoProgress: 2
36
+ maxIterations: 10
37
+ maxNoProgress: 2 # consecutive passes without verified progress → blocked
37
38
  maxMinutes: 240
38
39
  models: # per-role: "inherit" | adapter alias | platform model id
39
40
  default: inherit
@@ -56,15 +57,19 @@ Schema: `references/loop.schema.json`. Body = human summary; prompts live in `pr
56
57
 
57
58
  ## Roles
58
59
 
59
- | Role | Does | Never |
60
- |------|------|-------|
61
- | orchestrator (main chat) | reads context, spawns roles, writes receipts, sets state | executor/verifier/doctor work |
62
- | executor | ONE bounded action per pass | self-verify, exceed scope |
63
- | verifier | independent evidence check per user criteria | trust claims, edit product files |
64
- | doctor | continue / advance / complete / stop from evidence | edit files, patch loop.md |
65
- | debriefer | learn across receipts; tune prompts (auto) or propose (propose) | touch scope/limits/permissions |
60
+ Default roles are **executor + verifier** — enough for most loops. Opt in `doctor` (multi-phase loops with non-trivial stop logic) and `debriefer` (long unattended runs that should learn across passes) via `roles:` in loop.md.
66
61
 
67
- Every prompt is a file the user can edit; the next pass obeys the edited file. Subagent output stays compact; raw logs go to `.oris-flow/runtime/evidence/`.
62
+ | Role | Default | Does | Never |
63
+ |------|---------|------|-------|
64
+ | orchestrator (main chat) | always | reads context, spawns roles, writes receipts, sets state | executor/verifier/doctor work |
65
+ | executor | yes | ONE bounded action per pass | self-verify, exceed scope |
66
+ | verifier | yes | independent evidence check per user criteria; sets `goalMet` when the LOOP goal is satisfied | trust claims, edit product files |
67
+ | doctor | opt-in | decision from evidence: `continue \| advance \| complete \| ask-user \| propose-patch \| blocked` (canonical enum — every doctor prompt uses exactly these) | edit files, patch loop.md |
68
+ | debriefer | opt-in | learn across receipts; tune prompts (auto) or propose (propose) | touch scope/limits/permissions |
69
+
70
+ Without a doctor, the verifier verdict maps to the state directly: `pass` + `goalMet` → complete; `pass`/`fail` → continue; `blocked`/`inconclusive` → ask-user.
71
+
72
+ Every prompt is a file the user can edit; the next pass obeys the edited file. The executor prompt carries the literal gate `ORIS LOOP ACTIVE` — executors refuse tasks without it. Subagent output is a single ```json fenced block; raw logs go to `.oris-flow/runtime/evidence/`. Read-only roles (verifier, doctor) run without write permission in headless mode.
68
73
 
69
74
  ## Models
70
75
 
@@ -78,14 +83,16 @@ Anything else → passed through as a platform model id.
78
83
  |----------|-----------|
79
84
  | Cursor | `.cursor/hooks.json` stop hook → injects the next pass into the same chat |
80
85
  | Claude Code | `.claude/settings.json` Stop hook → `decision: block` continues the same session |
81
- | Codex / CI | `oris-skills loop run` — each role is a separate CLI process |
86
+ | Codex / CI | `npx oris-skills loop run` — each role is a separate CLI process |
82
87
 
83
- `oris-skills loop bootstrap` writes adapter + hooks + wrappers. The injected pass message comes from `prompts/orchestrator.md` (or the shipped default) with `{{placeholders}}` filled from runtime state.
88
+ `npx oris-skills loop bootstrap` writes adapter + hooks + wrappers. The injected pass message comes from `prompts/orchestrator.md` (or the shipped default) with `{{placeholders}}` filled from runtime state.
84
89
 
85
90
  ## States and outcomes
86
91
 
87
- Machine states: `continue` | `advance` | `complete` | `blocked` | `cancelled`.
92
+ Machine states: `continue` | `advance` | `complete` | `ask-user` | `blocked` | `cancelled`.
93
+ `ask-user` pauses the loop for input or approval — the hook stops resuming until the state is set back to `continue` (or the loop is restarted). It is NOT a failure.
88
94
  Receipt results: `Success` | `Clean no-op` | `Blocked` | `Approval required` | `Exhausted` | `No progress`.
95
+ Every `set-state` carries `--progress yes|no` (yes = the verifier confirmed forward movement); `maxNoProgress` consecutive `no` passes force `blocked`.
89
96
  Hitting any limit without meeting the goal = `blocked`, NEVER success.
90
97
 
91
98
  ## Receipt (per pass)
@@ -62,6 +62,19 @@
62
62
  "pattern": "^[a-z][a-z0-9-]*$"
63
63
  }
64
64
  },
65
+ "roles": {
66
+ "type": "array",
67
+ "description": "Active roles per pass. Default [executor, verifier]; opt in doctor and/or debriefer. Executor and verifier are always required.",
68
+ "minItems": 2,
69
+ "uniqueItems": true,
70
+ "items": {
71
+ "enum": ["executor", "verifier", "doctor", "debriefer"]
72
+ },
73
+ "allOf": [
74
+ { "contains": { "const": "executor" } },
75
+ { "contains": { "const": "verifier" } }
76
+ ]
77
+ },
65
78
  "limits": {
66
79
  "type": "object",
67
80
  "required": [
@@ -10,7 +10,7 @@ Setup map = the default project context for every Oris skill and loop. It exists
10
10
  | `.oris-flow/maps/**` | repo | short markdown maps: docs, stack, commands, code areas, tests |
11
11
  | `.oris-flow/adapter.json` | repo | loop adapter: paths, commands, model aliases |
12
12
  | `~/.oris/settings.json` | user | language + test profiles |
13
- | `docs/tasks/{task}/…` | task | business artifacts only |
13
+ | `{tasksRoot}/{task}/…` | task | business artifacts only — `setup.tasksRoot` in the manifest, default `.oris-flow/tasks` (see `references/doc-policy.md`) |
14
14
 
15
15
  Manifest and maps are never task authority and NEVER hold secrets.
16
16
 
@@ -32,7 +32,7 @@ Manifest and maps are never task authority and NEVER hold secrets.
32
32
  - Small: only sections that exist for the detected stack; no placeholders.
33
33
  - Each section: file path, one-line summary, `confidence`, `lastScannedAt`, stale flag.
34
34
  - Confidence: `confirmed` (user/authoritative) | `detected` (strong scan evidence) | `inferred` (unverified) | `stale` (no longer matches).
35
- - `setup.versionControl.orisFlowMap`: `commit` | `gitignore` — applied via `oris-skills flow version-control --mode <choice>`.
35
+ - `setup.versionControl.orisFlowMap`: `commit` | `gitignore` — applied via `npx oris-skills flow version-control --mode <choice>`.
36
36
  - Schema: `references/repo-map.schema.json`.
37
37
 
38
38
  ## Map sections
@@ -50,4 +50,4 @@ Each section: purpose, authoritative paths, confirmed decisions, key commands/co
50
50
 
51
51
  ## Command surface
52
52
 
53
- In target repositories always use the installed CLI (`oris-skills flow scan|version-control|clean-runtime`, `oris-skills loop …`), never `node scripts/...` paths — those exist only in the OrisSkills source checkout.
53
+ In target repositories always use the installed CLI (`npx oris-skills flow scan|version-control|clean-runtime`, `npx oris-skills loop …`), never `node scripts/...` paths — those exist only in the OrisSkills source checkout.
@@ -32,10 +32,20 @@
32
32
  "type": "string",
33
33
  "format": "date-time"
34
34
  },
35
+ "headSha": {
36
+ "type": ["string", "null"],
37
+ "description": "Commit SHA the last scan was anchored to; null outside git. Freshness = headSha vs current HEAD."
38
+ },
35
39
  "mapVersion": {
36
40
  "type": "string",
37
41
  "minLength": 1
38
42
  },
43
+ "projectType": {
44
+ "$ref": "#/$defs/projectType"
45
+ },
46
+ "truncated": {
47
+ "type": "boolean"
48
+ },
39
49
  "setup": {
40
50
  "$ref": "#/$defs/setup"
41
51
  },
@@ -132,6 +142,10 @@
132
142
  "type": "string",
133
143
  "enum": ["fast", "balanced", "manual-summary"]
134
144
  },
145
+ "tasksRoot": {
146
+ "type": "string",
147
+ "minLength": 1
148
+ },
135
149
  "confirmedDecisions": {
136
150
  "type": "array",
137
151
  "items": {
@@ -191,6 +205,33 @@
191
205
  },
192
206
  "evidence": {
193
207
  "type": "string"
208
+ },
209
+ "confidence": {
210
+ "$ref": "#/$defs/confidence"
211
+ }
212
+ }
213
+ },
214
+ "projectType": {
215
+ "type": "object",
216
+ "additionalProperties": false,
217
+ "required": ["id", "label", "confidence"],
218
+ "properties": {
219
+ "id": {
220
+ "type": "string",
221
+ "enum": ["empty", "monorepo", "webapp", "api", "library", "cli", "unknown"]
222
+ },
223
+ "label": {
224
+ "type": "string",
225
+ "minLength": 1
226
+ },
227
+ "confidence": {
228
+ "$ref": "#/$defs/confidence"
229
+ },
230
+ "evidence": {
231
+ "type": "array",
232
+ "items": {
233
+ "type": "string"
234
+ }
194
235
  }
195
236
  }
196
237
  }
@@ -8,7 +8,7 @@ The installer creates it when missing; it NEVER overwrites an existing file.
8
8
  ```json
9
9
  {
10
10
  "version": 1,
11
- "orisFlow": { "uiLanguage": "en", "artifactLanguage": "en" },
11
+ "orisFlow": { "uiLanguage": "en", "artifactLanguage": "en", "responseStyle": "standard" },
12
12
  "defaultProfiles": { "testing": "default" },
13
13
  "profiles": {
14
14
  "default": {
@@ -23,6 +23,7 @@ The installer creates it when missing; it NEVER overwrites an existing file.
23
23
 
24
24
  - `uiLanguage` → chat, menus, question labels, recaps (`en` | `it`, default `en`).
25
25
  - `artifactLanguage` → generated documents (`en` | `it`, default `en`).
26
+ - `responseStyle` → chat verbosity (`standard` | `caveman`, default `standard`). Caveman = maximum token density in chat; contract in `references/conventions.md` `## Response style`. Documents and gates are never compressed.
26
27
  - `profiles` → repository-neutral test logins/config. The repo adapter maps profile fields to roles.
27
28
  - `flags.allowDataMutation` → data mutation allowed ONLY with `environment: local` + loopback URLs + this flag true.
28
29
 
@@ -22,6 +22,11 @@
22
22
  "artifactLanguage": {
23
23
  "type": "string",
24
24
  "enum": ["it", "en"]
25
+ },
26
+ "responseStyle": {
27
+ "type": "string",
28
+ "enum": ["standard", "caveman"],
29
+ "description": "Chat verbosity: standard prose or caveman (maximum token density; documents and gates never compressed)."
25
30
  }
26
31
  }
27
32
  },
@@ -4,6 +4,7 @@ import path from "node:path";
4
4
  export const ORIS_FLOW_ROOT = ".oris-flow";
5
5
  export const ORIS_FLOW_MANIFEST = ".oris-flow/manifest.json";
6
6
  export const ORIS_FLOW_MAPS_ROOT = ".oris-flow/maps";
7
+ export const ORIS_FLOW_TASKS_ROOT = ".oris-flow/tasks";
7
8
  export const ORIS_FLOW_ADAPTER = ".oris-flow/adapter.json";
8
9
  export const ORIS_FLOW_LOOPS_ROOT = ".oris-flow/loops";
9
10
  export const ORIS_FLOW_RUNTIME = ".oris-flow/runtime";