soturail 1.5.0 → 1.6.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/README.md +650 -29
- package/dist/cli.js +3 -1
- package/dist/cli.js.map +1 -1
- package/dist/commands/agents.d.ts +4 -0
- package/dist/commands/agents.js +9 -0
- package/dist/commands/agents.js.map +1 -1
- package/dist/commands/candidates.d.ts +2 -0
- package/dist/commands/candidates.js +22 -0
- package/dist/commands/candidates.js.map +1 -0
- package/dist/commands/capabilities.js +25 -3
- package/dist/commands/capabilities.js.map +1 -1
- package/dist/commands/context.js +5 -2
- package/dist/commands/context.js.map +1 -1
- package/dist/commands/contract.js +72 -22
- package/dist/commands/contract.js.map +1 -1
- package/dist/commands/doctor.js +6 -14
- package/dist/commands/doctor.js.map +1 -1
- package/dist/commands/hooks.js +4 -3
- package/dist/commands/hooks.js.map +1 -1
- package/dist/commands/memory.js +19 -10
- package/dist/commands/memory.js.map +1 -1
- package/dist/commands/report.js +5 -13
- package/dist/commands/report.js.map +1 -1
- package/dist/commands/skills.js +52 -4
- package/dist/commands/skills.js.map +1 -1
- package/dist/commands/spec.js +2 -6
- package/dist/commands/spec.js.map +1 -1
- package/dist/compressors/json-toon.d.ts +0 -1
- package/dist/compressors/json-toon.js +0 -3
- package/dist/compressors/json-toon.js.map +1 -1
- package/dist/core/agent-docs-hygiene.js +2 -5
- package/dist/core/agent-docs-hygiene.js.map +1 -1
- package/dist/core/agent-exporter.js +18 -35
- package/dist/core/agent-exporter.js.map +1 -1
- package/dist/core/agent-qa.js +3 -5
- package/dist/core/agent-qa.js.map +1 -1
- package/dist/core/agent-runtime.js +15 -63
- package/dist/core/agent-runtime.js.map +1 -1
- package/dist/core/approved-memory.d.ts +29 -0
- package/dist/core/approved-memory.js +82 -0
- package/dist/core/approved-memory.js.map +1 -0
- package/dist/core/artifact-store.js +9 -1
- package/dist/core/artifact-store.js.map +1 -1
- package/dist/core/cache-normalizer.js +2 -7
- package/dist/core/cache-normalizer.js.map +1 -1
- package/dist/core/candidate-store.d.ts +30 -0
- package/dist/core/candidate-store.js +106 -0
- package/dist/core/candidate-store.js.map +1 -0
- package/dist/core/capability-descriptor.d.ts +194 -0
- package/dist/core/capability-descriptor.js +347 -0
- package/dist/core/capability-descriptor.js.map +1 -0
- package/dist/core/change-contract.d.ts +45 -1
- package/dist/core/change-contract.js +90 -13
- package/dist/core/change-contract.js.map +1 -1
- package/dist/core/code-health.js +1 -1
- package/dist/core/code-health.js.map +1 -1
- package/dist/core/config.d.ts +7 -0
- package/dist/core/config.js +25 -11
- package/dist/core/config.js.map +1 -1
- package/dist/core/context-intelligence.d.ts +17 -1
- package/dist/core/context-intelligence.js +20 -3
- package/dist/core/context-intelligence.js.map +1 -1
- package/dist/core/context-pack.js +8 -8
- package/dist/core/context-pack.js.map +1 -1
- package/dist/core/contract-lifecycle.d.ts +101 -0
- package/dist/core/contract-lifecycle.js +262 -0
- package/dist/core/contract-lifecycle.js.map +1 -0
- package/dist/core/diagram-rail.js +6 -8
- package/dist/core/diagram-rail.js.map +1 -1
- package/dist/core/evidence-pack.js +21 -24
- package/dist/core/evidence-pack.js.map +1 -1
- package/dist/core/evidence-provenance.d.ts +8 -0
- package/dist/core/evidence-provenance.js +23 -4
- package/dist/core/evidence-provenance.js.map +1 -1
- package/dist/core/file-scanner.js +4 -4
- package/dist/core/file-scanner.js.map +1 -1
- package/dist/core/harness-lifecycle.js +2 -11
- package/dist/core/harness-lifecycle.js.map +1 -1
- package/dist/core/harness-rail.js +5 -14
- package/dist/core/harness-rail.js.map +1 -1
- package/dist/core/host-adapters.d.ts +64 -0
- package/dist/core/host-adapters.js +135 -0
- package/dist/core/host-adapters.js.map +1 -0
- package/dist/core/knowledge-rail.js +5 -9
- package/dist/core/knowledge-rail.js.map +1 -1
- package/dist/core/mcp-resources.js +5 -10
- package/dist/core/mcp-resources.js.map +1 -1
- package/dist/core/mcp-server.d.ts +0 -2
- package/dist/core/mcp-server.js +0 -2
- package/dist/core/mcp-server.js.map +1 -1
- package/dist/core/mcp-tools.js +45 -8
- package/dist/core/mcp-tools.js.map +1 -1
- package/dist/core/memory-rail.js +2 -11
- package/dist/core/memory-rail.js.map +1 -1
- package/dist/core/native-candidates.js +3 -5
- package/dist/core/native-candidates.js.map +1 -1
- package/dist/core/policy-rail.js +2 -12
- package/dist/core/policy-rail.js.map +1 -1
- package/dist/core/project-brain.d.ts +0 -1
- package/dist/core/project-brain.js +28 -41
- package/dist/core/project-brain.js.map +1 -1
- package/dist/core/rail-utils.d.ts +20 -1
- package/dist/core/rail-utils.js +27 -9
- package/dist/core/rail-utils.js.map +1 -1
- package/dist/core/release-preflight.js +3 -1
- package/dist/core/release-preflight.js.map +1 -1
- package/dist/core/report-rail.d.ts +2 -1
- package/dist/core/report-rail.js +4 -27
- package/dist/core/report-rail.js.map +1 -1
- package/dist/core/reverse-specification.js +3 -6
- package/dist/core/reverse-specification.js.map +1 -1
- package/dist/core/rule-extractor.js +2 -2
- package/dist/core/rule-extractor.js.map +1 -1
- package/dist/core/run-workspace.js +3 -12
- package/dist/core/run-workspace.js.map +1 -1
- package/dist/core/semantic-candidate.d.ts +416 -0
- package/dist/core/semantic-candidate.js +124 -0
- package/dist/core/semantic-candidate.js.map +1 -0
- package/dist/core/skill-exporter.d.ts +50 -0
- package/dist/core/skill-exporter.js +130 -0
- package/dist/core/skill-exporter.js.map +1 -1
- package/dist/core/skill-model.d.ts +88 -0
- package/dist/core/skill-model.js +239 -0
- package/dist/core/skill-model.js.map +1 -0
- package/dist/core/skill-rail-v2.js +5 -10
- package/dist/core/skill-rail-v2.js.map +1 -1
- package/dist/core/skill-routing.d.ts +8 -0
- package/dist/core/skill-routing.js +29 -25
- package/dist/core/skill-routing.js.map +1 -1
- package/dist/core/skill-schema.js +2 -6
- package/dist/core/skill-schema.js.map +1 -1
- package/dist/core/skill-validator.d.ts +6 -0
- package/dist/core/skill-validator.js +21 -14
- package/dist/core/skill-validator.js.map +1 -1
- package/dist/core/tasklet-rail.js +3 -5
- package/dist/core/tasklet-rail.js.map +1 -1
- package/dist/core/trust-decision.d.ts +9 -0
- package/dist/core/trust-decision.js +30 -0
- package/dist/core/trust-decision.js.map +1 -0
- package/dist/core/version.d.ts +1 -1
- package/dist/core/version.js +1 -1
- package/dist/core/workflow-store.js +11 -13
- package/dist/core/workflow-store.js.map +1 -1
- package/dist/core/workspace-fingerprint.d.ts +12 -1
- package/dist/core/workspace-fingerprint.js +49 -8
- package/dist/core/workspace-fingerprint.js.map +1 -1
- package/dist/core/workspace-guard.d.ts +8 -0
- package/dist/core/workspace-guard.js +21 -1
- package/dist/core/workspace-guard.js.map +1 -1
- package/docs/README.md +15 -2
- package/docs/architecture/agent-native-semantic-architecture.md +403 -0
- package/docs/architecture/architecture.md +1 -1
- package/docs/architecture/artifact-model-and-lineage.md +2 -2
- package/docs/architecture/context-architecture.md +4 -2
- package/docs/architecture/contracts-and-verification.md +33 -0
- package/docs/architecture/governance-model.md +1 -1
- package/docs/architecture/provider-architecture.md +48 -14
- package/docs/architecture/verified-control-plane.md +70 -15
- package/docs/audits/v1.6.0-legacy-removal-report.md +75 -0
- package/docs/audits/v1.6.0-refactor-map.md +119 -0
- package/docs/audits/v1.6.0-semantic-migration-baseline.md +185 -0
- package/docs/audits/v1.7.0-real-agent-qualification-baseline.md +127 -0
- package/docs/audits/v1.7.0-real-agent-qualification-results.md +156 -0
- package/docs/ecosystem/2026-external-research-master-index.md +221 -0
- package/docs/ecosystem/agent-harness-synthesis-2026.md +6 -6
- package/docs/ecosystem/conductor-mode.md +3 -3
- package/docs/ecosystem/ecosystem-influences.md +4 -4
- package/docs/ecosystem/external-projects-audit.md +2 -0
- package/docs/getting-started/first-real-workflow.md +69 -39
- package/docs/getting-started/migration-v1.6.md +77 -0
- package/docs/getting-started/quickstart.md +66 -22
- package/docs/getting-started/usage.md +66 -61
- package/docs/pt-BR/visao-geral.md +58 -18
- package/docs/rails/hosts/host-compatibility-rail.md +24 -0
- package/docs/rails/hosts/mcp.md +10 -4
- package/docs/rails/skills/skill-rail-2.md +46 -8
- package/docs/rails/skills/skill-rail.md +162 -49
- package/docs/reference/branding.md +12 -3
- package/docs/reference/commands/stable-command-surface.md +11 -6
- package/docs/reference/commands/v1.6-commands.md +74 -0
- package/docs/reference/contracts/v1-contract.md +3 -3
- package/docs/reference/schemas/schema-contracts.md +17 -0
- package/docs/releases/README.md +36 -30
- package/docs/releases/RELEASE_NOTES_v1.6.0.md +55 -0
- package/docs/releases/RELEASE_NOTES_v1.6.1.md +30 -0
- package/docs/roadmap/future-rails-index.md +23 -14
- package/docs/roadmap/public-roadmap.md +48 -14
- package/docs/roadmap/v1.6.0-agent-native-semantic-control-plane-master-prompt.md +1682 -0
- package/docs/roadmap/verified-control-plane-implementation-tracker.md +93 -33
- package/docs/security/security-boundaries.md +33 -19
- package/docs/security/security-model.md +2 -0
- package/docs/security/threat-model.md +16 -2
- package/package.json +13 -12
- package/skills/soturail-change/SKILL.md +32 -0
- package/skills/soturail-core/SKILL.md +46 -0
- package/skills/soturail-core/references/candidate-artifacts.md +37 -0
- package/skills/soturail-core/references/trust-states.md +21 -0
- package/skills/soturail-debug/SKILL.md +30 -0
- package/skills/soturail-knowledge/SKILL.md +29 -0
- package/skills/soturail-release/SKILL.md +31 -0
- package/skills/soturail-research/SKILL.md +31 -0
- package/skills/soturail-review/SKILL.md +31 -0
- package/skills/soturail-security/SKILL.md +31 -0
package/README.md
CHANGED
|
@@ -2,64 +2,665 @@
|
|
|
2
2
|
|
|
3
3
|
[](https://www.npmjs.com/package/soturail)
|
|
4
4
|
[](https://github.com/Soturine/soturail/actions/workflows/ci.yml)
|
|
5
|
+
[](https://github.com/Soturine/soturail/actions/workflows/security.yml)
|
|
5
6
|
[](LICENSE)
|
|
6
7
|
|
|
7
|
-
SotuRail is a local-first engineering control plane for AI-assisted software
|
|
8
|
+
**SotuRail is a local-first, agent-native engineering control plane for AI-assisted software development.**
|
|
8
9
|
|
|
9
|
-
|
|
10
|
+
It sits beside coding agents such as Claude Code, Codex, Cursor and Gemini CLI. The agent handles semantic work — understanding the task, project vocabulary, requirements and ambiguity — while SotuRail keeps the engineering state inspectable and verifiable: capabilities, workspace identity, contracts, provenance, freshness, evidence, policy and readiness.
|
|
11
|
+
|
|
12
|
+
```text
|
|
13
|
+
AI understands.
|
|
14
|
+
SotuRail organizes, constrains and proves.
|
|
15
|
+
```
|
|
16
|
+
|
|
17
|
+
SotuRail is **not another coding agent**, a model gateway, a cloud backend or an autonomous shell runtime. It is the engineering rail around the agent.
|
|
18
|
+
|
|
19
|
+
## What problem does it solve?
|
|
20
|
+
|
|
21
|
+
AI coding agents can reason well, but an agent saying _“tests passed”_, _“this evidence is current”_ or _“the change is ready”_ should not automatically make that true.
|
|
22
|
+
|
|
23
|
+
SotuRail separates semantic reasoning from verifiable engineering state:
|
|
24
|
+
|
|
25
|
+
```text
|
|
26
|
+
User request
|
|
27
|
+
↓
|
|
28
|
+
AI agent / Semantic Worker
|
|
29
|
+
↓
|
|
30
|
+
portable Skill
|
|
31
|
+
↓
|
|
32
|
+
capability discovery
|
|
33
|
+
↓
|
|
34
|
+
native facts / providers / project sources
|
|
35
|
+
↓
|
|
36
|
+
candidate artifacts
|
|
37
|
+
↓
|
|
38
|
+
provenance + freshness + policy + evidence
|
|
39
|
+
↓
|
|
40
|
+
readiness
|
|
41
|
+
```
|
|
42
|
+
|
|
43
|
+
The agent may infer, explain and propose. SotuRail decides whether the relevant evidence is current and whether the change is actually ready to advance.
|
|
44
|
+
|
|
45
|
+
## Typical use cases
|
|
46
|
+
|
|
47
|
+
SotuRail is useful when you want an AI coding agent to work with more discipline across a real repository, for example:
|
|
48
|
+
|
|
49
|
+
- implement a feature without losing track of scope and acceptance criteria;
|
|
50
|
+
- debug a regression and retain reproducible evidence;
|
|
51
|
+
- review a change against recorded checks rather than model confidence;
|
|
52
|
+
- keep project knowledge source-backed and freshness-aware;
|
|
53
|
+
- expose a small, self-describing capability surface to an agent through MCP;
|
|
54
|
+
- reuse the same engineering workflow across Claude Code, Codex, Cursor, Gemini CLI and generic Agent Skills hosts;
|
|
55
|
+
- preserve a clear boundary between AI-generated candidates and verified facts;
|
|
56
|
+
- prepare releases with explicit human approval and reproducible artifacts.
|
|
10
57
|
|
|
11
58
|
## Install
|
|
12
59
|
|
|
60
|
+
SotuRail v1.6 requires **Node.js 22 or newer**.
|
|
61
|
+
|
|
62
|
+
Install globally:
|
|
63
|
+
|
|
13
64
|
```bash
|
|
14
65
|
npm install -g soturail
|
|
15
66
|
soturail --version
|
|
16
|
-
npx soturail --help
|
|
17
67
|
```
|
|
18
68
|
|
|
19
|
-
|
|
69
|
+
Or run it without a global install:
|
|
70
|
+
|
|
71
|
+
```bash
|
|
72
|
+
npx soturail@latest --help
|
|
73
|
+
```
|
|
74
|
+
|
|
75
|
+
The portable implementation is TypeScript/Node.js. Rust is optional and used only where benchmarked native acceleration is justified.
|
|
76
|
+
|
|
77
|
+
## 5-minute quickstart
|
|
78
|
+
|
|
79
|
+
### 1. Initialize SotuRail in a project
|
|
20
80
|
|
|
21
|
-
|
|
81
|
+
From the repository root:
|
|
22
82
|
|
|
23
83
|
```bash
|
|
84
|
+
soturail init
|
|
85
|
+
soturail doctor
|
|
24
86
|
soturail index
|
|
25
|
-
soturail read README.md --query "product boundary"
|
|
26
|
-
soturail contract create docs-refresh --title "Refresh docs" --intent "Keep contracts current" --criterion "docs check passes" --check "npm run docs:check"
|
|
27
|
-
soturail evidence collect
|
|
28
|
-
soturail self readiness --v1 --strict
|
|
29
87
|
```
|
|
30
88
|
|
|
31
|
-
|
|
89
|
+
Runtime state is kept locally under:
|
|
90
|
+
|
|
91
|
+
```text
|
|
92
|
+
.soturail/
|
|
93
|
+
```
|
|
94
|
+
|
|
95
|
+
SotuRail does not require a hosted workspace, account or mandatory cloud service for its normal local workflow.
|
|
96
|
+
|
|
97
|
+
### 2. Install the portable Skills for your agent
|
|
98
|
+
|
|
99
|
+
Claude Code:
|
|
100
|
+
|
|
101
|
+
```bash
|
|
102
|
+
soturail skills export --target claude --layout portable --install
|
|
103
|
+
```
|
|
104
|
+
|
|
105
|
+
Codex:
|
|
106
|
+
|
|
107
|
+
```bash
|
|
108
|
+
soturail skills export --target codex --layout portable --install
|
|
109
|
+
```
|
|
110
|
+
|
|
111
|
+
Cursor:
|
|
112
|
+
|
|
113
|
+
```bash
|
|
114
|
+
soturail skills export --target cursor --layout portable --install
|
|
115
|
+
```
|
|
116
|
+
|
|
117
|
+
Gemini CLI:
|
|
118
|
+
|
|
119
|
+
```bash
|
|
120
|
+
soturail skills export --target gemini --layout portable --install
|
|
121
|
+
```
|
|
122
|
+
|
|
123
|
+
Unknown or unverified host:
|
|
124
|
+
|
|
125
|
+
```bash
|
|
126
|
+
soturail skills export --target generic --layout portable --install
|
|
127
|
+
```
|
|
128
|
+
|
|
129
|
+
Verified v1.6 project projections:
|
|
130
|
+
|
|
131
|
+
| Host | Skill directory |
|
|
132
|
+
|---|---|
|
|
133
|
+
| Claude Code | `.claude/skills/` |
|
|
134
|
+
| Codex | `.agents/skills/` |
|
|
135
|
+
| Cursor | `.agents/skills/` |
|
|
136
|
+
| Gemini CLI | `.agents/skills/` |
|
|
137
|
+
| Other / unverified hosts | generic portable projection |
|
|
138
|
+
|
|
139
|
+
### 3. Talk to the agent normally
|
|
140
|
+
|
|
141
|
+
You do **not** need to translate your work into SotuRail CLI commands.
|
|
142
|
+
|
|
143
|
+
Examples:
|
|
144
|
+
|
|
145
|
+
```text
|
|
146
|
+
"Corrija a regressão de login e verifique o que pode ser afetado."
|
|
147
|
+
|
|
148
|
+
"Review this change and only call it ready if the required evidence is current."
|
|
149
|
+
|
|
150
|
+
"Analise esses requisitos e separe fatos, hipóteses e perguntas em aberto."
|
|
151
|
+
|
|
152
|
+
"Prepare a release, mas não publique nada sem minha aprovação."
|
|
153
|
+
```
|
|
154
|
+
|
|
155
|
+
The agent can discover the relevant SotuRail Skills and capabilities instead of memorizing the whole CLI.
|
|
156
|
+
|
|
157
|
+
### 4. Inspect discovery manually when needed
|
|
158
|
+
|
|
159
|
+
For humans, CI or debugging:
|
|
160
|
+
|
|
161
|
+
```bash
|
|
162
|
+
soturail skills discover
|
|
163
|
+
soturail capabilities list
|
|
164
|
+
soturail capabilities describe context.select
|
|
165
|
+
```
|
|
166
|
+
|
|
167
|
+
MCP-capable agents can use the typed discovery surface:
|
|
168
|
+
|
|
169
|
+
```text
|
|
170
|
+
soturail.skills.list
|
|
171
|
+
soturail.capabilities
|
|
172
|
+
```
|
|
173
|
+
|
|
174
|
+
## Core concepts
|
|
32
175
|
|
|
33
|
-
|
|
176
|
+
### Skills
|
|
34
177
|
|
|
35
|
-
|
|
178
|
+
Skills are portable operating procedures for agents. They explain **when and how** to use SotuRail capabilities without duplicating the implementation.
|
|
179
|
+
|
|
180
|
+
SotuRail v1.6 ships eight bundled Skills:
|
|
181
|
+
|
|
182
|
+
| Skill | Purpose |
|
|
36
183
|
|---|---|
|
|
37
|
-
|
|
|
38
|
-
|
|
|
39
|
-
|
|
|
40
|
-
|
|
|
41
|
-
|
|
|
42
|
-
|
|
|
184
|
+
| `soturail-core` | Base discover → select → act → verify workflow |
|
|
185
|
+
| `soturail-change` | Controlled software changes |
|
|
186
|
+
| `soturail-debug` | Reproduce, diagnose and fix failures |
|
|
187
|
+
| `soturail-review` | Review changes against contracts and evidence |
|
|
188
|
+
| `soturail-security` | Security-sensitive engineering work |
|
|
189
|
+
| `soturail-research` | Research with provenance and source separation |
|
|
190
|
+
| `soturail-knowledge` | Source-backed project knowledge |
|
|
191
|
+
| `soturail-release` | Release qualification and irreversible-action boundaries |
|
|
192
|
+
|
|
193
|
+
They use progressive disclosure:
|
|
194
|
+
|
|
195
|
+
```text
|
|
196
|
+
Level 1: name + description
|
|
197
|
+
↓
|
|
198
|
+
agent decides relevance
|
|
199
|
+
|
|
200
|
+
Level 2: selected SKILL.md
|
|
201
|
+
↓
|
|
202
|
+
workflow + capability bindings
|
|
203
|
+
|
|
204
|
+
Level 3: references / scripts / assets
|
|
205
|
+
↓
|
|
206
|
+
loaded only when required
|
|
207
|
+
```
|
|
208
|
+
|
|
209
|
+
### Capabilities
|
|
210
|
+
|
|
211
|
+
Capabilities are stable, self-describing contracts. They describe what SotuRail can do independently of a specific host UI.
|
|
212
|
+
|
|
213
|
+
A capability can describe:
|
|
214
|
+
|
|
215
|
+
- stable machine ID;
|
|
216
|
+
- purpose;
|
|
217
|
+
- typed inputs and outputs;
|
|
218
|
+
- Skill / MCP / CLI surfaces;
|
|
219
|
+
- required permissions;
|
|
220
|
+
- side effects;
|
|
221
|
+
- evidence/freshness requirements;
|
|
222
|
+
- provider class and availability;
|
|
223
|
+
- fallback behavior;
|
|
224
|
+
- trust rules.
|
|
225
|
+
|
|
226
|
+
Examples:
|
|
227
|
+
|
|
228
|
+
```text
|
|
229
|
+
context.select
|
|
230
|
+
evidence.verify
|
|
231
|
+
contract.verify
|
|
232
|
+
semantic.candidate.record
|
|
233
|
+
structural.impact
|
|
234
|
+
dependency.docs
|
|
235
|
+
```
|
|
236
|
+
|
|
237
|
+
A declared capability can also be explicitly `unavailable`. SotuRail prefers an honest unavailable state over pretending that an integration exists.
|
|
238
|
+
|
|
239
|
+
### Semantic Worker
|
|
240
|
+
|
|
241
|
+
The active coding agent acts as the **Semantic Worker**.
|
|
242
|
+
|
|
243
|
+
The agent is responsible for contextual meaning:
|
|
244
|
+
|
|
245
|
+
- understanding natural-language intent;
|
|
246
|
+
- interpreting requirements;
|
|
247
|
+
- recognizing project/domain vocabulary;
|
|
248
|
+
- identifying ambiguity;
|
|
249
|
+
- selecting relevant Skills/capabilities;
|
|
250
|
+
- combining source/provider results;
|
|
251
|
+
- proposing claims, impacts, decisions and questions.
|
|
252
|
+
|
|
253
|
+
SotuRail records semantic output as **candidate artifacts**. A model-generated candidate does not become a verified fact just because the model is confident.
|
|
254
|
+
|
|
255
|
+
### Evidence and trust
|
|
256
|
+
|
|
257
|
+
SotuRail owns objective trust transitions.
|
|
258
|
+
|
|
259
|
+
```text
|
|
260
|
+
AI interpretation
|
|
261
|
+
↓
|
|
262
|
+
candidate / assertion
|
|
263
|
+
↓
|
|
264
|
+
source + workspace binding
|
|
265
|
+
↓
|
|
266
|
+
recorded evidence / human attestation
|
|
267
|
+
↓
|
|
268
|
+
freshness + policy
|
|
269
|
+
↓
|
|
270
|
+
readiness
|
|
271
|
+
```
|
|
272
|
+
|
|
273
|
+
Protected states such as `verified`, `current`, `approved` and `ready` cannot be self-awarded by a Semantic Worker.
|
|
274
|
+
|
|
275
|
+
### Change Contracts
|
|
43
276
|
|
|
44
|
-
|
|
277
|
+
A Change Contract records the engineering intent of a change:
|
|
45
278
|
|
|
46
|
-
|
|
279
|
+
- title and intent;
|
|
280
|
+
- scope;
|
|
281
|
+
- risk;
|
|
282
|
+
- acceptance criteria;
|
|
283
|
+
- required checks;
|
|
284
|
+
- evidence requirements;
|
|
285
|
+
- relevant sources.
|
|
47
286
|
|
|
48
|
-
|
|
287
|
+
Example:
|
|
49
288
|
|
|
50
|
-
|
|
289
|
+
```bash
|
|
290
|
+
soturail contract create docs-refresh \
|
|
291
|
+
--title "Refresh docs" \
|
|
292
|
+
--intent "Keep project documentation current" \
|
|
293
|
+
--criterion "docs check passes" \
|
|
294
|
+
--check "npm run docs:check" \
|
|
295
|
+
--criterion-check "npm run docs:check"
|
|
296
|
+
```
|
|
297
|
+
|
|
298
|
+
After making the change, run the required check through SotuRail:
|
|
299
|
+
|
|
300
|
+
```bash
|
|
301
|
+
soturail run -- npm run docs:check
|
|
302
|
+
soturail contract verify .soturail/contracts/docs-refresh.json
|
|
303
|
+
```
|
|
304
|
+
|
|
305
|
+
The contract creation fingerprint remains immutable provenance. Readiness is evaluated against **current** recorded evidence, so normal implementation work does not make the contract permanently stale.
|
|
306
|
+
|
|
307
|
+
If the contract foundation changes — for example its scope, declared sources or contract content — create a recorded revision instead of silently rewriting history.
|
|
308
|
+
|
|
309
|
+
### Human attestations
|
|
310
|
+
|
|
311
|
+
Caller flags do not grant trust by themselves.
|
|
312
|
+
|
|
313
|
+
Assertions such as:
|
|
314
|
+
|
|
315
|
+
```text
|
|
316
|
+
--check-passed
|
|
317
|
+
--criterion-passed
|
|
318
|
+
--runtime-evidence
|
|
319
|
+
--independent-review
|
|
320
|
+
--human-approved
|
|
321
|
+
```
|
|
322
|
+
|
|
323
|
+
do not satisfy readiness without corroboration.
|
|
324
|
+
|
|
325
|
+
Objective requirements use current recorded executions. Human/manual decisions use explicit interactive attestation receipts tied to the contract revision and current workspace.
|
|
326
|
+
|
|
327
|
+
## Architecture
|
|
328
|
+
|
|
329
|
+
The public mental model is intentionally small:
|
|
330
|
+
|
|
331
|
+
```text
|
|
332
|
+
┌──────────────────────┐
|
|
333
|
+
User / developer ───────▶│ AI agent │
|
|
334
|
+
│ Semantic Worker │
|
|
335
|
+
└──────────┬───────────┘
|
|
336
|
+
│
|
|
337
|
+
▼
|
|
338
|
+
┌──────────────────────┐
|
|
339
|
+
│ Portable Skills │
|
|
340
|
+
│ progressive loading │
|
|
341
|
+
└──────────┬───────────┘
|
|
342
|
+
│
|
|
343
|
+
▼
|
|
344
|
+
┌──────────────────────┐
|
|
345
|
+
│ Capability Registry │
|
|
346
|
+
│ self-describing API │
|
|
347
|
+
└───────┬───────┬──────┘
|
|
348
|
+
│ │
|
|
349
|
+
┌───────────┘ └────────────┐
|
|
350
|
+
▼ ▼
|
|
351
|
+
┌──────────────────┐ ┌──────────────────┐
|
|
352
|
+
│ Native facts │ │ Optional │
|
|
353
|
+
│ Git / FS / tests │ │ providers │
|
|
354
|
+
│ schemas / hashes │ │ docs / structure │
|
|
355
|
+
└─────────┬────────┘ └─────────┬────────┘
|
|
356
|
+
└──────────────┬──────────────────┘
|
|
357
|
+
▼
|
|
358
|
+
┌──────────────────────┐
|
|
359
|
+
│ Structured artifacts │
|
|
360
|
+
│ candidates / runs │
|
|
361
|
+
│ contracts / evidence │
|
|
362
|
+
└──────────┬───────────┘
|
|
363
|
+
▼
|
|
364
|
+
┌──────────────────────┐
|
|
365
|
+
│ SotuRail trust core │
|
|
366
|
+
│ provenance │
|
|
367
|
+
│ freshness │
|
|
368
|
+
│ policy │
|
|
369
|
+
│ authority/readiness │
|
|
370
|
+
└──────────────────────┘
|
|
371
|
+
```
|
|
372
|
+
|
|
373
|
+
A useful rule of thumb:
|
|
374
|
+
|
|
375
|
+
| Concern | Owner |
|
|
376
|
+
|---|---|
|
|
377
|
+
| Meaning, intent, ambiguity, semantic interpretation | AI agent |
|
|
378
|
+
| Procedure | Skill |
|
|
379
|
+
| Stable operation contract | Capability |
|
|
380
|
+
| Specialized optional implementation | Provider |
|
|
381
|
+
| Git/filesystem/hash/schema/test facts | deterministic tools |
|
|
382
|
+
| Provenance/freshness/evidence/readiness | SotuRail |
|
|
383
|
+
| Product decisions and explicit approval | Human |
|
|
384
|
+
|
|
385
|
+
## Main feature areas
|
|
386
|
+
|
|
387
|
+
| Area | What SotuRail provides |
|
|
388
|
+
|---|---|
|
|
389
|
+
| **Agent Skills** | portable Skills, progressive disclosure, task-oriented procedures |
|
|
390
|
+
| **Capability discovery** | self-describing capability catalog across MCP/CLI/Skills |
|
|
391
|
+
| **Context** | progressive repo reading, bounded context artifacts, explicit degradation |
|
|
392
|
+
| **Change Contracts** | scope, criteria, risk, evidence requirements and revision lineage |
|
|
393
|
+
| **Evidence** | recorded command executions tied to the current workspace |
|
|
394
|
+
| **Workspace integrity** | guarded paths, fingerprints, source/workspace binding |
|
|
395
|
+
| **Artifacts** | canonical registry/store/envelopes, lineage and freshness |
|
|
396
|
+
| **Governance** | capability metadata, Authority Gate, Readiness Gate, capability epochs |
|
|
397
|
+
| **Execution integrity** | exact-digest Execution Envelope |
|
|
398
|
+
| **Knowledge** | source-backed local knowledge and stale-state handling |
|
|
399
|
+
| **MCP** | official SDK, typed bounded tools/resources, capability discovery |
|
|
400
|
+
| **Host adapters** | canonical host facts plus portable projections |
|
|
401
|
+
| **Evaluation** | deterministic fixtures, regressions and benchmark infrastructure |
|
|
402
|
+
| **Release engineering** | release checks, package verification, SBOM/checksums/provenance workflow |
|
|
403
|
+
|
|
404
|
+
## MCP
|
|
405
|
+
|
|
406
|
+
SotuRail includes a local MCP server over stdio using the official TypeScript SDK.
|
|
407
|
+
|
|
408
|
+
Start it manually:
|
|
409
|
+
|
|
410
|
+
```bash
|
|
411
|
+
soturail mcp serve --transport stdio
|
|
412
|
+
```
|
|
413
|
+
|
|
414
|
+
Useful diagnostics:
|
|
415
|
+
|
|
416
|
+
```bash
|
|
417
|
+
soturail mcp doctor
|
|
418
|
+
soturail mcp manifest
|
|
419
|
+
soturail mcp smoke
|
|
420
|
+
soturail mcp exposure
|
|
421
|
+
```
|
|
422
|
+
|
|
423
|
+
Important agent-discovery tools:
|
|
424
|
+
|
|
425
|
+
```text
|
|
426
|
+
soturail.skills.list
|
|
427
|
+
soturail.capabilities
|
|
428
|
+
soturail.candidates.record
|
|
429
|
+
```
|
|
430
|
+
|
|
431
|
+
Security defaults:
|
|
432
|
+
|
|
433
|
+
- no arbitrary shell execution through MCP;
|
|
434
|
+
- no `soturail.run` MCP tool by default;
|
|
435
|
+
- raw-log expansion remains redacted for MCP callers;
|
|
436
|
+
- tool exposure must come from a capability descriptor;
|
|
437
|
+
- recording a semantic candidate never verifies it.
|
|
438
|
+
|
|
439
|
+
## Natural-language and multilingual behavior
|
|
440
|
+
|
|
441
|
+
SotuRail's core machine semantics do not depend on English keyword matching.
|
|
442
|
+
|
|
443
|
+
The same capability IDs can be used when:
|
|
444
|
+
|
|
445
|
+
- the user writes in Portuguese;
|
|
446
|
+
- source code uses English identifiers;
|
|
447
|
+
- requirements are in Spanish;
|
|
448
|
+
- documentation is mixed-language;
|
|
449
|
+
- paths contain accents, emoji or Japanese characters;
|
|
450
|
+
- provider output uses another language.
|
|
451
|
+
|
|
452
|
+
Original source text is preserved. Translation/localization is a derived presentation and never replaces the original source as evidence.
|
|
453
|
+
|
|
454
|
+
The legacy lexical router remains only as a labeled `heuristic-fallback`, not the primary semantic authority.
|
|
455
|
+
|
|
456
|
+
## CLI: useful, but not the agent UX
|
|
457
|
+
|
|
458
|
+
v1.6 is **agent-first, not CLI-less**.
|
|
459
|
+
|
|
460
|
+
The CLI is primarily useful for:
|
|
461
|
+
|
|
462
|
+
- humans;
|
|
463
|
+
- CI;
|
|
464
|
+
- deterministic automation;
|
|
465
|
+
- diagnostics;
|
|
466
|
+
- administration;
|
|
467
|
+
- recovery;
|
|
468
|
+
- release workflows;
|
|
469
|
+
- hosts without a richer Skill/MCP surface.
|
|
470
|
+
|
|
471
|
+
A few common commands:
|
|
472
|
+
|
|
473
|
+
```bash
|
|
474
|
+
# repository/context
|
|
475
|
+
soturail init
|
|
476
|
+
soturail index
|
|
477
|
+
soturail read README.md --query "architecture"
|
|
478
|
+
|
|
479
|
+
# discovery
|
|
480
|
+
soturail skills discover
|
|
481
|
+
soturail capabilities list
|
|
482
|
+
|
|
483
|
+
# diagnostics
|
|
484
|
+
soturail doctor
|
|
485
|
+
soturail mcp smoke
|
|
486
|
+
soturail self architecture --check
|
|
487
|
+
|
|
488
|
+
# evidence
|
|
489
|
+
soturail run -- npm test
|
|
490
|
+
soturail evidence report
|
|
491
|
+
|
|
492
|
+
# release qualification
|
|
493
|
+
soturail release check
|
|
494
|
+
```
|
|
495
|
+
|
|
496
|
+
See [v1.6 command reference](docs/reference/commands/v1.6-commands.md) for the current additions and the stable command docs for the wider CLI surface.
|
|
497
|
+
|
|
498
|
+
## Example workflows
|
|
499
|
+
|
|
500
|
+
### Feature work
|
|
501
|
+
|
|
502
|
+
```text
|
|
503
|
+
User:
|
|
504
|
+
"Adicione OAuth e verifique os riscos de segurança."
|
|
505
|
+
|
|
506
|
+
Agent:
|
|
507
|
+
1. loads soturail-core + soturail-change + soturail-security
|
|
508
|
+
2. discovers available capabilities
|
|
509
|
+
3. inspects project context and sources
|
|
510
|
+
4. records unresolved assumptions as candidates
|
|
511
|
+
5. creates/uses a Change Contract
|
|
512
|
+
6. implements the change
|
|
513
|
+
7. runs required checks
|
|
514
|
+
8. SotuRail evaluates current evidence/readiness
|
|
515
|
+
```
|
|
516
|
+
|
|
517
|
+
If a future capability such as `dependency.docs` is unavailable, that state is visible instead of silently replaced with fabricated certainty.
|
|
518
|
+
|
|
519
|
+
### Debugging
|
|
520
|
+
|
|
521
|
+
```text
|
|
522
|
+
User:
|
|
523
|
+
"O login começou a falhar depois dessa mudança."
|
|
524
|
+
|
|
525
|
+
Agent:
|
|
526
|
+
1. loads soturail-debug
|
|
527
|
+
2. reproduces the failure
|
|
528
|
+
3. records evidence
|
|
529
|
+
4. proposes candidate causes
|
|
530
|
+
5. edits the code
|
|
531
|
+
6. reruns the relevant checks
|
|
532
|
+
7. only current evidence may satisfy readiness
|
|
533
|
+
```
|
|
534
|
+
|
|
535
|
+
### Review
|
|
536
|
+
|
|
537
|
+
```text
|
|
538
|
+
User:
|
|
539
|
+
"Revise esse PR e veja se pode avançar."
|
|
540
|
+
|
|
541
|
+
Agent:
|
|
542
|
+
1. loads soturail-review
|
|
543
|
+
2. reads contract/scope/evidence
|
|
544
|
+
3. compares the change with current evidence
|
|
545
|
+
4. separates observations from assumptions
|
|
546
|
+
5. reports blockers
|
|
547
|
+
6. readiness remains a SotuRail decision, not model confidence
|
|
548
|
+
```
|
|
549
|
+
|
|
550
|
+
## Local project state
|
|
551
|
+
|
|
552
|
+
SotuRail stores generated runtime state under `.soturail/`.
|
|
553
|
+
|
|
554
|
+
Typical categories include:
|
|
555
|
+
|
|
556
|
+
```text
|
|
557
|
+
.soturail/
|
|
558
|
+
├─ artifacts / indexes / context
|
|
559
|
+
├─ contracts
|
|
560
|
+
├─ evidence / runs
|
|
561
|
+
├─ knowledge / memory
|
|
562
|
+
├─ policy / governance
|
|
563
|
+
├─ reports / evaluations
|
|
564
|
+
└─ host / MCP projections
|
|
565
|
+
```
|
|
566
|
+
|
|
567
|
+
Exact internal paths are resolved by the canonical artifact/workspace registry. Do not build integrations by guessing private paths when a public command, artifact or capability exists.
|
|
568
|
+
|
|
569
|
+
## Scope and non-goals
|
|
570
|
+
|
|
571
|
+
SotuRail intentionally does **not** try to become:
|
|
572
|
+
|
|
573
|
+
- another Claude/Codex-style coding agent;
|
|
574
|
+
- a mandatory model provider;
|
|
575
|
+
- a general LLM proxy/router;
|
|
576
|
+
- a hosted developer workspace;
|
|
577
|
+
- an OS/container sandbox;
|
|
578
|
+
- a secret manager;
|
|
579
|
+
- a mandatory vector database;
|
|
580
|
+
- a mandatory graph database;
|
|
581
|
+
- a giant MCP marketplace;
|
|
582
|
+
- a framework-specific semantic-rule engine;
|
|
583
|
+
- an autonomous publish/deploy loop.
|
|
584
|
+
|
|
585
|
+
The architecture favors replaceable providers and optional integrations over mandatory infrastructure.
|
|
586
|
+
|
|
587
|
+
## Current provider status
|
|
588
|
+
|
|
589
|
+
The capability model can declare external/provider-backed capabilities before an implementation is installed.
|
|
590
|
+
|
|
591
|
+
In v1.6:
|
|
592
|
+
|
|
593
|
+
- `structural.impact` is declared **unavailable** until a StructuralProvider is implemented;
|
|
594
|
+
- `dependency.docs` is declared **unavailable** until a DependencyDocsProvider is implemented.
|
|
595
|
+
|
|
596
|
+
This is intentional: capability discovery should expose the real state of the system.
|
|
597
|
+
|
|
598
|
+
## Security model
|
|
599
|
+
|
|
600
|
+
SotuRail is a **guardrail, not a sandbox**.
|
|
601
|
+
|
|
602
|
+
Implemented boundaries include:
|
|
603
|
+
|
|
604
|
+
- `WorkspaceGuard` for caller-controlled filesystem paths;
|
|
605
|
+
- canonical artifact storage and lineage;
|
|
606
|
+
- workspace/source fingerprints;
|
|
607
|
+
- explicit stale-state handling;
|
|
608
|
+
- Authority and Readiness as separate gates;
|
|
609
|
+
- exact-digest Execution Envelopes;
|
|
610
|
+
- redacted raw-log behavior;
|
|
611
|
+
- bounded MCP exposure;
|
|
612
|
+
- interactive human attestation for manual approval/review;
|
|
613
|
+
- dependency audit, CodeQL, SBOM and release provenance in the project release process.
|
|
614
|
+
|
|
615
|
+
SotuRail still depends on the host, operating system and external services for actual process isolation, credential security and external-side-effect enforcement.
|
|
616
|
+
|
|
617
|
+
See the [Threat Model](docs/security/threat-model.md).
|
|
618
|
+
|
|
619
|
+
## Compatibility and legacy
|
|
620
|
+
|
|
621
|
+
v1.6 keeps the v1.5 public compatibility surface where a minor release cannot safely remove it.
|
|
622
|
+
|
|
623
|
+
Examples:
|
|
624
|
+
|
|
625
|
+
- older Skill packs can still be adapted/migrated;
|
|
626
|
+
- flat Skill export is deprecated in favor of portable Skill directories;
|
|
627
|
+
- `gemini-legacy` remains a compatibility alias with a v2.0 removal target;
|
|
628
|
+
- legacy MCP negotiation remains where required by the published compatibility contract.
|
|
629
|
+
|
|
630
|
+
Historical docs and release notes remain in the repository as history; they are not the recommended v1.6 workflow.
|
|
631
|
+
|
|
632
|
+
## Known limitations
|
|
633
|
+
|
|
634
|
+
Current limitations are documented instead of hidden:
|
|
635
|
+
|
|
636
|
+
- StructuralProvider and DependencyDocsProvider are not implemented yet;
|
|
637
|
+
- deterministic CI fixtures prove the bundled Skill catalog can satisfy the tested scenarios, but agent-real selection scoring remains a separate evaluation;
|
|
638
|
+
- human attestation can verify an interactive approval flow but cannot cryptographically prove a specific physical human was at the keyboard;
|
|
639
|
+
- prompt-injection phrase scanning is currently English-focused and non-exhaustive;
|
|
640
|
+
- SotuRail does not prove behavior in an external production system unless that observation is captured as evidence.
|
|
51
641
|
|
|
52
642
|
## Documentation
|
|
53
643
|
|
|
644
|
+
Recommended entry points:
|
|
645
|
+
|
|
54
646
|
- [Quickstart](docs/getting-started/quickstart.md)
|
|
55
|
-
- [
|
|
56
|
-
- [
|
|
57
|
-
- [
|
|
58
|
-
- [
|
|
59
|
-
- [
|
|
647
|
+
- [Usage](docs/getting-started/usage.md)
|
|
648
|
+
- [First Real Workflow](docs/getting-started/first-real-workflow.md)
|
|
649
|
+
- [v1.6 Commands](docs/reference/commands/v1.6-commands.md)
|
|
650
|
+
- [Agent-Native Semantic Architecture](docs/architecture/agent-native-semantic-architecture.md)
|
|
651
|
+
- [Verified Control Plane](docs/architecture/verified-control-plane.md)
|
|
652
|
+
- [Contracts and Verification](docs/architecture/contracts-and-verification.md)
|
|
653
|
+
- [Provider Architecture](docs/architecture/provider-architecture.md)
|
|
654
|
+
- [Skills](docs/rails/skills/skill-rail.md)
|
|
655
|
+
- [MCP](docs/rails/hosts/mcp.md)
|
|
656
|
+
- [Threat Model](docs/security/threat-model.md)
|
|
60
657
|
- [Roadmap](ROADMAP.md)
|
|
658
|
+
- [v1.6 Release Notes](docs/releases/RELEASE_NOTES_v1.6.0.md)
|
|
659
|
+
- [Português](docs/pt-BR/)
|
|
61
660
|
|
|
62
|
-
|
|
661
|
+
For release-by-release history, use [CHANGELOG.md](CHANGELOG.md) and [release notes](docs/releases/).
|
|
662
|
+
|
|
663
|
+
## Development
|
|
63
664
|
|
|
64
665
|
```bash
|
|
65
666
|
npm ci
|
|
@@ -70,10 +671,30 @@ npm run docs:check
|
|
|
70
671
|
npm audit
|
|
71
672
|
node dist/cli.js mcp smoke
|
|
72
673
|
node dist/cli.js self architecture --check
|
|
73
|
-
cargo test --manifest-path native/soturail-native/Cargo.toml
|
|
74
674
|
npm run release:check
|
|
75
675
|
```
|
|
76
676
|
|
|
677
|
+
Optional native validation:
|
|
678
|
+
|
|
679
|
+
```bash
|
|
680
|
+
cargo test --manifest-path native/soturail-native/Cargo.toml
|
|
681
|
+
```
|
|
682
|
+
|
|
683
|
+
## Project direction
|
|
684
|
+
|
|
685
|
+
Post-v1.6 work focuses on adding **evidence-producing capabilities**, not duplicating semantic reasoning that the agent already performs well.
|
|
686
|
+
|
|
687
|
+
Near-term directions include:
|
|
688
|
+
|
|
689
|
+
- StructuralProvider / impact analysis;
|
|
690
|
+
- DependencyDocsProvider;
|
|
691
|
+
- richer Evidence Receipts and re-attestation;
|
|
692
|
+
- Context Spine / escalation;
|
|
693
|
+
- knowledge drift propagation;
|
|
694
|
+
- optional local indexes/providers when benchmarks justify them.
|
|
695
|
+
|
|
696
|
+
See [ROADMAP.md](ROADMAP.md).
|
|
697
|
+
|
|
77
698
|
## License
|
|
78
699
|
|
|
79
700
|
Apache-2.0. See [LICENSE](LICENSE).
|