oris-skills 2.2.2 → 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.
Files changed (86) hide show
  1. package/.cursor-plugin/plugin.json +2 -3
  2. package/CHANGELOG.md +24 -6
  3. package/README.md +23 -59
  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/conventions.md +23 -13
  10. package/references/devops.md +58 -0
  11. package/references/devops.schema.json +54 -0
  12. package/references/doc-policy.md +5 -5
  13. package/references/research.md +45 -0
  14. package/references/settings.md +11 -5
  15. package/references/settings.schema.json +10 -0
  16. package/scripts/flow/oris-flow-devops.mjs +77 -0
  17. package/scripts/flow/oris-flow-layout.mjs +0 -16
  18. package/scripts/flow/oris-flow-scan.mjs +32 -317
  19. package/scripts/flow/oris-gitignore.mjs +1 -5
  20. package/scripts/install/install-user-skills.mjs +17 -3
  21. package/scripts/install/oris-mcp.mjs +68 -0
  22. package/scripts/install/uninstall-user-skills.mjs +2 -29
  23. package/scripts/oris-skills.mjs +0 -47
  24. package/scripts/tests/run-all-tests.mjs +3 -9
  25. package/scripts/tests/test-cleanliness.mjs +54 -0
  26. package/scripts/tests/test-install-mcp.mjs +66 -0
  27. package/scripts/tests/test-oris-flow-devops.mjs +64 -0
  28. package/scripts/tests/test-oris-flow-scan.mjs +21 -91
  29. package/scripts/tests/test-routing-lifecycle.mjs +22 -53
  30. package/scripts/tests/test-schemas.mjs +17 -31
  31. package/scripts/tests/test-skill-style.mjs +5 -2
  32. package/skills/oris-flow/SKILL.md +10 -6
  33. package/skills/oris-flow/references/architecture.md +1 -1
  34. package/skills/oris-flow/references/commit.md +46 -0
  35. package/skills/oris-flow/references/criteria.md +2 -2
  36. package/skills/oris-flow/references/discover.md +2 -2
  37. package/skills/oris-flow/references/fix.md +7 -3
  38. package/skills/oris-flow/references/help.md +1 -6
  39. package/skills/oris-flow/references/implement.md +5 -3
  40. package/skills/oris-flow/references/new.md +6 -6
  41. package/skills/oris-flow/references/plan.md +7 -2
  42. package/skills/oris-flow/references/pr.md +44 -0
  43. package/skills/oris-flow/references/setup.md +28 -35
  44. package/skills/oris-flow/references/verify.md +4 -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
@@ -72,58 +72,27 @@ test("every skill points at conventions instead of repeating shared rules", () =
72
72
  }
73
73
  });
74
74
 
75
- test("loop skill covers craft, demo, run, audit, improve and editable prompt files", () => {
76
- const skill = read("skills/oris-flow/references/loop.md");
77
- assert.match(skill, /references\/loop-craft\.md/);
78
- assert.match(skill, /references\/loop-run\.md/);
79
- assert.match(skill, /references\/loop-improve\.md/);
80
- assert.match(skill, /oris-skills loop demo/);
81
- assert.match(skill, /oris-skills loop dry-run/);
82
- assert.match(skill, /oris-skills loop list --json/);
83
- assert.match(skill, /prompts\//);
84
- assert.match(skill, /improve\.mode: auto/);
85
- assert.match(skill, /Cursor|Claude Code|Codex/);
86
- for (const reference of ["craft", "run", "improve"]) {
87
- assert.equal(exists(`skills/oris-flow/references/loop-${reference}.md`), true, reference);
88
- }
89
- for (const template of ["orchestrator", "executor", "verifier", "doctor", "debriefer"]) {
90
- assert.equal(exists(`skills/oris-flow/templates/${template}.md`), true, template);
91
- }
92
- });
93
-
94
- test("loop contract stays subagent-first with per-role editable prompts", () => {
95
- const contract = read("references/loop-contract.md");
96
- assert.match(contract, /schemaVersion: 2/);
97
- assert.match(contract, /approved: true/);
98
- assert.match(contract, /prompts\/orchestrator\.md/);
99
- assert.match(contract, /improve/);
100
- assert.match(contract, /inherit/);
101
- assert.match(contract, /NEVER success/i);
102
- const run = read("skills/oris-flow/references/loop-run.md");
103
- assert.match(run, /oris-skills loop chat --action start --loop <slug>/);
104
- assert.match(run, /NEVER do executor\/verifier\/doctor work in the main chat/i);
105
- assert.match(run, /set-state blocked/);
106
- assert.match(run, /oris-skills loop run --loop <slug> --agent codex\|claude/);
107
- const craft = read("skills/oris-flow/references/loop-craft.md");
108
- assert.match(craft, /skills\/oris-flow\/templates\//);
109
- assert.match(craft, /write the loop \| edit verifier \| edit executor \| edit doctor/);
110
- assert.match(contract, /ORIS LOOP ACTIVE/, "the contract defines the executor gate literal");
111
- for (const text of [contract, run, craft, read("skills/oris-flow/references/loop.md")]) {
112
- assert.doesNotMatch(text, /node scripts\/(?:flow|loop)\//);
113
- assert.doesNotMatch(text, /composer-2\.5/);
114
- }
115
- for (const text of [run, craft, read("skills/oris-flow/references/loop.md")]) {
116
- assert.doesNotMatch(text, /ORIS LOOP ACTIVE/, "the gate literal lives in the contract and executor prompts only");
75
+ test("the loop runtime is fully removed", () => {
76
+ for (const legacy of [
77
+ "scripts/loop",
78
+ "agents",
79
+ "skills/oris-flow/templates",
80
+ "skills/oris-flow/references/loop.md",
81
+ "references/loop-contract.md",
82
+ "references/repo-map.md",
83
+ ]) {
84
+ assert.equal(exists(legacy), false, `${legacy} must not exist`);
117
85
  }
86
+ const skill = read("skills/oris-flow/SKILL.md");
87
+ assert.doesNotMatch(skill, /\bloop\b/i, "the router must not mention loops");
118
88
  });
119
89
 
120
- test("setup and repo-map keep the installed CLI as the command surface", () => {
90
+ test("setup keeps the installed CLI as the command surface and AGENTS.md as the store", () => {
121
91
  const setup = read("skills/oris-flow/references/setup.md");
122
92
  assert.match(setup, /oris-skills flow scan --repository-root <repo> --json/);
123
- assert.match(setup, /oris-skills loop bootstrap --repository-root <repo>/);
124
- assert.match(setup, /oris-skills flow clean-runtime --repository-root <repo> --dry-run/);
125
- const repoMap = read("references/repo-map.md");
126
- assert.match(repoMap, /never `node scripts\/\.\.\.` paths/);
93
+ assert.match(setup, /oris-skills flow version-control --repository-root <repo> --mode commit\|gitignore/);
94
+ assert.doesNotMatch(setup, /node scripts\//, "always the installed CLI, never source paths");
95
+ assert.match(setup, /AGENTS\.md/);
127
96
  });
128
97
 
129
98
  test("no markdown references the pre-2.0 layout", () => {
@@ -165,18 +134,18 @@ test("uninstall and reinstall dry-runs show destructive plan before action", ()
165
134
  }
166
135
  });
167
136
 
168
- test("CLI exposes install, loop learnability, and flow helper commands", () => {
137
+ test("CLI exposes install and flow helper commands, and no loop surface", () => {
169
138
  const homeDir = fs.mkdtempSync(path.join(os.tmpdir(), "oris-cli-help-"));
170
139
  try {
171
140
  const help = runCli(["help"], homeDir);
172
141
  assert.equal(help.status, 0, help.stderr);
173
142
  assert.match(help.stdout, /--agents cursor,claude,codex/);
174
- assert.match(help.stdout, /oris-skills loop demo/);
175
- assert.match(help.stdout, /oris-skills loop dry-run --loop <slug>/);
176
- assert.match(help.stdout, /oris-skills loop verify --temp/);
177
- assert.match(help.stdout, /oris-skills loop chat --action start --loop <slug>/);
178
- assert.match(help.stdout, /oris-skills loop run --loop <slug> --agent codex\|claude/);
179
143
  assert.match(help.stdout, /oris-skills flow scan/);
144
+ assert.match(help.stdout, /oris-skills flow version-control/);
145
+ assert.doesNotMatch(help.stdout, /loop/i);
146
+
147
+ const loop = runCli(["loop", "list"], homeDir);
148
+ assert.equal(loop.status, 1, "loop is an unknown command in 3.0");
180
149
  } finally {
181
150
  fs.rmSync(homeDir, { recursive: true, force: true });
182
151
  }
@@ -12,45 +12,31 @@ function read(relativePath) {
12
12
  return JSON.parse(fs.readFileSync(path.join(root, relativePath), "utf8"));
13
13
  }
14
14
 
15
- test("settings schema is the minimal v1 contract: only responseStyle and artifactLanguage", () => {
15
+ test("settings schema is the v1 contract: preferences only, no secrets, no profiles", () => {
16
16
  const schema = read("references/settings.schema.json");
17
17
  assert.equal(schema.properties.version.const, 1);
18
18
  assert.deepEqual(schema.required, ["version", "orisFlow"]);
19
- assert.ok(schema.properties.orisFlow.properties.responseStyle);
20
- assert.ok(schema.properties.orisFlow.properties.artifactLanguage);
21
- assert.ok(!schema.properties.defaultProfiles, "test profiles were removed from settings");
22
- assert.ok(!schema.properties.profiles, "test profiles were removed from settings");
23
- });
24
-
25
- test("adapter schema v1 declares paths, commands, model aliases, preflight (no test profiles)", () => {
26
- const schema = read("references/loop-adapter.schema.json");
27
- assert.equal(schema.$id, "https://oris.dev/schemas/oris-loop-adapter-v1.json");
28
- assert.equal(schema.properties.schemaVersion.const, 1);
19
+ const properties = schema.properties.orisFlow.properties;
29
20
  assert.deepEqual(
30
- schema.required,
31
- ["$schema", "schemaVersion", "repository", "paths", "commands", "preflight"],
21
+ Object.keys(properties).sort(),
22
+ ["artifactLanguage", "responseStyle", "tasksRoot", "versionControl"],
32
23
  );
33
- assert.ok(schema.properties.paths.properties.loops);
34
- assert.ok(schema.properties.models, "adapter schema must allow a model alias map");
35
- assert.ok(!schema.properties.profile, "test profiles were removed from the adapter");
24
+ assert.deepEqual(properties.versionControl.enum, ["commit", "gitignore"]);
25
+ assert.ok(!schema.properties.defaultProfiles, "test profiles were removed from settings");
26
+ assert.ok(!schema.properties.profiles, "test profiles were removed from settings");
36
27
  });
37
28
 
38
- test("loop document schema is v2 with approved gate, per-role models, and improve mode", () => {
39
- const schema = read("references/loop.schema.json");
40
- assert.equal(schema.$id, "https://oris.dev/schemas/oris-loop-v2.json");
41
- assert.equal(schema.properties.schemaVersion.const, 2);
42
- assert.ok(schema.required.includes("approved"));
43
- assert.ok(!schema.required.includes("runtime"), "runtime field was removed in v2");
44
- for (const role of ["default", "executor", "verifier", "doctor", "debriefer"]) {
45
- assert.ok(schema.properties.models.properties[role], `models.${role}`);
29
+ test("no loop or repo-map schemas survive the 3.0 cleanup", () => {
30
+ for (const legacy of [
31
+ "references/loop.schema.json",
32
+ "references/loop-adapter.schema.json",
33
+ "references/repo-map.schema.json",
34
+ ]) {
35
+ assert.equal(fs.existsSync(path.join(root, legacy)), false, `${legacy} must not exist`);
46
36
  }
47
- assert.deepEqual(schema.properties.improve.properties.mode.enum, ["propose", "auto"]);
48
- assert.equal(schema.$defs.model.type, "string", "models are free strings (inherit | alias | model id), not a hardcoded enum");
49
37
  });
50
38
 
51
- test("repository map schema v1 allows stack-aware optional sections", () => {
52
- const schema = read("references/repo-map.schema.json");
53
- assert.equal(schema.properties.schemaVersion.const, 1);
54
- assert.deepEqual(schema.required, ["$schema", "schemaVersion", "repository", "generatedAt", "updatedAt", "setup", "sections"]);
55
- assert.ok(schema.$defs.sections.additionalProperties);
39
+ test("devops schema stays the only other JSON contract", () => {
40
+ const schemas = fs.readdirSync(path.join(root, "references")).filter((name) => name.endsWith(".schema.json"));
41
+ assert.deepEqual(schemas.sort(), ["devops.schema.json", "settings.schema.json"]);
56
42
  });
@@ -36,8 +36,11 @@ test("skill style: oris-flow", () => {
36
36
  assert.match(front[1], /^name: oris-flow$/m, "front matter name matches the folder");
37
37
  const description = front[1].match(/^description: (.+)$/m)?.[1];
38
38
  assert.ok(description, "front matter has description");
39
- assert.match(description, /Use for/, "description names its triggers");
40
- assert.doesNotMatch(front[1], /disable-model-invocation/, "the single entry point must stay model-invocable");
39
+ assert.match(
40
+ front[1],
41
+ /^disable-model-invocation: true$/m,
42
+ "the entry point is user-invoked only (/oris-flow) — decision 2026-07-10, never auto-triggered",
43
+ );
41
44
  assert.ok(text.includes("## Never"), "carries an explicit Never block");
42
45
  assert.ok(text.includes("## Done when"), "ends with a Done when checklist");
43
46
  const lines = text.split(/\r?\n/).length;
@@ -1,6 +1,7 @@
1
1
  ---
2
2
  name: oris-flow
3
- description: The one Oris skill - read the intent, pick ONE route, apply it in the same chat. Use for /oris-flow and whenever the user wants to set up a repo for agents, start a project, understand or define behavior, write acceptance criteria, plan, implement, fix a bug, verify criteria, handle a spec change, run a work loop (fix until green, repeat until verified), review architecture, update task docs, or asks how Oris works.
3
+ description: The one Oris skill - read the intent, pick ONE route, apply it in the same chat. Routes setup, new project, discovery, acceptance criteria, technical plan, implement, fix, verify, spec change, architecture review, docs, commit, pull request, and help.
4
+ disable-model-invocation: true
4
5
  ---
5
6
 
6
7
  # Oris Flow — the router
@@ -29,9 +30,10 @@ Match the desired outcome to ONE route, then apply its reference:
29
30
  | fix | broken behavior, a regression, a failed QA check | `skills/oris-flow/references/fix.md` |
30
31
  | verify | check acceptance criteria against the real product, once | `skills/oris-flow/references/verify.md` |
31
32
  | change | the spec changed — update analysis, criteria, plan, and history together | `skills/oris-flow/references/change.md` |
32
- | loop | repeat work until verified — fix until green, step through a plan | `skills/oris-flow/references/loop.md` |
33
33
  | architecture | review architecture, find deepening/refactor opportunities | `skills/oris-flow/references/architecture.md` |
34
34
  | docs | update task docs after a change | `skills/oris-flow/references/docs.md` |
35
+ | commit | commit changes with the Oris standard — Conventional Commits, work item linked | `skills/oris-flow/references/commit.md` |
36
+ | pr | open or update a pull request, English title/description linked to the work item | `skills/oris-flow/references/pr.md` |
35
37
  | help | how Oris works, install, update, troubleshooting | `skills/oris-flow/references/help.md` |
36
38
 
37
39
  ## Precedence (the calls that look ambiguous)
@@ -44,9 +46,10 @@ Match the desired outcome to ONE route, then apply its reference:
44
46
  change owns the delta and the history.
45
47
  4. BROKEN behavior → fix. NEW planned work → implement. The menu answer "Implement or
46
48
  fix" gets exactly one follow-up question to split them.
47
- 5. CHECK onceverify. Repeat-until-verified loop.
48
- 6. EMPTY directory or from-scratch intent new. Existing repo without
49
- `.oris-flow/manifest.json`recommend setup first; respect the user's choice.
49
+ 5. EMPTY directory or from-scratch intent new. Existing repo never touched by Oris
50
+ (no `AGENTS.md`, no `.oris-flow/`) recommend setup first; respect the user's choice.
51
+ 6. COMMIT staged/working changes with the standard commit. OPEN or update a pull request
52
+ → pr. Neither writes product code — they package and publish what implement/fix produced.
50
53
 
51
54
  ## Menu (low confidence)
52
55
 
@@ -62,9 +65,10 @@ fallback in `references/conventions.md` `## Questions`), options:
62
65
  - Implement or fix
63
66
  - Verify acceptance criteria
64
67
  - Spec changed: update feature docs
65
- - Loop: repeat until verified
66
68
  - Architecture review
67
69
  - Update docs
70
+ - Commit changes
71
+ - Open a pull request
68
72
  - Help
69
73
  - Explain the options / Spiega le opzioni
70
74
 
@@ -22,7 +22,7 @@ routes to plan/implement.
22
22
 
23
23
  ## 1. Explore
24
24
 
25
- 1. READ first: setup map, `CONTEXT.md` (domain names for good seams), `docs/adr/`
25
+ 1. READ first: `AGENTS.md`, `CONTEXT.md` (domain names for good seams), `docs/adr/`
26
26
  (decisions NOT to re-litigate).
27
27
  2. WALK the codebase with parallel subagents. No rigid heuristics — note real friction:
28
28
  - understanding one concept requires bouncing between many small modules;
@@ -0,0 +1,46 @@
1
+ # Commit
2
+
3
+ Turn staged or working changes into one clean commit — message in English, work item
4
+ linked. NEVER commit without showing the message and getting a yes.
5
+
6
+ RULES: `references/conventions.md`. DevOps config: `references/devops.md`.
7
+
8
+ ## Before the commit
9
+
10
+ 1. READ the diff (`git status`, `git diff --staged`) to know what actually changed.
11
+ 2. IF the diff proved a durable fact `AGENTS.md` lacks or contradicts (a new command, a
12
+ moved area) → correct `AGENTS.md` and stage it with the change (`references/conventions.md`
13
+ `## Project facts`).
14
+ 3. RESOLVE the work item id from context — current branch, the active task doc, or the
15
+ DevOps provider's active items. Unsure → ASK once for the id; never invent one.
16
+
17
+ ## Compose (always English)
18
+
19
+ - TYPE from Conventional Commits: `feat` | `fix` | `chore` | `docs` | `refactor` | `test`
20
+ | `perf` | `build` | `ci`. Pick from the diff, not the chat.
21
+ - SUBJECT imperative, ≤72 chars, no trailing period. Optional `(scope)`.
22
+ - BODY only when it adds signal: what and why, not how.
23
+ - FOOTER: the work item via the provider `workItemSyntax` (default `#{id}`), on its own line.
24
+
25
+ ## Gate (never skipped)
26
+
27
+ SHOW the full message + the files it will commit. ASK:
28
+ commit | edit message | cancel. ON commit → `git commit`; NEVER `--no-verify`.
29
+
30
+ ## After
31
+
32
+ - SUMMARIZE the commit (hash, subject, work item).
33
+ - OFFER a pull request (`skills/oris-flow/references/pr.md`) or stop. NEVER auto-open one.
34
+
35
+ ## Never
36
+
37
+ - Commit before the message and file list are shown and confirmed.
38
+ - Write the message in any language but English.
39
+ - Invent a work item id, or bypass hooks with `--no-verify`.
40
+ - Touch `AGENTS.md` sections the diff did not contradict.
41
+
42
+ ## Done when
43
+
44
+ - [ ] Diff read; `AGENTS.md` corrected only where the diff proved it wrong.
45
+ - [ ] English Conventional message with the work item linked, confirmed at the gate.
46
+ - [ ] Commit made without `--no-verify`; next step offered, not auto-run.
@@ -1,8 +1,8 @@
1
1
  # Acceptance Criteria
2
2
 
3
3
  Generate verifiable criteria grounded in observable product behavior — UI, API response,
4
- CLI output, or a visible system effect. They later feed verify-route checks and
5
- loop VERIFIER prompts — precision here pays twice.
4
+ CLI output, or a visible system effect. They are the exact checklist the verify route
5
+ executes — precision here pays twice.
6
6
 
7
7
  RULES: `references/conventions.md`. Doc standards: `references/doc-policy.md`.
8
8
 
@@ -1,7 +1,7 @@
1
1
  # Discovery
2
2
 
3
3
  Interview the stakeholder until the desired business behavior is clear enough to
4
- document. The cornerstone of the flow: everything downstream (criteria, plan, loops)
4
+ document. The cornerstone of the flow: everything downstream (criteria, plan, implement)
5
5
  builds on this.
6
6
 
7
7
  RULES: `references/conventions.md`. Doc standards: `references/doc-policy.md`.
@@ -9,7 +9,7 @@ RULES: `references/conventions.md`. Doc standards: `references/doc-policy.md`.
9
9
  ## Before asking
10
10
 
11
11
  1. EXPLORE first: task folder (`{tasksRoot}/{task}/`), existing task docs, project docs,
12
- setup map, code evidence, DevOps context when available.
12
+ `AGENTS.md`, code evidence, DevOps context when available.
13
13
  2. DEDUCE create vs update: existing `functional-analysis.md` → update; missing → create.
14
14
  Ask only on contradictory signals.
15
15
  3. Technical evidence = private input. TRANSLATE it to business language; never show file
@@ -3,7 +3,7 @@
3
3
  The smallest safe change near the failing behavior. Reproduce first, root cause before
4
4
  any edit, evidence before done.
5
5
 
6
- RULES: `references/conventions.md`.
6
+ RULES: `references/conventions.md`. Research: `references/research.md`.
7
7
 
8
8
  ## Triage
9
9
 
@@ -19,8 +19,12 @@ RULES: `references/conventions.md`.
19
19
  - REPRODUCE or trace the failure path in code before proposing anything.
20
20
  - FIND root cause, not symptom. Check whether the documented behavior
21
21
  (criteria/analysis) defines "correct".
22
- - SUMMARIZE: root cause proposed minimal fix files → verification plan.
23
- CONFIRM explicitly.
22
+ - RESEARCH when the cause crosses the repo boundary (`references/research.md`): a
23
+ third-party error, a library behaving unlike its docs, a known-issue smell → search
24
+ for the documented behavior and standard workarounds at the repo's pinned versions,
25
+ instead of guessing.
26
+ - SUMMARIZE: root cause → proposed minimal fix → files → verification plan (+ sources
27
+ when research ran). CONFIRM explicitly.
24
28
 
25
29
  ## Fix
26
30
 
@@ -8,24 +8,19 @@ details on request.
8
8
  | Need | Answer |
9
9
  |------|--------|
10
10
  | Start anything | Type `/oris-flow` — it routes or shows the menu. The only command to remember. |
11
- | Try loops safely | `npx oris-skills loop demo` → follow the 3 printed steps (`dry-run` previews, `chat --action start` runs). |
12
11
  | Install / update | `npx oris-skills@latest install` (detects Cursor, Claude Code, Codex, Copilot; or `--agents cursor,claude,codex,copilot`). Reload the agent afterwards. |
13
12
  | Copilot / any other agent | Copilot Chat: enable `chat.promptFiles` once, then `/oris-flow`. Anything else that reads files: point it at `~/.oris/oris-flow.md`. |
14
13
  | Uninstall / reinstall | `npx oris-skills uninstall` / `npx oris-skills reinstall` (preview with `--dry-run`). |
15
- | Stop a loop | `npx oris-skills loop chat --action stop` |
16
- | Loop status | `npx oris-skills loop chat --action status` / `npx oris-skills loop list` |
17
14
  | Skill missing after install | Reload the agent; check `~/.oris/oris-skills/` exists; re-run install with `--force`. |
18
- | Hook not firing | `npx oris-skills loop verify --temp` self-checks the runtime; `npx oris-skills loop bootstrap` re-arms repo hooks. |
19
15
  | Change document language / chat verbosity | `/oris-flow` → Setup (settings live in `.oris-flow/settings.json`). |
20
16
  | Ultra-short answers | `/oris-flow` → Setup → set `responseStyle: caveman` — chat shrinks to maximum token density; documents stay complete. |
21
- | Edit a loop's behavior | Edit the files in `.oris-flow/loops/{slug}/prompts/` — the next pass obeys them. |
22
17
 
23
18
  Deeper docs: `docs/user-guide.md`, `docs/architecture.md` in the bundle (`~/.oris/oris-skills/`).
24
19
 
25
20
  ## Never
26
21
 
27
22
  - Tell users to paste secrets anywhere.
28
- - Dump internals (manifest JSON, hook mechanics) unless the user asks for technical
23
+ - Dump internals (settings JSON, install layout) unless the user asks for technical
29
24
  troubleshooting.
30
25
 
31
26
  ## Done when
@@ -2,14 +2,14 @@
2
2
 
3
3
  Execute the confirmed plan — nothing more, nothing less.
4
4
 
5
- RULES: `references/conventions.md`.
5
+ RULES: `references/conventions.md`. Research: `references/research.md`.
6
6
 
7
7
  ## Prepare
8
8
 
9
9
  1. FIND `{tasksRoot}/{task}/implementation-plan.md`. IF missing → reconstruct a technical
10
10
  recap from chat, task docs, and code; SHOW it; CONFIRM before any edit.
11
- 2. READ setup map, project standards, local skills/rules, tests and build conventions for
12
- the touched area.
11
+ 2. READ `AGENTS.md`, project standards, local skills/rules, tests and build conventions
12
+ for the touched area.
13
13
  3. MAP the code, tests, config, and translations the plan touches (parallel subagents
14
14
  when available).
15
15
 
@@ -22,6 +22,8 @@ RULES: `references/conventions.md`.
22
22
  ## While coding
23
23
 
24
24
  - FOLLOW existing project patterns; no new abstractions without need.
25
+ - RESEARCH mid-build only when an external API resists (`references/research.md`) —
26
+ verify its current docs at the repo's pinned version; never guess signatures.
25
27
  - STAY inside the confirmed scope; park discoveries as notes, don't chase them.
26
28
  - ADD or update focused tests for the changed behavior.
27
29
  - CLEAN as you finish (`references/clean-code-checklist.md`): remove dead code, debug
@@ -10,7 +10,7 @@ RULES: `references/conventions.md`. Writes ONLY after the recap is confirmed.
10
10
 
11
11
  1. PURPOSE — the product in one sentence; it anchors every agent decision and opens AGENTS.md.
12
12
  2. TYPE — webapp | api | library | cli | monorepo. Drives layout and verify strategy.
13
- 3. STACK — recommend from purpose + the user's existing repos (setup maps of sibling
13
+ 3. STACK — recommend from purpose + the user's existing repos (`AGENTS.md` of sibling
14
14
  projects when visible). Never impose.
15
15
  4. TEST RUNNER + LINT — the stack's default unless the user objects. Non-negotiable that
16
16
  one exists: agents need a red/green signal, not opinions.
@@ -42,10 +42,10 @@ RUN the test command and the lint command; SHOW real output — fail first, then
42
42
 
43
43
  ## Arm the flow
44
44
 
45
- 1. RUN `npx oris-skills flow scan --repository-root <repo> --write` — manifest + maps;
46
- the commands just verified mark `confirmed`.
47
- 2. RUN `npx oris-skills loop bootstrap --repository-root <repo>`.
48
- 3. tasksRoot: `.oris-flow/tasks` (default — the project stays clean).
45
+ 1. The commands just verified are ALREADY in `AGENTS.md` (scaffold table) that is the
46
+ whole record; nothing else to generate.
47
+ 2. WRITE `.oris-flow/settings.json` with the defaults (`references/settings.md`);
48
+ tasksRoot `.oris-flow/tasks` — the project stays clean.
49
49
 
50
50
  AFTER: offer discover the first feature (`skills/oris-flow/references/discover.md`) | stop.
51
51
 
@@ -61,4 +61,4 @@ AFTER: offer discover the first feature (`skills/oris-flow/references/discover.m
61
61
  - [ ] Purpose, type, stack, test runner confirmed before any write.
62
62
  - [ ] AGENTS.md sparse and commands-first; CONTEXT.md + ADR-0001 written.
63
63
  - [ ] Test + lint observed running (fail → pass shown).
64
- - [ ] Manifest written with confirmed commands; loop bootstrapped.
64
+ - [ ] Verified commands recorded in `AGENTS.md`; settings written with defaults.
@@ -4,13 +4,17 @@ Interview the technical owner until another agent or developer could execute the
4
4
  without guessing.
5
5
 
6
6
  RULES: `references/conventions.md`. Doc standards: `references/doc-policy.md`.
7
+ Research: `references/research.md`.
7
8
 
8
9
  ## Before asking
9
10
 
10
11
  1. EXPLORE: `functional-analysis.md` + `acceptance-criteria.md` when present (preferred,
11
12
  not required — offer discovery only when the functional source is too weak to plan
12
- safely), task docs, setup map, standards, code, tests, build scripts.
13
- 2. PREFER existing project patterns over new abstractions. Keep uncertainty visible.
13
+ safely), task docs, `AGENTS.md`, standards, code, tests, build scripts.
14
+ 2. RESEARCH external surfaces (`references/research.md`): the plan leans on a
15
+ third-party API, library, or service → verify against its current official docs at
16
+ the repo's pinned versions; sources go into the plan.
17
+ 3. PREFER existing project patterns over new abstractions. Keep uncertainty visible.
14
18
 
15
19
  ## Interview
16
20
 
@@ -36,6 +40,7 @@ ON generate → write `{tasksRoot}/{task}/implementation-plan.md` (language `art
36
40
  ### 2. …
37
41
  ## Verification (commands, tests, what proves each step)
38
42
  ## Risks & open points
43
+ ## Sources (only when research ran: link + what it settled)
39
44
  ## Change history (date | source | change | reason)
40
45
  ```
41
46
 
@@ -0,0 +1,44 @@
1
+ # Pull Request
2
+
3
+ Open or update a pull request whose title and description are English and linked to the
4
+ work item. NEVER open or update a PR without showing it and getting a yes.
5
+
6
+ RULES: `references/conventions.md`. DevOps config: `references/devops.md`.
7
+
8
+ ## Before
9
+
10
+ 1. ENSURE the branch is pushed and its commits follow the commit standard
11
+ (`skills/oris-flow/references/commit.md`); uncommitted work remains → route there first.
12
+ 2. READ the commit range to summarize the actual change, not the intent.
13
+ 3. RESOLVE the work item id (branch, task doc, or DevOps provider) — unsure → ASK once.
14
+
15
+ ## Compose (always English)
16
+
17
+ - TITLE: one Conventional line, same grammar as a commit subject.
18
+ - DESCRIPTION: a short **Summary** (what changed and why), a **Verification** line
19
+ (how it was proven), and the work item via the provider `workItemSyntax` (default `#{id}`).
20
+ - KEEP secrets out — mask anything sensitive as `***` (`references/conventions.md` `## Gates`).
21
+
22
+ ## Gate (never skipped)
23
+
24
+ SHOW the title + description + target branch. ASK: open PR | edit | cancel.
25
+ ON open → create via the provider (Azure DevOps MCP `oris-devops`, or `gh` for GitHub)
26
+ read from `references/devops.md`. Missing provider auth → say so; never guess credentials.
27
+
28
+ ## After
29
+
30
+ - SUMMARIZE: PR link/number, target branch, work item.
31
+ - RECOMMEND verify (`skills/oris-flow/references/verify.md`) when criteria exist.
32
+ NEVER merge automatically.
33
+
34
+ ## Never
35
+
36
+ - Open or update a PR before the title and description are shown and confirmed.
37
+ - Write the title or description in any language but English.
38
+ - Invent a work item id, store credentials, or merge without being asked.
39
+
40
+ ## Done when
41
+
42
+ - [ ] Branch pushed and commits follow the commit standard.
43
+ - [ ] English title + description with the work item linked, confirmed at the gate.
44
+ - [ ] PR opened/updated via the configured provider; merge never automatic.
@@ -1,25 +1,20 @@
1
1
  # Oris Setup
2
2
 
3
- Make the repo cheap for agents to understand — manifest + maps + AI-readiness + loop
4
- readiness. ADAPT to what the repo IS; never force one structure. Writes ONLY after the
5
- user confirms the recap.
3
+ Make the repo cheap for agents to understand — `AGENTS.md` as the one durable store,
4
+ preferences in `.oris-flow/settings.json`, AI-readiness checked. ADAPT to what the repo
5
+ IS; never force one structure. Writes ONLY after the user confirms the recap.
6
6
 
7
- RULES: `references/conventions.md`. Map format: `references/repo-map.md`.
7
+ RULES: `references/conventions.md`. Settings: `references/settings.md`.
8
8
  IF the repo is empty or brand-new → route to `skills/oris-flow/references/new.md` instead.
9
9
 
10
10
  ## Mode
11
11
 
12
- IF `.oris-flow/manifest.json` exists → CHECK freshness first:
13
- `npx oris-skills flow scan --repository-root <repo> --check` — `fresh: true` → say so
14
- (a rescan would be a no-op); stale the `changedFiles` list names the areas worth
15
- refreshing. THEN ask ONE question with these options:
16
- - refresh all (keeps `confirmed` values — scan merges, never overwrites them)
17
- - update one area (`--area <section>`)
18
- - review stale sections
12
+ IF `AGENTS.md` (or `CLAUDE.md`) exists → this is a refresh: READ it first, then ask ONE
13
+ question with these options:
14
+ - update it from a fresh scan (scan below; edits merge in, confirmed facts stay)
15
+ - review one section
19
16
  - show summary (no writes)
20
- - recreate from scratch
21
17
  - preferences → Local Preferences below; touches only `.oris-flow/settings.json`
22
- - clean runtime → preview with `npx oris-skills flow clean-runtime --repository-root <repo> --dry-run`, confirm, run without `--dry-run`
23
18
 
24
19
  ELSE → create from scratch.
25
20
 
@@ -27,8 +22,8 @@ ELSE → create from scratch.
27
22
 
28
23
  1. CONFIRM the target repository root (ask only if multiple roots are plausible).
29
24
  2. SCAN: `npx oris-skills flow scan --repository-root <repo> --json` — deterministic
30
- baseline: `projectType`, stacks, commands (with confidence), sections, `truncated`
31
- flag. Scan output = draft evidence, not truth.
25
+ baseline: `projectType`, stacks, commands (with confidence), areas, `truncated` flag.
26
+ Scan output = draft evidence, not truth; it writes nothing.
32
27
  3. IF `truncated: true` → say so, then per-area subagent scans are REQUIRED, not optional.
33
28
  4. FAN OUT parallel subagent scans (docs, frontend, backend/data, tests/build, local
34
29
  skills/rules) by DEFAULT whenever the repo has more than one of those areas —
@@ -43,14 +38,15 @@ SHOW compactly: detected project type + evidence, stacks, commands, AI-readiness
43
38
  Then WALK decisions ONE per turn — short explainer first, recommended answer first:
44
39
 
45
40
  - **Project type** — confirm `projectType` (webapp | api | library | cli | monorepo); it
46
- drives which map sections matter and how criteria/verify observe behavior.
41
+ drives how criteria/verify observe behavior.
47
42
  - **Tasks root** — where Oris writes task documents. Default `.oris-flow/tasks` (keeps
48
43
  the project clean); keep `docs/tasks` only when the team already treats task docs as
49
- project docs. Record in `setup.tasksRoot`.
50
- - **Verify commands** — show detected build+test commands; user confirms or corrects
51
- mark `confirmed`. They feed implement, verify, and loop VERIFIER; unconfirmed = a guess.
52
- - **Version control for `.oris-flow/`** — commit (team default) or gitignore. Task docs
53
- follow the same choice.
44
+ project docs. Record in settings `tasksRoot`.
45
+ - **Verify commands** — show detected build+test commands; user confirms or corrects.
46
+ Confirmed commands go into `AGENTS.md` they feed implement, verify, and fix;
47
+ unconfirmed = a guess.
48
+ - **Version control for `.oris-flow/`** — commit (team default) or gitignore. Record in
49
+ settings `versionControl`.
54
50
 
55
51
  ## 3. AI-readiness check
56
52
 
@@ -63,7 +59,7 @@ fix offer:
63
59
  | `CONTEXT.md` | domain glossary — the names agents must use for the product's concepts |
64
60
  | `docs/adr/` | decisions agents must not re-litigate |
65
61
  | project skills/rules (`.claude/skills`, `.cursor/rules`) | repeatable workflows as source of truth |
66
- | confirmed test/build commands | deterministic feedback loop — agents verify instead of guessing |
62
+ | confirmed test/build commands in `AGENTS.md` | deterministic feedback — agents verify instead of guessing |
67
63
 
68
64
  ON explicit confirmation per file → scaffold the missing ones minimal.
69
65
 
@@ -71,32 +67,29 @@ ON explicit confirmation per file → scaffold the missing ones minimal.
71
67
 
72
68
  1. RECAP: repo, mode, project type, tasksRoot, files to write, AI-readiness gaps,
73
69
  choices. CONFIRM explicitly.
74
- 2. WRITE `.oris-flow/manifest.json` + `.oris-flow/maps/**` (confirmed facts get
75
- confidence `confirmed` so refresh preserves them), then apply:
76
- - `npx oris-skills flow version-control --repository-root <repo> --mode commit|gitignore`
77
- - `npx oris-skills loop bootstrap --repository-root <repo>` when adapter/hooks are missing.
78
- 3. OFFER next: discovery | technical plan | loop (`npx oris-skills loop demo` for
79
- first-timers) | refresh one area | stop.
70
+ 2. WRITE `AGENTS.md` (edit the file that exists — never create `AGENTS.md` beside
71
+ `CLAUDE.md`) + `.oris-flow/settings.json`, then apply:
72
+ `npx oris-skills flow version-control --repository-root <repo> --mode commit|gitignore`.
73
+ 3. OFFER next: discovery | technical plan | review one area | stop.
80
74
 
81
75
  ## Local Preferences
82
76
 
83
77
  1. READ `.oris-flow/settings.json` (defaults in `references/settings.md`).
84
78
  2. ASK what to change: artifactLanguage (document language, default `en`) | responseStyle
85
- (standard | caveman — maximum token density in chat).
79
+ (standard | caveman — maximum token density in chat) | tasksRoot | versionControl.
86
80
  3. SHOW summary, CONFIRM, write ONLY the settings file.
87
81
 
88
82
  ## Never
89
83
 
90
84
  - Write before the recap is explicitly confirmed.
91
- - Overwrite `confirmed` values on refresh the scan merges; missing evidence marks
92
- stale, never deletes.
93
- - Overwrite existing agent files: edit the file that exists, never create `AGENTS.md`
94
- beside `CLAUDE.md`.
95
- - Copy secrets into `.oris-flow/**`, docs, or loop state.
85
+ - Overwrite existing agent files: edit the file that exists, never create a rival.
86
+ - Bloat `AGENTS.md`: facts agents need on every request only — commands, structure
87
+ pointers, decisions; long reference material belongs in `docs/` or skills.
88
+ - Copy secrets into `AGENTS.md`, `.oris-flow/**`, or docs.
96
89
 
97
90
  ## Done when
98
91
 
99
92
  - [ ] Mode chosen; scan ran before questions; decisions asked one at a time with explainers.
100
- - [ ] Project type and tasksRoot recorded; confirmed commands marked `confirmed`.
93
+ - [ ] Confirmed commands and decisions recorded in `AGENTS.md`; preferences in settings.
101
94
  - [ ] AI-readiness gaps reported; files scaffolded only on explicit per-file confirmation.
102
95
  - [ ] Explicit confirmation before every write; no secrets in repository files.