oris-skills 2.2.3 → 3.0.2

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 (86) hide show
  1. package/.cursor-plugin/plugin.json +2 -3
  2. package/CHANGELOG.md +24 -6
  3. package/README.md +28 -60
  4. package/docs/architecture.md +15 -11
  5. package/docs/distribution.md +3 -3
  6. package/docs/maintainer-guide.md +4 -4
  7. package/docs/user-guide.md +12 -20
  8. package/package.json +3 -6
  9. package/references/clean-code-checklist.md +2 -2
  10. package/references/conventions.md +36 -16
  11. package/references/doc-policy.md +5 -5
  12. package/references/research.md +45 -0
  13. package/references/settings.md +11 -5
  14. package/references/settings.schema.json +10 -0
  15. package/scripts/flow/oris-flow-layout.mjs +0 -16
  16. package/scripts/flow/oris-flow-scan.mjs +32 -317
  17. package/scripts/flow/oris-gitignore.mjs +1 -5
  18. package/scripts/install/install-user-skills.mjs +3 -3
  19. package/scripts/install/uninstall-user-skills.mjs +2 -29
  20. package/scripts/oris-skills.mjs +0 -47
  21. package/scripts/tests/run-all-tests.mjs +1 -9
  22. package/scripts/tests/test-cleanliness.mjs +54 -0
  23. package/scripts/tests/test-oris-flow-scan.mjs +21 -91
  24. package/scripts/tests/test-routing-lifecycle.mjs +24 -54
  25. package/scripts/tests/test-schemas.mjs +17 -31
  26. package/scripts/tests/test-skill-style.mjs +5 -2
  27. package/skills/oris-flow/SKILL.md +21 -11
  28. package/skills/oris-flow/agents/openai.yaml +1 -1
  29. package/skills/oris-flow/references/architecture.md +6 -3
  30. package/skills/oris-flow/references/change.md +3 -0
  31. package/skills/oris-flow/references/commit.md +9 -8
  32. package/skills/oris-flow/references/criteria.md +9 -5
  33. package/skills/oris-flow/references/discover.md +2 -2
  34. package/skills/oris-flow/references/docs.md +5 -1
  35. package/skills/oris-flow/references/fix.md +10 -5
  36. package/skills/oris-flow/references/handoff.md +67 -0
  37. package/skills/oris-flow/references/help.md +3 -6
  38. package/skills/oris-flow/references/implement.md +7 -4
  39. package/skills/oris-flow/references/new.md +6 -6
  40. package/skills/oris-flow/references/plan.md +7 -2
  41. package/skills/oris-flow/references/pr.md +2 -2
  42. package/skills/oris-flow/references/setup.md +33 -39
  43. package/skills/oris-flow/references/triage.md +69 -0
  44. package/skills/oris-flow/references/verify.md +5 -5
  45. package/agents/oris-loop-debriefer.md +0 -30
  46. package/agents/oris-loop-doctor.md +0 -32
  47. package/agents/oris-loop-executor.md +0 -35
  48. package/agents/oris-loop-verifier.md +0 -35
  49. package/references/loop-adapter.schema.json +0 -93
  50. package/references/loop-contract.md +0 -126
  51. package/references/loop.schema.json +0 -156
  52. package/references/repo-map.md +0 -51
  53. package/references/repo-map.schema.json +0 -213
  54. package/scripts/flow/oris-flow-clean-runtime.mjs +0 -182
  55. package/scripts/install/generate-agent-adapters.mjs +0 -81
  56. package/scripts/loop/oris-loop-bootstrap.mjs +0 -383
  57. package/scripts/loop/oris-loop-bundle.mjs +0 -22
  58. package/scripts/loop/oris-loop-chat.mjs +0 -396
  59. package/scripts/loop/oris-loop-demo.mjs +0 -171
  60. package/scripts/loop/oris-loop-document.mjs +0 -196
  61. package/scripts/loop/oris-loop-dry-run.mjs +0 -114
  62. package/scripts/loop/oris-loop-fixtures.mjs +0 -149
  63. package/scripts/loop/oris-loop-list.mjs +0 -81
  64. package/scripts/loop/oris-loop-paths.mjs +0 -232
  65. package/scripts/loop/oris-loop-run.mjs +0 -301
  66. package/scripts/loop/oris-loop-stop.mjs +0 -358
  67. package/scripts/loop/oris-loop-templates.mjs +0 -80
  68. package/scripts/loop/oris-loop-verify.mjs +0 -205
  69. package/scripts/tests/test-agent-adapters.mjs +0 -70
  70. package/scripts/tests/test-oris-1-0-cleanliness.mjs +0 -58
  71. package/scripts/tests/test-oris-flow-clean-runtime.mjs +0 -75
  72. package/scripts/tests/test-oris-loop-bootstrap.mjs +0 -94
  73. package/scripts/tests/test-oris-loop-document.mjs +0 -148
  74. package/scripts/tests/test-oris-loop-list.mjs +0 -74
  75. package/scripts/tests/test-oris-loop-run.mjs +0 -71
  76. package/scripts/tests/test-oris-loop-smoke.mjs +0 -120
  77. package/scripts/tests/test-oris-loop-stop.mjs +0 -432
  78. package/skills/oris-flow/references/loop-craft.md +0 -59
  79. package/skills/oris-flow/references/loop-improve.md +0 -32
  80. package/skills/oris-flow/references/loop-run.md +0 -47
  81. package/skills/oris-flow/references/loop.md +0 -56
  82. package/skills/oris-flow/templates/debriefer.md +0 -19
  83. package/skills/oris-flow/templates/doctor.md +0 -22
  84. package/skills/oris-flow/templates/executor.md +0 -25
  85. package/skills/oris-flow/templates/orchestrator.md +0 -36
  86. package/skills/oris-flow/templates/verifier.md +0 -24
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "oris-skills",
3
- "description": "Oris Skills: one entry point (/oris-flow), guided discovery-to-implementation flow, and self-tuning verified loops. Cross-model: Cursor, Claude Code, Codex.",
4
- "version": "2.2.1",
3
+ "description": "Oris Skills: one entry point (/oris-flow) and a guided discovery-to-implementation flow. Cross-model: Cursor, Claude Code, Codex.",
4
+ "version": "3.0.1",
5
5
  "author": {
6
6
  "name": "Davide Baldassarre"
7
7
  },
@@ -11,7 +11,6 @@
11
11
  "skills",
12
12
  "workflow",
13
13
  "flow",
14
- "loop",
15
14
  "cursor",
16
15
  "claude",
17
16
  "codex"
package/CHANGELOG.md CHANGED
@@ -1,12 +1,30 @@
1
1
  # Changelog
2
2
 
3
- ## Unreleased
3
+ ## 3.0.1 - 2026-07-10
4
4
 
5
- - **Settings are per-project and tiny**: moved out of the user-global `~/.oris/settings.json` into `.oris-flow/settings.json`, holding only `orisFlow.responseStyle` (`standard`/`caveman`) and `orisFlow.artifactLanguage` (document language, default `en`). The installer no longer creates a settings file.
6
- - **Test profiles removed**: the whole profile/secret subsystem is gone — `defaultProfiles`, `profiles`, the adapter `profile` block and its env mappings, and the loop's profile-gating. Every project drives its own e2e/CI tooling; Oris stores no credentials.
7
- - **No UI-language setting**: chat, menus, and question labels follow the language the user writes (deduced from context); only generated documents use `artifactLanguage`.
8
- - **No refresh-policy setting**: map freshness is answered by the `headSha` anchor (`flow scan --check`); the advisory `refreshPolicy` field was dropped from the manifest and schema.
9
- - **Questions & subagents fire reliably**: conventions now bind a platform question call (Claude `AskUserQuestion`) as a tool call rather than optional chat text, and treat entering an Oris route as the explicit request to spawn scan subagents — so gates open their UI and setup fans out by default.
5
+ The lean core: one skill, one durable store, evidence on both sides of the repo boundary.
6
+ (3.0.0 was published briefly and unpublished; npm never reuses a version number.)
7
+
8
+ - **`AGENTS.md` is the single knowledge store.** Setup detects project type, stacks, and
9
+ commands (`flow scan --json`, a pure reporter that writes nothing), you confirm them,
10
+ and they land in `AGENTS.md` — the file every agent already loads. No manifests, no
11
+ map caches, no freshness bookkeeping, no state files in your repo.
12
+ - **Per-project settings, tiny and non-secret.** `.oris-flow/settings.json` holds
13
+ `responseStyle` (`standard`/`caveman`), `artifactLanguage`, `tasksRoot` (default
14
+ `.oris-flow/tasks`), and `versionControl` (`commit` | `gitignore` for `.oris-flow/`).
15
+ - **Research discipline.** New shared contract `references/research.md`, applied by fix,
16
+ plan, and implement (never discover): when the problem crosses the repo boundary —
17
+ third-party APIs, external errors, known-issue smells — search current official docs
18
+ at the repo's pinned versions, record sources in the task document, and mark
19
+ unverified claims `inferred`. "Code only" / "check online" from the user always wins.
20
+ - **`/oris-flow` is user-invoked only.** `disable-model-invocation: true` in the skill
21
+ front matter: the model never auto-enters the flow; you type `/oris-flow` or nothing
22
+ happens. The description also drops out of always-loaded context.
23
+ - **Loops removed.** The 2.x self-verifying loop runtime (subagent roles, receipts,
24
+ stop hooks, `oris-skills loop …` CLI) left the core — its niche was headless/batch
25
+ work, the core's is the interactive flow. Repeat-until-verified work runs as
26
+ implement → verify cycles.
27
+ - **Questions & subagents fire reliably**: conventions bind a platform question call (Claude `AskUserQuestion`) as a tool call rather than optional chat text, and treat entering an Oris route as the explicit request to spawn scan subagents — so gates open their UI and setup fans out by default.
10
28
 
11
29
  ## 2.2.1 - 2026-07-07
12
30
 
package/README.md CHANGED
@@ -1,6 +1,6 @@
1
1
  # Oris Skills
2
2
 
3
- **One command. A disciplined software flow. Loops that verify themselves.**
3
+ **One command. A disciplined software flow. Evidence before "done".**
4
4
  For Cursor, Claude Code, Codex, GitHub Copilot — and any agent that can read a file.
5
5
 
6
6
  ```bash
@@ -12,23 +12,27 @@ Reload your agent, then type **`/oris-flow`**. That is the entire user manual.
12
12
  ## The idea
13
13
 
14
14
  AI agents are brilliant executors and terrible colleagues: they guess requirements,
15
- declare victory without evidence, and forget everything between sessions. Oris fixes the
16
- colleague part with three rules baked into every interaction:
15
+ declare victory without evidence, and hallucinate the world outside your repo. Oris
16
+ fixes the colleague part with three rules baked into every interaction:
17
17
 
18
- 1. **Interview before writing.** Nothing lands in your repo — no document, no code — before
19
- you explicitly approve it. One question per turn, recommended answer first.
18
+ 1. **Interview before writing.** Nothing lands in your repo — no document, no code —
19
+ before you explicitly approve it. One question per turn, recommended answer first.
20
20
  2. **Evidence before done.** "It works" means a command ran and its output says so.
21
- Verification is independent from execution: the agent that writes code never grades
22
- its own homework.
23
- 3. **Remember without slowing down.** The repo map is anchored to a commit SHA; one cheap
24
- check answers "is my knowledge fresh?", and only the changed areas are re-read.
25
- Bookkeeping is silent you see questions, answers, and results, never the machinery.
21
+ And when the problem crosses the repo boundary a third-party API, a library
22
+ misbehaving the flow checks current official docs at your pinned versions instead
23
+ of guessing, and records the sources.
24
+ 3. **Your repo stays yours.** Durable facts go in `AGENTS.md` (the file every agent
25
+ already reads), preferences in one small settings file, task documents in their own
26
+ folder. No caches, no state, no churn — and the skill never triggers itself: you
27
+ type `/oris-flow`, or nothing happens.
26
28
 
27
29
  ## One skill, every route
28
30
 
29
31
  `/oris-flow` reads your intent and enters the right route in the same chat — no other
30
32
  command exists. Say "the login button does nothing" and you are in **fix**; say "the
31
- client changed their mind about invoicing" and you are in **change**.
33
+ client changed their mind about invoicing" and you are in **change**; say "a client
34
+ reported this, park it" and **triage** captures it as a work item; say "I'm out of
35
+ context" and **handoff** packages the session for the next one.
32
36
 
33
37
  ```text
34
38
  idea ──► discover ──► criteria ──► plan ──► implement ──► verify
@@ -38,79 +42,43 @@ client changed their mind about invoicing" and you are in **change**.
38
42
 
39
43
  | Route | You get |
40
44
  |-------|---------|
41
- | **setup** | the repo mapped into `.oris-flow/` (type, commands, structure) so agents stop re-scanning; AI-readiness check |
45
+ | **setup** | the repo made agent-ready: detected commands and structure confirmed into `AGENTS.md`; AI-readiness check |
42
46
  | **new** | a greenfield project born agent-native: sparse `AGENTS.md`, domain glossary, first ADR, red→green test observed |
47
+ | **triage** | raw intake — an idea, a bug report — becomes a work item with an agent-ready brief, duplicates linked, routed onward |
43
48
  | **discover** | business-first interview → `functional-analysis.md` |
44
49
  | **criteria** | observable, stable-ID acceptance criteria → `acceptance-criteria.md` |
45
- | **plan** | technical interview → `implementation-plan.md` with bounded, verifiable steps |
46
- | **implement / fix** | the plan executed step by step, or the smallest safe bug fix — root cause first |
50
+ | **plan** | technical interview → `implementation-plan.md` with bounded, verifiable steps — external APIs verified against their docs, sources recorded |
51
+ | **implement / fix** | the plan executed step by step, or the smallest safe bug fix — root cause first, researched when it crosses the repo boundary |
47
52
  | **verify** | every criterion checked against the *real* product, with evidence → `verification-report.md` |
48
53
  | **change** | spec delta interviewed, **all** documents updated in one approved pass → `change-log.md` |
49
- | **loop** | repeat-until-verified work with subagents and receipts (below) |
50
54
  | **architecture / docs / help** | deepening review, doc alignment, answers |
55
+ | **commit / pr** | Conventional Commits and English PRs, work item linked, always gated |
56
+ | **handoff** | session state packaged outside the repo — decisions, evidence, next move — so a fresh session resumes exactly there |
51
57
 
52
58
  Every route follows one skeleton — what to do, what **Never** to do, and a **Done when**
53
59
  checklist — enforced by the test suite, so the discipline survives refactors.
54
60
 
55
- ## Loops: repeat until *proven*
56
-
57
- A loop is four decisions — **GOAL** (what done looks like), **PROOF** (how a pass proves
58
- it), **SCOPE** (what it may touch), **STOP** (when to quit) — everything else is a sane
59
- default. Each pass: *observe → one bounded action → independent verify → receipt →
60
- repeat or stop.*
61
-
62
- ```text
63
- .oris-flow/loops/{slug}/
64
- loop.md the approved contract: goal, scope, roles, limits, models
65
- prompts/ one editable file per role — the next pass obeys your edits
66
- receipts/ one compact evidence record per pass
67
- context.md proposals/ history/
68
- ```
69
-
70
- - **Two roles by default** — executor acts, verifier checks with evidence. Doctor
71
- (multi-phase stop logic) and debriefer (learns across passes) are opt-in.
72
- - **Prompts are yours** — plain markdown files; edit them mid-run and the loop adapts.
73
- With `improve.mode: auto` the debriefer tunes them itself (old versions archived);
74
- scope and limits always require your approval.
75
- - **No false victories** — an exhausted limit, a missing tool, or an unverifiable claim
76
- is never "success". Progress is counted only when the verifier confirms it.
77
- - **Cross-platform** — Cursor and Claude Code continue the same chat via stop hooks;
78
- Codex/CI runs headless: `npx oris-skills loop run --loop <slug> --agent codex|claude`.
79
- Copilot and every other agent get the full flow via prompt pointers; point any
80
- file-reading agent at `~/.oris/oris-flow.md` and it is in.
81
-
82
- Try it safely in three minutes — the demo touches only its own sandbox folder:
83
-
84
- ```bash
85
- npx oris-skills loop demo # 1. create the tutorial loop
86
- npx oris-skills loop dry-run --loop oris-demo # 2. preview the exact pass — runs nothing
87
- npx oris-skills loop chat --action start --loop oris-demo # 3. arm it, end your turn
88
- ```
89
-
90
- Stop anything, anytime: `npx oris-skills loop chat --action stop`.
91
-
92
61
  ## Tuning
93
62
 
94
63
  Settings live in `.oris-flow/settings.json` (`/oris-flow` → Setup): document language
95
- (`artifactLanguage`, default `en`) and `responseStyle` (`standard`/`caveman`, where
96
- caveman shrinks chat to maximum token density while documents and safety gates stay
97
- complete). Chat language is deduced from your messages, not configured.
64
+ (`artifactLanguage`, default `en`), `responseStyle` (`standard`/`caveman`, where caveman
65
+ shrinks chat to maximum token density while documents and safety gates stay complete),
66
+ `tasksRoot`, and whether `.oris-flow/` is committed or gitignored. Chat language is
67
+ deduced from your messages, not configured.
98
68
 
99
69
  ## Repository layout
100
70
 
101
71
  | Path | Purpose |
102
72
  |------|---------|
103
- | `skills/oris-flow/` | the one skill: router (`SKILL.md`), route references, loop prompt templates |
104
- | `references/` | shared contracts (conventions, loop contract, doc policy) and JSON schemas |
105
- | `agents/` | canonical subagent definitions (platform adapters generated at install) |
106
- | `scripts/` | Node CLI, loop runtime, installer, tests |
73
+ | `skills/oris-flow/` | the one skill: router (`SKILL.md`) + route references |
74
+ | `references/` | shared contracts (conventions, doc-policy, devops, research, settings) and JSON schemas |
75
+ | `scripts/` | Node CLI, repository scanner, installer, tests |
107
76
  | `docs/` | architecture, user guide, maintainer guide |
108
77
 
109
78
  ## Maintainers
110
79
 
111
80
  ```bash
112
81
  npm test # cross-platform Node test suite (includes the skill-style gate)
113
- npm run verify:loop # end-to-end stop-hook simulation (cursor + claude)
114
82
  ```
115
83
 
116
84
  Node.js 20+. License: MIT.
@@ -5,10 +5,9 @@ Read this before explaining or changing the project.
5
5
  ## Shape
6
6
 
7
7
  ```text
8
- skills/oris-flow/ the ONE user-facing skill: SKILL.md routes; references/ hold every route (setup…loop); templates/ hold the loop role prompts
9
- references/ shared contracts (conventions, loop-contract, settings, repo-map, doc-policy, clean-code-checklist) + JSON schemas
10
- agents/ canonical loop-role definitions (internal); never installed into user agent homes — roles reach subagents via each loop's prompts/<role>.md
11
- scripts/ Node CLI (oris-skills.mjs), loop runtime, installer, tests
8
+ skills/oris-flow/ the ONE user-facing skill: SKILL.md routes; references/ hold every route (setup…help)
9
+ references/ shared contracts (conventions, doc-policy, devops, research, settings) + JSON schemas
10
+ scripts/ Node CLI (oris-skills.mjs), repository scanner, installer, tests
12
11
  docs/ this file, user-guide, maintainer-guide, distribution
13
12
  ```
14
13
 
@@ -16,13 +15,18 @@ docs/ this file, user-guide, maintainer-guide, distribution
16
15
 
17
16
  - ONE source of truth per fact: contracts live in `references/`, skills point at them.
18
17
  - Skills use leading words (READ / ASK / NEVER / IF) and stay short; shared rules live in `references/conventions.md`.
19
- - Everything repeatable lives in the target project under `.oris-flow/`; the bundle at `~/.oris/oris-skills/` owns scripts and templates.
20
- - Oris never dirties the project: task documents default to `.oris-flow/tasks/` (`setup.tasksRoot` in the manifest; legacy `docs/tasks` supported).
21
- - Loop prompts are per-loop editable files (`prompts/*.md`), never hardcoded in scripts.
18
+ - In target repositories, durable project facts live in `AGENTS.md` the file every
19
+ agent already loads; Oris never builds a parallel knowledge store.
20
+ - Oris never dirties the project: task documents default to `.oris-flow/tasks/`
21
+ (`orisFlow.tasksRoot` in `.oris-flow/settings.json`; legacy `docs/tasks` supported).
22
+ - Evidence discipline crosses the repo boundary via `references/research.md`: external
23
+ claims are verified against current official docs at pinned versions, sources recorded.
22
24
 
23
25
  ## Runtime
24
26
 
25
- - `/oris-flow` routes; each route reference owns its gates.
26
- - The repo map is SHA-anchored: `flow scan --check` compares `headSha` to HEAD; only touched areas are refreshed; write-back is silent and never blocks work.
27
- - Loop triggers: Cursor stop hook + Claude Stop hook (shared `scripts/loop/oris-loop-stop.mjs`, `--platform` switch), headless `loop run` for Codex/CI.
28
- - State machine: `.oris-flow/runtime/chat-active.json`, managed only by `npx oris-skills loop chat`.
27
+ - `/oris-flow` is user-invoked only (`disable-model-invocation: true`); once entered,
28
+ each route reference owns its gates.
29
+ - `npx oris-skills flow scan` is a one-shot detector feeding the setup route: it reports
30
+ project type, stacks, commands, and areas, and writes nothing.
31
+ - `npx oris-skills flow version-control` applies the settings `versionControl` choice
32
+ (`.oris-flow/` committed or gitignored).
@@ -13,19 +13,19 @@ The installer detects Cursor / Claude Code / Codex from `~/.cursor`, `~/.claude`
13
13
  ## Installed assets
14
14
 
15
15
  ```text
16
- ~/.oris/oris-skills/ bundle: scripts, skills, references, agents, docs
16
+ ~/.oris/oris-skills/ bundle: scripts, skills, references, docs
17
17
  ~/.cursor/skills/<name>/ Cursor skills (marker-managed)
18
18
  ~/.claude/skills/<name>/ Claude Code skills (marker-managed)
19
19
  ~/.codex/prompts/<name>.md Codex prompts pointing to the bundled SKILL.md
20
20
  ```
21
21
 
22
- Project assets live only in each repository's `.oris-flow/` (adapter, settings, loops, runtime) plus thin hook wrappers in `.cursor/hooks/` and `.claude/hooks/` written by `npx oris-skills loop bootstrap`.
22
+ Project assets live only in each repository's `.oris-flow/` (settings, task docs).
23
23
 
24
24
  ## Uninstall / reinstall
25
25
 
26
26
  ```bash
27
27
  npx oris-skills uninstall --dry-run # preview
28
- npx oris-skills uninstall # removes Oris-owned paths incl. legacy ~/.cursor locations and pre-2.2.1 loop agent adapters (~/.cursor|.claude|.codex/agents/oris-*)
28
+ npx oris-skills uninstall # removes only Oris-owned paths (bundle, skills, prompts, pointer, MCP seed)
29
29
  npx oris-skills reinstall
30
30
  ```
31
31
 
@@ -11,9 +11,10 @@ Use when improving Oris Skills itself. Keep changes tiny; update the canonical f
11
11
  | Routing | `skills/oris-flow/SKILL.md` (route table) |
12
12
  | Shared interaction rules | `references/conventions.md` |
13
13
  | Task doc standards | `references/doc-policy.md` ({task} slug, per-doc ownership) |
14
- | Loop behavior | `references/loop-contract.md`, `skills/oris-flow/references/loop*.md` |
15
- | Loop prompt templates | `skills/oris-flow/templates/` |
16
- | Loop runtime | `scripts/loop/` |
14
+ | Research discipline | `references/research.md` |
15
+ | Settings contract | `references/settings.md` + `references/settings.schema.json` |
16
+ | DevOps provider | `references/devops.md` + `references/devops.schema.json` |
17
+ | Repository scanner | `scripts/flow/oris-flow-scan.mjs` |
17
18
  | Install lifecycle | `scripts/oris-skills.mjs`, `scripts/install/` |
18
19
  | Tests | `scripts/tests/` |
19
20
 
@@ -21,7 +22,6 @@ Use when improving Oris Skills itself. Keep changes tiny; update the canonical f
21
22
 
22
23
  ```bash
23
24
  npm test
24
- npm run verify:loop
25
25
  ```
26
26
 
27
27
  ## Release
@@ -6,32 +6,24 @@ Install once, remember one command:
6
6
  npx oris-skills@latest install # detects Cursor / Claude Code / Codex / Copilot (VS Code)
7
7
  ```
8
8
 
9
- Then type **`/oris-flow`** in your agent chat. It routes your request or shows a short menu (setup, new project, discovery, criteria, plan, implement/fix, verify, spec change, loop, architecture review, docs, help). On Codex use the installed `/oris-flow` prompt; on Copilot Chat use `/oris-flow` too (enable the VS Code setting `chat.promptFiles` once). Any other agent: tell it to read `~/.oris/oris-flow.md`.
9
+ Then type **`/oris-flow`** in your agent chat. It routes your request or shows a short menu (setup, new project, triage, discovery, criteria, plan, implement/fix, verify, spec change, architecture review, docs, commit, pull request, handoff, help). The skill never triggers itself — you invoke it. On Codex use the installed `/oris-flow` prompt; on Copilot Chat use `/oris-flow` too (enable the VS Code setting `chat.promptFiles` once). Any other agent: tell it to read `~/.oris/oris-flow.md`.
10
10
 
11
- The flow in one line: **discover → criteria → plan → implement → verify**, with `fix` for bugs, `change` when the spec changes mid-flight (it updates all task docs together and logs `CH-xxx` history), and `loop` for work that must repeat until verified. `new` bootstraps an AI-driven project from scratch; `architecture` maps deepening/refactor opportunities. Task documents live in `.oris-flow/tasks/` by default — your project's own docs stay untouched.
11
+ The flow in one line: **discover → criteria → plan → implement → verify**, with `fix` for bugs and `change` when the spec changes mid-flight (it updates all task docs together and logs `CH-xxx` history). `new` bootstraps an AI-driven project from scratch; `architecture` maps deepening/refactor opportunities. `triage` turns raw ideas and bug reports into work items on your DevOps board before the flow starts; `handoff` packages a session's state — decisions, evidence, next move — so a fresh session resumes exactly where this one stopped. Task documents live in `.oris-flow/tasks/` by default — your project's own docs stay untouched.
12
12
 
13
- ## Loops in short
13
+ ## What setup leaves in your repo
14
14
 
15
- A loop repeats: one bounded action independent verification receipt → continue or stop.
16
- Building one takes four decisions — goal, proof, scope, stop everything else defaults.
15
+ - **`AGENTS.md`** the durable facts every agent loads: commands, structure pointers,
16
+ decisions. Setup detects them (`flow scan`), you confirm them, the file records them.
17
+ - **`.oris-flow/settings.json`** — preferences: document language, chat verbosity,
18
+ tasks root, and whether `.oris-flow/` is committed or gitignored.
17
19
 
18
- Learn it safely:
20
+ Nothing else. No manifests, no caches, no state files.
19
21
 
20
- ```bash
21
- npx oris-skills loop demo # sandboxed tutorial loop
22
- npx oris-skills loop dry-run --loop oris-demo # preview, nothing runs
23
- npx oris-skills loop chat --action start --loop oris-demo # arm, then end the chat turn
24
- ```
25
-
26
- Control it:
27
-
28
- ```bash
29
- npx oris-skills loop list # what exists
30
- npx oris-skills loop chat --action status
31
- npx oris-skills loop chat --action stop
32
- ```
22
+ ## Research discipline
33
23
 
34
- Tune it: edit the files in `.oris-flow/loops/{slug}/prompts/` the next pass obeys them. With `improve.mode: auto` in `loop.md`, the loop tunes those prompts itself and archives old versions in `history/`.
24
+ When a fix or plan touches a third-party library or API, the flow checks current
25
+ official docs at your pinned versions instead of guessing, and records the sources in
26
+ the task document. Say "code only" or "check online" to steer it either way.
35
27
 
36
28
  ## Install lifecycle
37
29
 
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "oris-skills",
3
- "version": "2.2.3",
4
- "description": "Oris Skills: one entry point (/oris-flow), guided discovery-to-implementation flow, and self-tuning verified loops for Cursor, Claude Code, and Codex.",
3
+ "version": "3.0.2",
4
+ "description": "Oris Skills: one entry point (/oris-flow) and a guided discovery-to-implementation flow for Cursor, Claude Code, and Codex.",
5
5
  "license": "MIT",
6
6
  "author": "Davide Baldassarre",
7
7
  "type": "module",
@@ -12,7 +12,6 @@
12
12
  "scripts",
13
13
  "skills",
14
14
  "references",
15
- "agents",
16
15
  "docs",
17
16
  ".cursor-plugin",
18
17
  "README.md",
@@ -24,7 +23,6 @@
24
23
  "skills",
25
24
  "agent",
26
25
  "workflow",
27
- "loop",
28
26
  "cursor",
29
27
  "claude",
30
28
  "codex"
@@ -39,8 +37,7 @@
39
37
  "scripts": {
40
38
  "test": "node scripts/tests/run-all-tests.mjs",
41
39
  "scan": "node scripts/flow/oris-flow-scan.mjs --json",
42
- "install:dry-run": "node scripts/install/install-user-skills.mjs --dry-run",
43
- "verify:loop": "node scripts/loop/oris-loop-verify.mjs --temp"
40
+ "install:dry-run": "node scripts/install/install-user-skills.mjs --dry-run"
44
41
  },
45
42
  "engines": {
46
43
  "node": ">=20"
@@ -1,6 +1,6 @@
1
1
  # Clean Code Checklist
2
2
 
3
- Used by `oris-flow-implement` and `oris-flow-fix` while closing work: clean what YOU introduced, in the files you touched. Investigate before concluding; absence in one file is not proof of dead code.
3
+ Used by `skills/oris-flow/references/implement.md` and `skills/oris-flow/references/fix.md` while closing work: clean what YOU introduced, in the files you touched. Investigate before concluding; absence in one file is not proof of dead code.
4
4
 
5
5
  ## Check, in the touched scope only
6
6
 
@@ -15,6 +15,6 @@ Used by `oris-flow-implement` and `oris-flow-fix` while closing work: clean what
15
15
 
16
16
  Before removing anything: search references and call sites (including DI registration, reflection, dynamic imports, routing, code generation, framework conventions). Tests, config, or registration may still require the symbol.
17
17
 
18
- ## Never here
18
+ ## Never
19
19
 
20
20
  Bug fixes (→ `skills/oris-flow/references/fix.md`), architectural redesign, cross-feature refactors, DevOps, drive-by cleanup of code you did not touch.
@@ -10,9 +10,9 @@ Shared rules for every Oris skill. Skills reference this file instead of repeati
10
10
 
11
11
  ## Silence (the fluidity contract)
12
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…".
13
+ The user sees questions, answers, results, and gates — NEVER the machinery. Reading
14
+ `AGENTS.md`, references, or settings, writing back facts, loading a route: all SILENT.
15
+ Never say "let me read…", "I'm checking the settings…", "updating AGENTS.md…".
16
16
  One announcement exists: the route entry line ("Entering <route>: <why>"). Everything
17
17
  else the user hears is the work itself.
18
18
 
@@ -37,16 +37,29 @@ The `oris-skills` CLI is NOT installed globally. ALWAYS invoke it as `npx oris-s
37
37
  MORE options → split into a two-level question (category first) or use the deliberate
38
38
  text fallback above.
39
39
  - ONE question per turn. Recommended answer FIRST.
40
+ - VISIBILITY: assume the user sees ONLY what the question tool itself renders — chat text
41
+ emitted in the same turn as the tool call can be hidden by the platform UI. Therefore
42
+ everything the answer depends on rides INSIDE the call: the recap/context in the
43
+ `question` text (compact — counted facts, not prose), each option's meaning and
44
+ consequence in its description. NEVER put a recap or summary in chat text and then call
45
+ the question tool in the same turn — the user may see the bare question and nothing else.
40
46
  - ALWAYS include, in the user's language:
41
- - `Explain the options` / `Spiega le opzioni` — explain, then re-ask the same question.
47
+ - `Explain the options` / `Spiega le opzioni` — when picked, RE-ASK the same question
48
+ WITH the explanations embedded in the call itself: every option's description states
49
+ what it means and what happens if chosen; the `question` text may add one context
50
+ line. Re-asking the question unchanged, or explaining only in chat text before the
51
+ call, is a failure — the user reported seeing the bare question again. In text-fallback
52
+ menus: explanations first, then the full lettered list again, in ONE message.
42
53
  - During interviews: `Enough questions — proceed` / `Basta domande — procedi` (early exit → go to the generation gate; NOT approval to write).
43
54
  - NEVER ask what the workspace, docs, code, or setup map already answer. Explore first.
44
55
 
45
56
  ## Generation gates
46
57
 
47
58
  - Standard labels, localized: `Generate the document` / `Genera il documento`, `Approve document` / `Approva documento`, `Continue the interview` / `Continua l'intervista`, `Cancel` / `Annulla`.
48
- - NEVER write documents before the explicit gate choice. Exception: `oris-flow-criteria` writes first, then asks ONCE — the document is confirmed only on approval.
49
- - After a document is written: concise summary + contextual next-step menu. NEVER auto-start the next phase.
59
+ - NEVER write documents before the explicit gate choice. Exception: `skills/oris-flow/references/criteria.md` writes first, then asks ONCE — the document is confirmed only on approval.
60
+ - After a document is written: concise summary + contextual next-step menu. The summary
61
+ rides inside the next-step question (`## Questions` VISIBILITY rule) — never as chat
62
+ text the tool call can hide. NEVER auto-start the next phase.
50
63
 
51
64
  ## Language
52
65
 
@@ -72,21 +85,28 @@ READ `orisFlow.responseStyle` from `.oris-flow/settings.json` (`standard` | `cav
72
85
  > Danger, error, secret → caveman speak clear, full sentence. Safety never shrink.
73
86
 
74
87
  SCOPE: chat replies, recaps, status lines. NEVER compressed: generated documents, gate
75
- labels, receipts, error reports, and anything another session must read cold.
76
-
77
- ## Setup map & write-back
78
-
79
- - WHEN `.oris-flow/manifest.json` exists: read it + only the relevant `.oris-flow/maps/**` sections BEFORE scanning broadly.
80
- - 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.
81
- - 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.
82
- - 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.
83
- - VERIFY stale or high-risk map facts against the repository before consequential actions.
88
+ labels, error reports, and anything another session must read cold.
89
+
90
+ ## Project facts
91
+
92
+ - `AGENTS.md` (or the agent file that exists `CLAUDE.md`) is the ONE durable store of
93
+ project facts: commands, structure pointers, decisions. READ it before scanning broadly;
94
+ never build a parallel store.
95
+ - VERIFY high-risk facts against the repository before consequential actions agent
96
+ files describe intent, the code is the authority.
97
+ - WRITE BACK what the flow proved — silently, at natural pauses (after verification, at
98
+ close; never mid-move): a command observed green and missing from `AGENTS.md` → add it;
99
+ a recorded fact the repo contradicts → correct it in place. Small scoped edits only;
100
+ nothing durable learned → write nothing.
101
+ - Preferences (`tasksRoot`, version control for `.oris-flow/`, `responseStyle`,
102
+ `artifactLanguage`) live in `.oris-flow/settings.json` (`references/settings.md`),
103
+ never in agent files.
84
104
 
85
105
  ## Gates
86
106
 
87
107
  - NEVER write documents, code, settings, Git, or DevOps without explicit user confirmation in this flow.
88
108
  - The skill that performs the action owns its confirmation gate; routing never grants it.
89
- - NEVER store secrets in `.oris-flow/**`, docs, receipts, or logs. Mask passwords as `***`.
109
+ - NEVER store secrets in `.oris-flow/**`, docs, or logs. Mask passwords as `***`.
90
110
 
91
111
  ## Subagents
92
112
 
@@ -6,9 +6,9 @@ Applies whenever an Oris skill writes or updates task documentation. Project-agn
6
6
 
7
7
  Oris keeps its artifacts in its own folder — it never dirties the project's docs by default.
8
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.
9
+ - RESOLVE: `orisFlow.tasksRoot` from `.oris-flow/settings.json`; DEFAULT `.oris-flow/tasks` when missing.
10
+ - LEGACY: a repo with populated `docs/tasks/` and no settings value keeps `docs/tasks` — setup records the choice once.
11
+ - NEVER mix roots in one repo; the settings value is the single truth.
12
12
 
13
13
  ## Task folder
14
14
 
@@ -34,7 +34,7 @@ NEVER split one feature's docs across unrelated directories.
34
34
 
35
35
  1. Language: documents in `artifactLanguage` (default `en`); chat/UI language is deduced from context. Skill instructions and code stay English.
36
36
  2. Steps are independent: any document may be created without the previous one. State the missing source once, use the strongest confirmed source, record the gap in the document ("not available" localized). Never block on a missing predecessor.
37
- 3. INSPECT the task folder + setup map before asking the user or writing.
37
+ 3. INSPECT the task folder + `AGENTS.md` before asking the user or writing.
38
38
  4. Every document ends with a change-history table: date | source | change | reason. Later changes rewrite the affected sections AND add a history row — no inline "changed!" notes.
39
39
  5. Facts only from confirmed sources; open questions go to open points. NEVER invent behavior, labels, or commands.
40
- 6. Verification artifacts (test plans, specs) are technical follow-ups owned by loops or the project's own conventions — they never replace `acceptance-criteria.md`.
40
+ 6. Verification artifacts (test plans, specs) are technical follow-ups owned by the project's own conventions — they never replace `acceptance-criteria.md`.
@@ -0,0 +1,45 @@
1
+ # Oris Research
2
+
3
+ Evidence discipline beyond the repository: when a route touches third-party behavior,
4
+ CHECK the world instead of guessing. Applied by fix, plan, and implement — never by
5
+ discover (business interviews stay non-technical).
6
+
7
+ ## When to search
8
+
9
+ SEARCH (web, official docs, the platform's docs tools) when the problem crosses the
10
+ repository boundary:
11
+
12
+ - behavior or API of a third-party library, framework, or service;
13
+ - an error message produced by an external tool, not by project code;
14
+ - a "known issue" smell — the local code cannot explain the behavior;
15
+ - a standard workaround or reference implementation likely exists for exactly this.
16
+
17
+ STAY code-only when the repository fully explains the behavior — internal logic,
18
+ project conventions, local data. Searching there is noise.
19
+
20
+ The user's explicit instruction wins in BOTH directions: "code only" → no search;
21
+ "check online" → search even when the smell is weak.
22
+
23
+ ## How to search
24
+
25
+ 1. OFFICIAL docs of the exact dependency FIRST; community sources (issues, answers,
26
+ posts) second and marked as such.
27
+ 2. PIN versions: read the versions the repo actually uses (lockfile, project file) and
28
+ match findings to them — an answer for another major version is not evidence.
29
+ 3. RECORD sources in the task document under `## Sources` — link + one line on what it
30
+ settled. No sources recorded → the research never happened.
31
+ 4. External claims stay `inferred` until verified against the repo or the running
32
+ product; state them as possibilities, never as facts.
33
+
34
+ ## Never
35
+
36
+ - State external behavior as fact from memory — memory of an API is a guess.
37
+ - Apply a workaround without recording where it came from and why it fits this version.
38
+ - Interrupt a business interview (discover) with research — it belongs to the
39
+ technical routes.
40
+
41
+ ## Done when
42
+
43
+ - [ ] Searched exactly when the boundary rule says so — no reflex searches, no blind guesses.
44
+ - [ ] Findings version-matched to the repo; sources recorded in the task document.
45
+ - [ ] Unverified external claims marked `inferred`, never asserted.
@@ -1,24 +1,30 @@
1
1
  # Oris Settings
2
2
 
3
- Per-project preferences. Path: `.oris-flow/settings.json`. Small and non-secret
4
- chat verbosity and document language, nothing else. Missing file defaults below.
5
- Created/edited via `/oris-flow` → Setup, or by hand.
3
+ Per-project preferences. Path: `.oris-flow/settings.json`. Small and non-secret.
4
+ Missing file defaults below. Created/edited via `/oris-flow`Setup, or by hand.
6
5
 
7
6
  ## Shape (v1)
8
7
 
9
8
  ```json
10
9
  {
11
10
  "version": 1,
12
- "orisFlow": { "responseStyle": "standard", "artifactLanguage": "en" }
11
+ "orisFlow": {
12
+ "responseStyle": "standard",
13
+ "artifactLanguage": "en",
14
+ "tasksRoot": ".oris-flow/tasks",
15
+ "versionControl": "commit"
16
+ }
13
17
  }
14
18
  ```
15
19
 
16
20
  - `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.
17
21
  - `artifactLanguage` → language for generated documents (ISO code, default `en`). Chat/UI language is NOT configured here — it is deduced from the conversation.
22
+ - `tasksRoot` → where task documents live (default `.oris-flow/tasks`; legacy `docs/tasks` supported when a team already treats task docs as project docs).
23
+ - `versionControl` → whether `.oris-flow/` is committed (`commit`, team default) or ignored (`gitignore`, personal). Applied via `npx oris-skills flow version-control --mode <choice>`.
18
24
 
19
25
  ## Rules
20
26
 
21
27
  1. READ settings before the first workflow decision; missing/invalid → defaults above.
22
28
  2. Current user instructions override settings for the turn.
23
- 3. Oris stores no credentials. Test/CI secrets belong to each project's own tooling — never Oris files, docs, loop state, receipts, or logs.
29
+ 3. Oris stores no credentials. Test/CI secrets belong to each project's own tooling — never Oris files, docs, or logs.
24
30
  4. CONFIRM before writing settings. Update via `/oris-flow` → Setup.
@@ -23,6 +23,16 @@
23
23
  "type": "string",
24
24
  "minLength": 2,
25
25
  "description": "Language for generated documents (ISO code, e.g. en, it). Default en. Chat language is deduced from the conversation, not configured here."
26
+ },
27
+ "tasksRoot": {
28
+ "type": "string",
29
+ "minLength": 1,
30
+ "description": "Repository-relative root for task documents. Default .oris-flow/tasks; legacy docs/tasks supported."
31
+ },
32
+ "versionControl": {
33
+ "type": "string",
34
+ "enum": ["commit", "gitignore"],
35
+ "description": "Whether .oris-flow/ is committed (team default) or gitignored (personal). Default commit."
26
36
  }
27
37
  }
28
38
  }