oris-skills 2.2.3 → 3.0.1
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/.cursor-plugin/plugin.json +2 -3
- package/CHANGELOG.md +24 -6
- package/README.md +23 -59
- package/docs/architecture.md +15 -11
- package/docs/distribution.md +3 -3
- package/docs/maintainer-guide.md +4 -4
- package/docs/user-guide.md +12 -20
- package/package.json +3 -6
- package/references/conventions.md +20 -13
- package/references/doc-policy.md +5 -5
- package/references/research.md +45 -0
- package/references/settings.md +11 -5
- package/references/settings.schema.json +10 -0
- package/scripts/flow/oris-flow-layout.mjs +0 -16
- package/scripts/flow/oris-flow-scan.mjs +32 -317
- package/scripts/flow/oris-gitignore.mjs +1 -5
- package/scripts/install/install-user-skills.mjs +3 -3
- package/scripts/install/uninstall-user-skills.mjs +2 -29
- package/scripts/oris-skills.mjs +0 -47
- package/scripts/tests/run-all-tests.mjs +1 -9
- package/scripts/tests/test-cleanliness.mjs +54 -0
- package/scripts/tests/test-oris-flow-scan.mjs +21 -91
- package/scripts/tests/test-routing-lifecycle.mjs +22 -53
- package/scripts/tests/test-schemas.mjs +17 -31
- package/scripts/tests/test-skill-style.mjs +5 -2
- package/skills/oris-flow/SKILL.md +6 -8
- package/skills/oris-flow/references/architecture.md +1 -1
- package/skills/oris-flow/references/commit.md +9 -8
- package/skills/oris-flow/references/criteria.md +2 -2
- package/skills/oris-flow/references/discover.md +2 -2
- package/skills/oris-flow/references/fix.md +7 -3
- package/skills/oris-flow/references/help.md +1 -6
- package/skills/oris-flow/references/implement.md +5 -3
- package/skills/oris-flow/references/new.md +6 -6
- package/skills/oris-flow/references/plan.md +7 -2
- package/skills/oris-flow/references/setup.md +28 -35
- package/skills/oris-flow/references/verify.md +4 -5
- package/agents/oris-loop-debriefer.md +0 -30
- package/agents/oris-loop-doctor.md +0 -32
- package/agents/oris-loop-executor.md +0 -35
- package/agents/oris-loop-verifier.md +0 -35
- package/references/loop-adapter.schema.json +0 -93
- package/references/loop-contract.md +0 -126
- package/references/loop.schema.json +0 -156
- package/references/repo-map.md +0 -51
- package/references/repo-map.schema.json +0 -213
- package/scripts/flow/oris-flow-clean-runtime.mjs +0 -182
- package/scripts/install/generate-agent-adapters.mjs +0 -81
- package/scripts/loop/oris-loop-bootstrap.mjs +0 -383
- package/scripts/loop/oris-loop-bundle.mjs +0 -22
- package/scripts/loop/oris-loop-chat.mjs +0 -396
- package/scripts/loop/oris-loop-demo.mjs +0 -171
- package/scripts/loop/oris-loop-document.mjs +0 -196
- package/scripts/loop/oris-loop-dry-run.mjs +0 -114
- package/scripts/loop/oris-loop-fixtures.mjs +0 -149
- package/scripts/loop/oris-loop-list.mjs +0 -81
- package/scripts/loop/oris-loop-paths.mjs +0 -232
- package/scripts/loop/oris-loop-run.mjs +0 -301
- package/scripts/loop/oris-loop-stop.mjs +0 -358
- package/scripts/loop/oris-loop-templates.mjs +0 -80
- package/scripts/loop/oris-loop-verify.mjs +0 -205
- package/scripts/tests/test-agent-adapters.mjs +0 -70
- package/scripts/tests/test-oris-1-0-cleanliness.mjs +0 -58
- package/scripts/tests/test-oris-flow-clean-runtime.mjs +0 -75
- package/scripts/tests/test-oris-loop-bootstrap.mjs +0 -94
- package/scripts/tests/test-oris-loop-document.mjs +0 -148
- package/scripts/tests/test-oris-loop-list.mjs +0 -74
- package/scripts/tests/test-oris-loop-run.mjs +0 -71
- package/scripts/tests/test-oris-loop-smoke.mjs +0 -120
- package/scripts/tests/test-oris-loop-stop.mjs +0 -432
- package/skills/oris-flow/references/loop-craft.md +0 -59
- package/skills/oris-flow/references/loop-improve.md +0 -32
- package/skills/oris-flow/references/loop-run.md +0 -47
- package/skills/oris-flow/references/loop.md +0 -56
- package/skills/oris-flow/templates/debriefer.md +0 -19
- package/skills/oris-flow/templates/doctor.md +0 -22
- package/skills/oris-flow/templates/executor.md +0 -25
- package/skills/oris-flow/templates/orchestrator.md +0 -36
- 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)
|
|
4
|
-
"version": "
|
|
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
|
-
##
|
|
3
|
+
## 3.0.1 - 2026-07-10
|
|
4
4
|
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
-
|
|
9
|
-
|
|
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.
|
|
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,17 +12,19 @@ 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
|
|
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 —
|
|
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
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
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
|
|
|
@@ -38,79 +40,41 @@ client changed their mind about invoicing" and you are in **change**.
|
|
|
38
40
|
|
|
39
41
|
| Route | You get |
|
|
40
42
|
|-------|---------|
|
|
41
|
-
| **setup** | the repo
|
|
43
|
+
| **setup** | the repo made agent-ready: detected commands and structure confirmed into `AGENTS.md`; AI-readiness check |
|
|
42
44
|
| **new** | a greenfield project born agent-native: sparse `AGENTS.md`, domain glossary, first ADR, red→green test observed |
|
|
43
45
|
| **discover** | business-first interview → `functional-analysis.md` |
|
|
44
46
|
| **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 |
|
|
47
|
+
| **plan** | technical interview → `implementation-plan.md` with bounded, verifiable steps — external APIs verified against their docs, sources recorded |
|
|
48
|
+
| **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
49
|
| **verify** | every criterion checked against the *real* product, with evidence → `verification-report.md` |
|
|
48
50
|
| **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
51
|
| **architecture / docs / help** | deepening review, doc alignment, answers |
|
|
52
|
+
| **commit / pr** | Conventional Commits and English PRs, work item linked, always gated |
|
|
51
53
|
|
|
52
54
|
Every route follows one skeleton — what to do, what **Never** to do, and a **Done when**
|
|
53
55
|
checklist — enforced by the test suite, so the discipline survives refactors.
|
|
54
56
|
|
|
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
57
|
## Tuning
|
|
93
58
|
|
|
94
59
|
Settings live in `.oris-flow/settings.json` (`/oris-flow` → Setup): document language
|
|
95
|
-
(`artifactLanguage`, default `en`)
|
|
96
|
-
|
|
97
|
-
|
|
60
|
+
(`artifactLanguage`, default `en`), `responseStyle` (`standard`/`caveman`, where caveman
|
|
61
|
+
shrinks chat to maximum token density while documents and safety gates stay complete),
|
|
62
|
+
`tasksRoot`, and whether `.oris-flow/` is committed or gitignored. Chat language is
|
|
63
|
+
deduced from your messages, not configured.
|
|
98
64
|
|
|
99
65
|
## Repository layout
|
|
100
66
|
|
|
101
67
|
| Path | Purpose |
|
|
102
68
|
|------|---------|
|
|
103
|
-
| `skills/oris-flow/` | the one skill: router (`SKILL.md`)
|
|
104
|
-
| `references/` | shared contracts (conventions,
|
|
105
|
-
| `
|
|
106
|
-
| `scripts/` | Node CLI, loop runtime, installer, tests |
|
|
69
|
+
| `skills/oris-flow/` | the one skill: router (`SKILL.md`) + route references |
|
|
70
|
+
| `references/` | shared contracts (conventions, doc-policy, devops, research, settings) and JSON schemas |
|
|
71
|
+
| `scripts/` | Node CLI, repository scanner, installer, tests |
|
|
107
72
|
| `docs/` | architecture, user guide, maintainer guide |
|
|
108
73
|
|
|
109
74
|
## Maintainers
|
|
110
75
|
|
|
111
76
|
```bash
|
|
112
77
|
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
78
|
```
|
|
115
79
|
|
|
116
80
|
Node.js 20+. License: MIT.
|
package/docs/architecture.md
CHANGED
|
@@ -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…
|
|
9
|
-
references/ shared contracts (conventions,
|
|
10
|
-
|
|
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
|
-
-
|
|
20
|
-
|
|
21
|
-
-
|
|
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`
|
|
26
|
-
|
|
27
|
-
-
|
|
28
|
-
|
|
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).
|
package/docs/distribution.md
CHANGED
|
@@ -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,
|
|
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/` (
|
|
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
|
|
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
|
|
package/docs/maintainer-guide.md
CHANGED
|
@@ -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
|
-
|
|
|
15
|
-
|
|
|
16
|
-
|
|
|
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
|
package/docs/user-guide.md
CHANGED
|
@@ -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,
|
|
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, architecture review, docs, commit, pull request, 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
|
|
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. Task documents live in `.oris-flow/tasks/` by default — your project's own docs stay untouched.
|
|
12
12
|
|
|
13
|
-
##
|
|
13
|
+
## What setup leaves in your repo
|
|
14
14
|
|
|
15
|
-
|
|
16
|
-
|
|
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
|
-
|
|
20
|
+
Nothing else. No manifests, no caches, no state files.
|
|
19
21
|
|
|
20
|
-
|
|
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
|
-
|
|
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": "
|
|
4
|
-
"description": "Oris Skills: one entry point (/oris-flow)
|
|
3
|
+
"version": "3.0.1",
|
|
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"
|
|
@@ -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
|
|
14
|
-
references, or settings,
|
|
15
|
-
|
|
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
|
|
|
@@ -72,21 +72,28 @@ READ `orisFlow.responseStyle` from `.oris-flow/settings.json` (`standard` | `cav
|
|
|
72
72
|
> Danger, error, secret → caveman speak clear, full sentence. Safety never shrink.
|
|
73
73
|
|
|
74
74
|
SCOPE: chat replies, recaps, status lines. NEVER compressed: generated documents, gate
|
|
75
|
-
labels,
|
|
76
|
-
|
|
77
|
-
##
|
|
78
|
-
|
|
79
|
-
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
-
|
|
83
|
-
|
|
75
|
+
labels, error reports, and anything another session must read cold.
|
|
76
|
+
|
|
77
|
+
## Project facts
|
|
78
|
+
|
|
79
|
+
- `AGENTS.md` (or the agent file that exists — `CLAUDE.md`) is the ONE durable store of
|
|
80
|
+
project facts: commands, structure pointers, decisions. READ it before scanning broadly;
|
|
81
|
+
never build a parallel store.
|
|
82
|
+
- VERIFY high-risk facts against the repository before consequential actions — agent
|
|
83
|
+
files describe intent, the code is the authority.
|
|
84
|
+
- WRITE BACK what the flow proved — silently, at natural pauses (after verification, at
|
|
85
|
+
close; never mid-move): a command observed green and missing from `AGENTS.md` → add it;
|
|
86
|
+
a recorded fact the repo contradicts → correct it in place. Small scoped edits only;
|
|
87
|
+
nothing durable learned → write nothing.
|
|
88
|
+
- Preferences (`tasksRoot`, version control for `.oris-flow/`, `responseStyle`,
|
|
89
|
+
`artifactLanguage`) live in `.oris-flow/settings.json` (`references/settings.md`),
|
|
90
|
+
never in agent files.
|
|
84
91
|
|
|
85
92
|
## Gates
|
|
86
93
|
|
|
87
94
|
- NEVER write documents, code, settings, Git, or DevOps without explicit user confirmation in this flow.
|
|
88
95
|
- The skill that performs the action owns its confirmation gate; routing never grants it.
|
|
89
|
-
- NEVER store secrets in `.oris-flow/**`, docs,
|
|
96
|
+
- NEVER store secrets in `.oris-flow/**`, docs, or logs. Mask passwords as `***`.
|
|
90
97
|
|
|
91
98
|
## Subagents
|
|
92
99
|
|
package/references/doc-policy.md
CHANGED
|
@@ -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: `
|
|
10
|
-
- LEGACY: a repo with populated `docs/tasks/` and no
|
|
11
|
-
- NEVER mix roots in one repo; the
|
|
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 +
|
|
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
|
|
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.
|
package/references/settings.md
CHANGED
|
@@ -1,24 +1,30 @@
|
|
|
1
1
|
# Oris Settings
|
|
2
2
|
|
|
3
|
-
Per-project preferences. Path: `.oris-flow/settings.json`. Small and non-secret
|
|
4
|
-
|
|
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": {
|
|
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,
|
|
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
|
}
|
|
@@ -2,31 +2,15 @@ import os from "node:os";
|
|
|
2
2
|
import path from "node:path";
|
|
3
3
|
|
|
4
4
|
export const ORIS_FLOW_ROOT = ".oris-flow";
|
|
5
|
-
export const ORIS_FLOW_MANIFEST = ".oris-flow/manifest.json";
|
|
6
|
-
export const ORIS_FLOW_MAPS_ROOT = ".oris-flow/maps";
|
|
7
5
|
export const ORIS_FLOW_TASKS_ROOT = ".oris-flow/tasks";
|
|
8
|
-
export const ORIS_FLOW_ADAPTER = ".oris-flow/adapter.json";
|
|
9
|
-
export const ORIS_FLOW_LOOPS_ROOT = ".oris-flow/loops";
|
|
10
|
-
export const ORIS_FLOW_RUNTIME = ".oris-flow/runtime";
|
|
11
6
|
export const ORIS_FLOW_SETTINGS = ".oris-flow/settings.json";
|
|
12
7
|
export const ORIS_HOME = path.join(os.homedir(), ".oris");
|
|
13
8
|
export const ORIS_BUNDLE_ROOT = path.join(ORIS_HOME, "oris-skills");
|
|
14
|
-
export const ORIS_LOOP_SCHEMA = "https://oris.dev/schemas/oris-loop-adapter-v1.json";
|
|
15
|
-
export const ORIS_LOOP_SCHEMA_VERSION = 1;
|
|
16
|
-
export const ORIS_LOOP_DOCUMENT_VERSION = 2;
|
|
17
|
-
export const ORIS_FLOW_MAP_SCHEMA = "https://oris.dev/schemas/oris-flow-map-v1.json";
|
|
18
|
-
export const ORIS_FLOW_MAP_SCHEMA_VERSION = 1;
|
|
19
9
|
|
|
20
10
|
export function toPosixPath(value) {
|
|
21
11
|
return String(value).replace(/\\/g, "/");
|
|
22
12
|
}
|
|
23
13
|
|
|
24
|
-
export function safeSlug(value, fallback = "loop") {
|
|
25
|
-
const raw = path.basename(toPosixPath(value || fallback));
|
|
26
|
-
const slug = raw.replace(/[^A-Za-z0-9_.-]/g, "-").replace(/^-+|-+$/g, "");
|
|
27
|
-
return slug || fallback;
|
|
28
|
-
}
|
|
29
|
-
|
|
30
14
|
export function assertRepositoryRelative(value, label) {
|
|
31
15
|
const normalized = toPosixPath(value ?? "");
|
|
32
16
|
if (!normalized || normalized.startsWith("/") || /^[A-Za-z]:\//.test(normalized)) {
|