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.
- 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 +23 -13
- package/references/devops.md +58 -0
- package/references/devops.schema.json +54 -0
- 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-devops.mjs +77 -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 +17 -3
- package/scripts/install/oris-mcp.mjs +68 -0
- package/scripts/install/uninstall-user-skills.mjs +2 -29
- package/scripts/oris-skills.mjs +0 -47
- package/scripts/tests/run-all-tests.mjs +3 -9
- package/scripts/tests/test-cleanliness.mjs +54 -0
- package/scripts/tests/test-install-mcp.mjs +66 -0
- package/scripts/tests/test-oris-flow-devops.mjs +64 -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 +10 -6
- package/skills/oris-flow/references/architecture.md +1 -1
- package/skills/oris-flow/references/commit.md +46 -0
- 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/pr.md +44 -0
- 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
|
@@ -72,58 +72,27 @@ test("every skill points at conventions instead of repeating shared rules", () =
|
|
|
72
72
|
}
|
|
73
73
|
});
|
|
74
74
|
|
|
75
|
-
test("loop
|
|
76
|
-
const
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
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
|
|
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
|
|
124
|
-
assert.
|
|
125
|
-
|
|
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
|
|
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
|
|
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
|
-
|
|
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
|
-
|
|
31
|
-
["
|
|
21
|
+
Object.keys(properties).sort(),
|
|
22
|
+
["artifactLanguage", "responseStyle", "tasksRoot", "versionControl"],
|
|
32
23
|
);
|
|
33
|
-
assert.
|
|
34
|
-
assert.ok(schema.properties.
|
|
35
|
-
assert.ok(!schema.properties.
|
|
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
|
|
39
|
-
const
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
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("
|
|
52
|
-
const
|
|
53
|
-
assert.
|
|
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(
|
|
40
|
-
|
|
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.
|
|
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.
|
|
48
|
-
|
|
49
|
-
|
|
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:
|
|
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
|
|
5
|
-
|
|
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,
|
|
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
|
-
|
|
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
|
-
-
|
|
23
|
-
|
|
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 (
|
|
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
|
|
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 (
|
|
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.
|
|
46
|
-
|
|
47
|
-
2.
|
|
48
|
-
|
|
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
|
-
- [ ]
|
|
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,
|
|
13
|
-
2.
|
|
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 —
|
|
4
|
-
readiness. ADAPT to what the repo
|
|
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`.
|
|
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
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
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),
|
|
31
|
-
|
|
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
|
|
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 `
|
|
50
|
-
- **Verify commands** — show detected build+test commands; user confirms or corrects
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
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
|
|
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
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
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
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
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
|
-
- [ ]
|
|
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.
|