aperta-cli 1.0.0-beta.1 → 1.0.0-beta.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +1 -1
- package/README.md +257 -332
- package/dashboard/dist/assets/index-BIU9XLtE.css +1 -0
- package/dashboard/dist/assets/index-DHF2W8ef.js +11 -0
- package/dashboard/dist/index.html +2 -2
- package/dist-cli/src/agent-harness.js +1 -1
- package/dist-cli/src/agent-harness.js.map +1 -1
- package/dist-cli/src/dashboard-data.js +5 -3
- package/dist-cli/src/dashboard-data.js.map +1 -1
- package/dist-cli/src/dashboard-server.js +52 -4
- package/dist-cli/src/dashboard-server.js.map +1 -1
- package/dist-cli/src/harness-intelligence.js +3 -0
- package/dist-cli/src/harness-intelligence.js.map +1 -1
- package/dist-cli/src/semantic.js +5 -1
- package/dist-cli/src/semantic.js.map +1 -1
- package/dist-cli/src/storage.js +18 -0
- package/dist-cli/src/storage.js.map +1 -1
- package/package.json +6 -4
- package/dashboard/dist/assets/index-CWL1aA6j.js +0 -11
- package/dashboard/dist/assets/index-D0Ru46BW.css +0 -1
package/LICENSE
CHANGED
package/README.md
CHANGED
|
@@ -1,67 +1,231 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
Aperta
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
1
|
+
<h1 align="center">Aperta</h1>
|
|
2
|
+
|
|
3
|
+
<p align="center"><strong>The comprehension harness for AI-generated code.</strong></p>
|
|
4
|
+
|
|
5
|
+
<p align="center">
|
|
6
|
+
Agents help you write code faster. Aperta helps you prove it works, understand
|
|
7
|
+
why, and retain ownership after the agent leaves.
|
|
8
|
+
</p>
|
|
9
|
+
|
|
10
|
+
<p align="center">
|
|
11
|
+
<a href="https://aperta-six.vercel.app/">Website</a> ·
|
|
12
|
+
<a href="https://www.npmjs.com/package/aperta-cli">npm</a> ·
|
|
13
|
+
<a href="https://github.com/Vequan23/aperta/issues">Issues</a> ·
|
|
14
|
+
<a href="CONTRIBUTING.md">Contributing</a>
|
|
15
|
+
</p>
|
|
16
|
+
|
|
17
|
+
<p align="center">
|
|
18
|
+
<a href="https://www.npmjs.com/package/aperta-cli"><img alt="npm beta" src="https://img.shields.io/npm/v/aperta-cli/beta?label=npm%20beta&color=1686cc"></a>
|
|
19
|
+
<a href="https://github.com/Vequan23/aperta/actions/workflows/ci.yml"><img alt="CI" src="https://github.com/Vequan23/aperta/actions/workflows/ci.yml/badge.svg"></a>
|
|
20
|
+
<a href="LICENSE"><img alt="MIT license" src="https://img.shields.io/badge/license-MIT-blue.svg"></a>
|
|
21
|
+
<img alt="Node 24 LTS recommended" src="https://img.shields.io/badge/node-24%20LTS%20recommended-3c873a">
|
|
22
|
+
</p>
|
|
23
|
+
|
|
24
|
+
> [!IMPORTANT]
|
|
25
|
+
> **Public beta:** Aperta is ready for evaluation on real local projects. Its
|
|
26
|
+
> interfaces and evidence schema may evolve before the first stable release.
|
|
27
|
+
|
|
28
|
+
## Code generation solved output. Aperta solves ownership.
|
|
29
|
+
|
|
30
|
+
AI agents can produce a convincing patch in minutes. They do not automatically
|
|
31
|
+
give a maintainer the evidence or understanding needed to safely own that patch
|
|
32
|
+
for years.
|
|
33
|
+
|
|
34
|
+
Aperta closes that gap. It is a model-agnostic coding-agent harness and local
|
|
35
|
+
learning system that:
|
|
36
|
+
|
|
37
|
+
- captures staged, unstaged, untracked, human, and agent-authored changes;
|
|
38
|
+
- runs agent work in disposable Git worktrees instead of your live repository;
|
|
39
|
+
- verifies results with project checks, runtime observations, and bounded probes;
|
|
40
|
+
- connects claims, code, tests, actions, and human understanding in a Proof Graph;
|
|
41
|
+
- turns risky changes into focused ownership sessions and scheduled recall; and
|
|
42
|
+
- keeps private developer memory outside the repository by default.
|
|
43
|
+
|
|
44
|
+
**Aperta does not grade prose or pretend an LLM can certify understanding.** It
|
|
45
|
+
records evidence, exposes uncertainty, and leaves the final judgment with the
|
|
46
|
+
person responsible for the software.
|
|
47
|
+
|
|
48
|
+
If that is the future you want for AI-assisted development, consider starring
|
|
49
|
+
the repository—it helps other builders find the project.
|
|
50
|
+
|
|
51
|
+
## Try it in 60 seconds
|
|
52
|
+
|
|
53
|
+
Requires Git and a supported Node.js LTS release. **Node 24 LTS is recommended**;
|
|
54
|
+
Node 22.12 or newer remains supported through its maintenance window.
|
|
55
|
+
|
|
56
|
+
```sh
|
|
57
|
+
npm install --global aperta-cli@beta
|
|
58
|
+
|
|
59
|
+
cd /path/to/your/repository
|
|
60
|
+
aperta init
|
|
61
|
+
aperta dashboard
|
|
62
|
+
```
|
|
63
|
+
|
|
64
|
+
`aperta init` starts the local observer. The dashboard opens a repository
|
|
65
|
+
workspace containing the Agent Workbench, Git changes, Review Queue, Proof
|
|
66
|
+
Graph, Learning Journal, and Harness Health.
|
|
67
|
+
|
|
68
|
+
Run an existing coding agent through Aperta:
|
|
62
69
|
|
|
63
70
|
```sh
|
|
64
|
-
|
|
71
|
+
aperta run --intent "Add passwordless login" -- opencode
|
|
72
|
+
```
|
|
73
|
+
|
|
74
|
+
Or use Aperta Native from the Agent Workbench. The patch remains isolated until
|
|
75
|
+
you review its changes and evidence and explicitly promote it.
|
|
76
|
+
|
|
77
|
+
## The trust and learning loop
|
|
78
|
+
|
|
79
|
+
```mermaid
|
|
80
|
+
flowchart LR
|
|
81
|
+
change["Any code change"] --> capture["Capture the exact diff"]
|
|
82
|
+
capture --> impact["Map impact and risk"]
|
|
83
|
+
impact --> verify["Run checks and probes"]
|
|
84
|
+
verify --> graph["Update the Proof Graph"]
|
|
85
|
+
graph --> own["Demonstrate ownership"]
|
|
86
|
+
own --> journal["Retain and revisit knowledge"]
|
|
87
|
+
journal --> change
|
|
88
|
+
```
|
|
89
|
+
|
|
90
|
+
Every later change can invalidate only the claims it touches. Aperta preserves
|
|
91
|
+
useful evidence while making stale certainty visible.
|
|
92
|
+
|
|
93
|
+
## Why this is not just another agent wrapper
|
|
94
|
+
|
|
95
|
+
| | Typical coding-agent loop | Aperta |
|
|
96
|
+
| --- | --- | --- |
|
|
97
|
+
| Primary goal | Produce a plausible answer or patch | Produce reviewable code, proof, and understanding |
|
|
98
|
+
| Workspace | Often edits the live tree | Uses a disposable Git worktree until promotion |
|
|
99
|
+
| Verification | Agent reports success | Harness runs deterministic checks and captures output |
|
|
100
|
+
| Trust | Model evaluates its own work | Aperta owns the promotion gate and evidence model |
|
|
101
|
+
| Memory | Conversation history | Local repository evidence and a durable Proof Graph |
|
|
102
|
+
| Learning | Incidental | Review Queue, ownership sessions, Learn Next, and journal |
|
|
103
|
+
| Provider choice | Commonly coupled to one vendor | Model- and runtime-neutral |
|
|
104
|
+
| Privacy | Often cloud-first | Private per-user storage outside Git |
|
|
105
|
+
|
|
106
|
+
## What you get
|
|
107
|
+
|
|
108
|
+
### A real agent workbench
|
|
109
|
+
|
|
110
|
+
Persistent, multi-turn agent conversations with plans, bounded tools, readable
|
|
111
|
+
activity, syntax-highlighted responses, isolated patches, checks, repair loops,
|
|
112
|
+
and explicit promotion. Read-only requests discard unexpected runtime changes.
|
|
113
|
+
|
|
114
|
+
### Universal change capture
|
|
115
|
+
|
|
116
|
+
Aperta observes stable Git-visible changes regardless of whether they came from
|
|
117
|
+
a human, editor, script, or agent. Attribution adds evidence; it is never a
|
|
118
|
+
requirement for review.
|
|
119
|
+
|
|
120
|
+
### Behavioral Proof Graph
|
|
121
|
+
|
|
122
|
+
The graph connects behavior claims to implementation files, tests, runtime
|
|
123
|
+
observations, selected skill contracts, agent actions, explanations, and human
|
|
124
|
+
ownership evidence. Claims remain visibly **proven**, **understood**,
|
|
125
|
+
**supported**, **unproven**, **stale**, or **regressed**.
|
|
126
|
+
|
|
127
|
+
### A comprehension loop that compounds
|
|
128
|
+
|
|
129
|
+
The Review Queue turns a captured change into a risk-ranked Change Story.
|
|
130
|
+
Ownership sessions ask trace, failure-mode, evidence, and debugging questions
|
|
131
|
+
grounded in the actual diff. Completed sessions enter the Learning Journal and
|
|
132
|
+
return through Learn Next after one, three, or seven days—or immediately when
|
|
133
|
+
connected code changes again.
|
|
134
|
+
|
|
135
|
+
### Harness intelligence
|
|
136
|
+
|
|
137
|
+
Harness Health measures first-pass verification, repair recovery, tool
|
|
138
|
+
reliability, promotion rate, provider latency, structured error classes, and an
|
|
139
|
+
approximate Trusted Keep Rate. Harness defects stay distinguishable from model,
|
|
140
|
+
tool, and project failures.
|
|
141
|
+
|
|
142
|
+
## Models reason. Runtimes execute. Aperta owns trust.
|
|
143
|
+
|
|
144
|
+
Aperta intentionally separates these responsibilities:
|
|
145
|
+
|
|
146
|
+
| Layer | Responsibility | Current support |
|
|
147
|
+
| --- | --- | --- |
|
|
148
|
+
| **Model APIs** | Planning, reasoning, explanation, coaching | OpenAI, Anthropic, Google Gemini, DeepSeek, OpenRouter, Groq, Ollama, LM Studio, OpenAI-compatible endpoints |
|
|
149
|
+
| **Agent runtimes** | Repository inspection, edits, and tool execution | Aperta Native, Claude Code, OpenCode, Cursor Agent |
|
|
150
|
+
| **Aperta** | Skill selection, capabilities, isolation, verification, promotion, evidence, and learning | Provider-neutral Trust Kernel |
|
|
151
|
+
|
|
152
|
+
Changing the model or runtime never gives it authority to declare its own work
|
|
153
|
+
correct, proven, or understood.
|
|
154
|
+
|
|
155
|
+
## Private by architecture
|
|
156
|
+
|
|
157
|
+
The repository stores only a non-sensitive identity pointer:
|
|
158
|
+
|
|
159
|
+
```text
|
|
160
|
+
.comprehension/
|
|
161
|
+
├── project.json
|
|
162
|
+
└── .gitignore
|
|
163
|
+
```
|
|
164
|
+
|
|
165
|
+
Private developer memory lives outside the Git working tree:
|
|
166
|
+
|
|
167
|
+
```text
|
|
168
|
+
~/.aperta/repositories/<project-id>/
|
|
169
|
+
├── config.json
|
|
170
|
+
├── ledger.jsonl
|
|
171
|
+
└── cache/
|
|
172
|
+
```
|
|
173
|
+
|
|
174
|
+
Raw prompts, transcripts, explanations, learning answers, diffs, logs, and the
|
|
175
|
+
integrity-chained evidence ledger are not team-visible repository files. Model
|
|
176
|
+
credentials never enter project memory. On macOS, keys entered in Model
|
|
177
|
+
Settings are stored in Keychain and are never returned to the browser.
|
|
178
|
+
|
|
179
|
+
Evidence is sent to a configured provider only for an explicit model action.
|
|
180
|
+
Aperta does not export source, prompts, credentials, or repository evidence to
|
|
181
|
+
an analytics service.
|
|
182
|
+
|
|
183
|
+
## Safety boundaries
|
|
184
|
+
|
|
185
|
+
The Agent Workbench is intentionally bounded:
|
|
186
|
+
|
|
187
|
+
- agent edits occur in a disposable Git worktree;
|
|
188
|
+
- ignored files, credential-bearing files, `.git`, and `.comprehension` are blocked;
|
|
189
|
+
- existing files must be read before they can be rewritten;
|
|
190
|
+
- native runs have no arbitrary remote-network tool;
|
|
191
|
+
- project commands come from allowlisted, detected checks;
|
|
192
|
+
- localhost services and HTTP probes have explicit lifecycle controls;
|
|
193
|
+
- output is bounded and common secrets are redacted;
|
|
194
|
+
- failing checks block promotion; and
|
|
195
|
+
- promotion fails if the real repository changed after the run began.
|
|
196
|
+
|
|
197
|
+
Aperta currently caps a native implementation run at 48 actions, 20 writes,
|
|
198
|
+
300 KB per file, and 1 MB of total writes. These constraints are harness policy,
|
|
199
|
+
not suggestions sent to the model.
|
|
200
|
+
|
|
201
|
+
Read [SECURITY.md](SECURITY.md) before using Aperta with a shared or sensitive
|
|
202
|
+
repository. Report vulnerabilities privately through GitHub Security
|
|
203
|
+
Advisories.
|
|
204
|
+
|
|
205
|
+
## Language and project support
|
|
206
|
+
|
|
207
|
+
The universal Git workflow works for any text-based repository. Deeper evidence
|
|
208
|
+
is added only where Aperta has a real adapter:
|
|
209
|
+
|
|
210
|
+
| Capability | Support |
|
|
211
|
+
| --- | --- |
|
|
212
|
+
| Project checks | Maven, Gradle, npm, pnpm, Yarn, Python, Go, Cargo |
|
|
213
|
+
| Semantic analysis | Java; JavaScript/TypeScript; JSX/TSX; Vue SFC scripts |
|
|
214
|
+
| Safe syntax rendering | Java, JS/TS, JSON, XML, YAML, properties, TOML, shell-like files |
|
|
215
|
+
| Runtime probes | Bounded localhost HTTP and detected local services |
|
|
216
|
+
| Executable Probe Lab | Initial Spring Security JWT behaviors |
|
|
217
|
+
|
|
218
|
+
Unsupported languages stay useful at the Git, diff, review, ownership, and
|
|
219
|
+
journal layers. Aperta does not claim regex provides compiler-level certainty.
|
|
220
|
+
|
|
221
|
+
<details>
|
|
222
|
+
<summary><strong>Configure an optional model provider</strong></summary>
|
|
223
|
+
|
|
224
|
+
The dashboard's **Model Settings** page is the recommended path. Environment
|
|
225
|
+
variables are also supported:
|
|
226
|
+
|
|
227
|
+
```sh
|
|
228
|
+
# OpenAI
|
|
65
229
|
export OPENAI_API_KEY="..."
|
|
66
230
|
|
|
67
231
|
# Anthropic
|
|
@@ -74,156 +238,29 @@ export APERTA_AI_PROVIDER="google"
|
|
|
74
238
|
export GOOGLE_API_KEY="..."
|
|
75
239
|
export APERTA_AI_MODEL="your-model-id"
|
|
76
240
|
|
|
77
|
-
# DeepSeek
|
|
78
|
-
export APERTA_AI_PROVIDER="deepseek"
|
|
241
|
+
# DeepSeek, OpenRouter, or Groq
|
|
242
|
+
export APERTA_AI_PROVIDER="deepseek" # or openrouter / groq
|
|
79
243
|
export DEEPSEEK_API_KEY="..."
|
|
80
244
|
export APERTA_AI_MODEL="your-model-id"
|
|
81
245
|
|
|
82
|
-
# OpenRouter or Groq
|
|
83
|
-
export APERTA_AI_PROVIDER="openrouter" # or groq
|
|
84
|
-
export OPENROUTER_API_KEY="..." # or GROQ_API_KEY
|
|
85
|
-
export APERTA_AI_MODEL="provider/model-id"
|
|
86
|
-
|
|
87
246
|
# Local Ollama — no API key required
|
|
88
247
|
export APERTA_AI_PROVIDER="ollama"
|
|
89
248
|
export APERTA_AI_MODEL="qwen2.5-coder"
|
|
90
249
|
|
|
91
|
-
# Any OpenAI-compatible
|
|
250
|
+
# Any OpenAI-compatible endpoint
|
|
92
251
|
export APERTA_AI_PROVIDER="openai-compatible"
|
|
93
252
|
export APERTA_AI_BASE_URL="https://provider.example/v1"
|
|
94
253
|
export APERTA_AI_MODEL="provider/model-id"
|
|
95
254
|
export APERTA_AI_API_KEY="..."
|
|
96
|
-
|
|
97
|
-
aperta dashboard
|
|
98
255
|
```
|
|
99
256
|
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
The evidence bundle is sent to the configured provider only when the user
|
|
103
|
-
explicitly clicks **Personalize this debrief**.
|
|
104
|
-
|
|
105
|
-
The dashboard also provides **Model Settings** for reusable provider profiles.
|
|
106
|
-
Profile metadata is stored globally in `~/.aperta/settings.json`, never in a
|
|
107
|
-
repository. On macOS, supplied API keys are stored in Keychain and never
|
|
108
|
-
returned to the browser; environment variables remain supported for automated
|
|
109
|
-
and cross-platform use.
|
|
110
|
-
|
|
111
|
-
## Repository comprehension explorer
|
|
112
|
-
|
|
113
|
-
The Repository Map is a navigable tree of Git-visible tracked and untracked
|
|
114
|
-
files. Ignored files—including ignored `.env` files—are excluded at the server
|
|
115
|
-
boundary. Selecting a file opens a bounded, syntax-highlighted read-only source
|
|
116
|
-
view with its confidence, authorship ratio, captured churn, and ownership
|
|
117
|
-
history. Binary files are identified without rendering their contents, and
|
|
118
|
-
text previews are limited to 1 MB.
|
|
119
|
-
|
|
120
|
-
## Agent Workbench
|
|
121
|
-
|
|
122
|
-
The Agent Workbench is Aperta's controlled action plane. An active model profile
|
|
123
|
-
can run a bounded implementation loop inside a disposable Git worktree using
|
|
124
|
-
repository list, read, search, and write tools plus allowlisted project checks,
|
|
125
|
-
detected local-service startup, and localhost HTTP probes. The agent has no
|
|
126
|
-
arbitrary shell or remote-network tool and cannot access ignored files,
|
|
127
|
-
credential-bearing files, `.git`, or `.comprehension`. Existing files must be
|
|
128
|
-
read before they can be rewritten; runs are capped at 48 implementation
|
|
129
|
-
actions, 20 writes, 300 KB per file, and 1 MB of total writes.
|
|
130
|
-
|
|
131
|
-
Alternatively, Aperta can delegate the isolated execution loop to an installed
|
|
132
|
-
Cursor Agent, Claude Code, or OpenCode CLI. Aperta still owns the disposable
|
|
133
|
-
workspace, exact changed-file capture, verification loop, action record, and
|
|
134
|
-
promotion gate. Read-only requests discard unexpected runtime mutations.
|
|
135
|
-
|
|
136
|
-
Completed runs produce a retained local action record and a syntax-highlighted
|
|
137
|
-
patch. Aperta detects allowlisted project checks for Maven, Gradle, Node package
|
|
138
|
-
scripts, Python, Go, and Cargo, runs them inside the disposable worktree, and
|
|
139
|
-
gives the agent up to three bounded attempts to repair failures. Changes,
|
|
140
|
-
verification output, and live activity have separate review surfaces, and a
|
|
141
|
-
run with failing checks cannot be promoted. Analysis-only runs use a dedicated
|
|
142
|
-
readable response view instead of pretending an empty patch exists.
|
|
143
|
-
|
|
144
|
-
The source repository remains unchanged until the maintainer checks the
|
|
145
|
-
promotion acknowledgement and explicitly applies the patch. Before promotion,
|
|
146
|
-
Aperta compares the real repository tree with the run's starting tree and
|
|
147
|
-
refuses to apply over newer work. A promoted patch then enters the normal Git
|
|
148
|
-
observer, proof, ownership-session, journal, and recall workflow.
|
|
149
|
-
|
|
150
|
-
Every run also carries a durable execution contract: goal, ordered plan,
|
|
151
|
-
constraints, risks, acceptance criteria, evidence status, deterministic
|
|
152
|
-
critique, and promotion decision. Aperta records the pre-change project baseline
|
|
153
|
-
separately from post-change checks, so a green result cannot hide a repository
|
|
154
|
-
that was already failing. Passing generic checks proves project health; it does
|
|
155
|
-
not by itself prove the user's requested behavior.
|
|
156
|
-
|
|
157
|
-
## Skill Contracts
|
|
158
|
-
|
|
159
|
-
Every run receives a deterministic, provider-neutral Skill Contract before a
|
|
160
|
-
model or external runtime acts. The current built-in contracts cover debugging,
|
|
161
|
-
project verification, runtime observation, implementation, code explanation,
|
|
162
|
-
and repository exploration. Each contract declares:
|
|
163
|
-
|
|
164
|
-
- the capabilities the runtime may use
|
|
165
|
-
- ordered execution phases
|
|
166
|
-
- required proof before completion
|
|
167
|
-
- learning objectives that feed the understanding loop
|
|
168
|
-
|
|
169
|
-
Models may refine a plan, but they cannot remove the skill's required proof or
|
|
170
|
-
expand its tool authority. The selected skill is visible in the Workbench and
|
|
171
|
-
stored as evidence in the Proof Graph.
|
|
172
|
-
|
|
173
|
-
## Git and universal capture
|
|
174
|
-
|
|
175
|
-
Aperta's observer tracks stable staged, unstaged, untracked, and committed
|
|
176
|
-
changes regardless of whether they came from a human, an IDE, or an agent. The
|
|
177
|
-
Git Changes view shows the current working tree independently from captured
|
|
178
|
-
learning sessions. Agent attribution is additional evidence, not a requirement
|
|
179
|
-
for the comprehension workflow.
|
|
180
|
-
|
|
181
|
-
## Harness Intelligence
|
|
182
|
-
|
|
183
|
-
Harness Health turns retained local runs into an improvement loop. It measures
|
|
184
|
-
first-pass verification, repair recovery, tool reliability, promotion rate,
|
|
185
|
-
provider latency, structured error classes, and an approximate Trusted Keep
|
|
186
|
-
Rate for promoted additions that remain in the working repository. Results are
|
|
187
|
-
broken down by provider, model, and bounded tool action so model and harness
|
|
188
|
-
changes can be compared instead of judged by anecdote.
|
|
189
|
-
|
|
190
|
-
Telemetry contains run metadata, timings, bounded error messages, and patch-line
|
|
191
|
-
survival counts. It is computed locally; Aperta does not export source code,
|
|
192
|
-
prompts, credentials, or repository evidence to an analytics service. Unknown
|
|
193
|
-
errors are surfaced as harness defects rather than silently folded into an
|
|
194
|
-
"agent failed" bucket.
|
|
195
|
-
|
|
196
|
-
The Impact Graph connects changed and removed code surfaces to repository
|
|
197
|
-
callers, imported dependencies, Spring configuration, API entry points, and
|
|
198
|
-
tests. It distinguishes structural evidence from unproven behavior and warns
|
|
199
|
-
when a saved explanation overlaps code that changed again. The analyzers are
|
|
200
|
-
language-specific and pluggable; the current beta starts with Java and
|
|
201
|
-
TypeScript rather
|
|
202
|
-
than claiming regex can provide compiler-level semantics for every language.
|
|
203
|
-
|
|
204
|
-
The repository Proof Graph unifies claims from captured changes and agent runs
|
|
205
|
-
with the evidence that supports them: selected skills, diffs, checks, runtime
|
|
206
|
-
observations, human explanations, and ownership reviews. A claim can be proven,
|
|
207
|
-
understood, supported, unproven, stale, or regressed. Later changes invalidate
|
|
208
|
-
only connected claims, preserving an auditable answer to both “does this work?”
|
|
209
|
-
and “can the maintainer explain it?”
|
|
210
|
-
|
|
211
|
-
The Proof Engine detects Maven, Gradle, npm, pnpm, or Yarn from project-owned
|
|
212
|
-
manifests and wrappers. From the Impact Graph, a developer can explicitly run
|
|
213
|
-
the relevant changed tests, retain the bounded result in the append-only local
|
|
214
|
-
ledger, and see graph surfaces move from inferred or unproven to proven—or to
|
|
215
|
-
regressed when the runner fails. Aperta also keeps uncovered behaviors visible
|
|
216
|
-
as proposed probes instead of treating a green test command as universal proof.
|
|
217
|
-
|
|
218
|
-
## Install and run
|
|
219
|
-
|
|
220
|
-
Requires Node.js 22.6 or newer and Git.
|
|
257
|
+
Remote custom endpoints must use HTTPS. Plain HTTP is accepted only for
|
|
258
|
+
loopback model servers. `APERTA_AI_MODEL` overrides provider defaults.
|
|
221
259
|
|
|
222
|
-
|
|
223
|
-
npm install --global aperta-cli@beta
|
|
224
|
-
```
|
|
260
|
+
</details>
|
|
225
261
|
|
|
226
|
-
|
|
262
|
+
<details>
|
|
263
|
+
<summary><strong>Run Aperta from source</strong></summary>
|
|
227
264
|
|
|
228
265
|
```sh
|
|
229
266
|
git clone https://github.com/Vequan23/aperta.git
|
|
@@ -234,153 +271,41 @@ npm run build
|
|
|
234
271
|
npm link
|
|
235
272
|
```
|
|
236
273
|
|
|
237
|
-
|
|
274
|
+
Useful commands:
|
|
238
275
|
|
|
239
276
|
```sh
|
|
240
|
-
|
|
241
|
-
aperta
|
|
242
|
-
aperta status
|
|
243
|
-
aperta
|
|
277
|
+
aperta init # initialize and start observing the current repository
|
|
278
|
+
aperta dashboard # open the local dashboard
|
|
279
|
+
aperta status # inspect observer and repository state
|
|
280
|
+
aperta doctor # validate observer, ledger, adapters, and release readiness
|
|
281
|
+
aperta start # start the observer explicitly
|
|
282
|
+
aperta stop # stop the observer
|
|
244
283
|
```
|
|
245
284
|
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
untracked, and committed changes from any coding tool. Manage it explicitly with:
|
|
250
|
-
|
|
251
|
-
```sh
|
|
252
|
-
aperta start
|
|
253
|
-
aperta status
|
|
254
|
-
aperta stop
|
|
255
|
-
```
|
|
256
|
-
|
|
257
|
-
Changes are grouped after a short quiet period rather than recorded once per
|
|
258
|
-
keystroke. Agent adapters add model, prompt, and session provenance when it is
|
|
259
|
-
available; unattributed activity remains explicitly unknown.
|
|
260
|
-
|
|
261
|
-
Every initialized repository is added to the local `~/.aperta/projects.json`
|
|
262
|
-
registry. The dashboard project picker can switch between registered
|
|
263
|
-
repositories without exposing arbitrary filesystem browsing. Each project keeps
|
|
264
|
-
its own ledger, observer, branch state, queue, journal, and ownership history.
|
|
265
|
-
|
|
266
|
-
For dashboard development with live reload, run `npm run dev` from the cloned
|
|
267
|
-
Aperta repository and open the local URL Vite prints.
|
|
268
|
-
|
|
269
|
-
The standalone Vue marketing site lives in `marketing/` and uses the same Snow
|
|
270
|
-
Leopard/Aqua visual language as the product:
|
|
285
|
+
For dashboard development, run `npm run dev`. The standalone Vue marketing site
|
|
286
|
+
lives in `marketing/` and uses the published
|
|
287
|
+
[OSX Components](https://github.com/Vequan23/osx-components) package:
|
|
271
288
|
|
|
272
289
|
```sh
|
|
273
290
|
npm run dev:marketing
|
|
274
291
|
npm run build:marketing
|
|
275
292
|
```
|
|
276
293
|
|
|
277
|
-
|
|
278
|
-
can be imported directly into Vercel without additional build configuration.
|
|
279
|
-
|
|
280
|
-
Automation can avoid interactive prompts with `aperta capture --ai --score 2`.
|
|
281
|
-
Interactive use captures authorship and confidence with one keystroke; confidence
|
|
282
|
-
times out after 15 seconds and Escape leaves it unrated.
|
|
294
|
+
</details>
|
|
283
295
|
|
|
284
|
-
##
|
|
296
|
+
## Built for builders who want to remain responsible
|
|
285
297
|
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
aperta run --intent "Add passwordless login" -- opencode
|
|
290
|
-
```
|
|
291
|
-
|
|
292
|
-
Aperta snapshots the repository before and after the agent session, attributes
|
|
293
|
-
only the resulting changes to AI, stores the exact patch as local evidence, and
|
|
294
|
-
refuses to record the same change twice. Existing dirty work is not incorrectly
|
|
295
|
-
included in the session. If you skip the confidence prompt, the change appears
|
|
296
|
-
in the dashboard review queue.
|
|
297
|
-
|
|
298
|
-
For non-interactive agents or scripts:
|
|
299
|
-
|
|
300
|
-
```sh
|
|
301
|
-
aperta run --intent "Repair CSV export" --score 2 -- your-agent-command --flags
|
|
302
|
-
```
|
|
298
|
+
Aperta is for developers and teams who want the leverage of coding agents
|
|
299
|
+
without surrendering the ability to explain, verify, maintain, and improve the
|
|
300
|
+
software those agents help create.
|
|
303
301
|
|
|
304
|
-
|
|
302
|
+
- Found a bug or rough edge? [Open an issue](https://github.com/Vequan23/aperta/issues).
|
|
303
|
+
- Have an idea for the harness or learning loop? Start a discussion in an issue.
|
|
304
|
+
- Want to contribute? Read [CONTRIBUTING.md](CONTRIBUTING.md) and the
|
|
305
|
+
[Code of Conduct](CODE_OF_CONDUCT.md).
|
|
306
|
+
- Want to help the project travel? **Star the repository and share the
|
|
307
|
+
[product site](https://aperta-six.vercel.app/).**
|
|
305
308
|
|
|
306
|
-
|
|
307
|
-
repository contains only a safe pointer:
|
|
308
|
-
|
|
309
|
-
```text
|
|
310
|
-
.comprehension/
|
|
311
|
-
├── project.json
|
|
312
|
-
└── .gitignore
|
|
313
|
-
```
|
|
314
|
-
|
|
315
|
-
Raw prompts, agent transcripts, explanations, learning answers, diffs, logs,
|
|
316
|
-
observer state, and the append-only evidence ledger live under:
|
|
317
|
-
|
|
318
|
-
```text
|
|
319
|
-
~/.aperta/repositories/<project-id>/
|
|
320
|
-
├── config.json
|
|
321
|
-
├── ledger.jsonl
|
|
322
|
-
└── cache/
|
|
323
|
-
```
|
|
309
|
+
## License
|
|
324
310
|
|
|
325
|
-
|
|
326
|
-
Aperta repository migrates its existing config, ledger, and cache without
|
|
327
|
-
discarding history. `aperta init` and `aperta doctor` warn when legacy private
|
|
328
|
-
files are still Git-tracked so the developer can commit their deletion and
|
|
329
|
-
audit earlier repository history before sharing it.
|
|
330
|
-
|
|
331
|
-
The ledger remains append-only and integrity-chained. Each line is one intent,
|
|
332
|
-
diff, confidence, explanation, ownership-evidence, proof, probe, review,
|
|
333
|
-
session-complete, or gate-bypass event. From the Review Queue, an ownership
|
|
334
|
-
session constructs a risk-ranked Change Story, shows the exact diff, collects
|
|
335
|
-
evidence-linked reasoning, and distinguishes demonstrated ownership from a
|
|
336
|
-
self-reported confidence claim without pretending an LLM can grade prose.
|
|
337
|
-
|
|
338
|
-
Every completed ownership session enters the Learning Journal and leaves the
|
|
339
|
-
immediate review queue, including an honest low-confidence session with evidence
|
|
340
|
-
but no separate prose note. Future session evidence, rating, explanation, and
|
|
341
|
-
completion records are appended as one durable ledger operation.
|
|
342
|
-
|
|
343
|
-
## Trust Kernel and semantic adapters
|
|
344
|
-
|
|
345
|
-
Aperta labels every graph claim as Git-observed, structurally inferred,
|
|
346
|
-
compiler-resolved, or runtime-proven. The JDK compiler adapter resolves
|
|
347
|
-
project-local Java symbols and call targets with annotation processing disabled.
|
|
348
|
-
The TypeScript compiler adapter covers JavaScript, TypeScript, JSX/TSX, and the
|
|
349
|
-
script portions of Vue single-file components. Compiler diagnostics downgrade
|
|
350
|
-
semantic coverage to partial instead of hiding missing dependencies or invalid
|
|
351
|
-
project configuration. Other languages retain the universal Git-level workflow
|
|
352
|
-
without invented symbol or call-graph certainty.
|
|
353
|
-
|
|
354
|
-
## MVP beta workflow
|
|
355
|
-
|
|
356
|
-
The 1.0 beta separates immediate change review from scheduled retrieval practice
|
|
357
|
-
in **Learn Next**. Completed sessions return after one, three, or seven days
|
|
358
|
-
based on confidence, and return immediately when a later capture touches the
|
|
359
|
-
same files. Proofs and probes run as visible cancelable jobs with a minimized
|
|
360
|
-
environment, bounded output, secret redaction, and explicit disclosure that the
|
|
361
|
-
disposable project copy is not network isolation. A successful Maven proof also
|
|
362
|
-
caches the resolved dependency classpath for deeper subsequent Java analysis.
|
|
363
|
-
|
|
364
|
-
Ledger writes are serialized across Aperta processes, runtime-validated, and
|
|
365
|
-
integrity-chained. Existing records remain readable as legacy entries. Run
|
|
366
|
-
`aperta doctor` from a tracked repository to check its observer, ledger,
|
|
367
|
-
semantic adapter, and release readiness. The installed CLI runs compiled
|
|
368
|
-
JavaScript; experimental TypeScript execution is used only by the source test
|
|
369
|
-
suite.
|
|
370
|
-
|
|
371
|
-
## Probe Lab
|
|
372
|
-
|
|
373
|
-
Aperta turns unproven Impact Graph paths into previewable executable
|
|
374
|
-
probes. A probe is selected by stable ID from Aperta's repository-aware catalog;
|
|
375
|
-
the browser never supplies source code or a command. Aperta copies the project
|
|
376
|
-
into a disposable directory, injects the generated test only there, runs the
|
|
377
|
-
allowlisted test runner, deletes the copy, and retains a bounded result plus a
|
|
378
|
-
hash of the generated source in the local ledger. Proven or disproven probes
|
|
379
|
-
update the graph verdicts. The first executable provider covers Spring Security
|
|
380
|
-
JWT expiry, issuer, and signature validation; endpoint authorization remains
|
|
381
|
-
explicitly blocked until a concrete protected route exists.
|
|
382
|
-
|
|
383
|
-
Diff evidence and generated probe previews use a safe token renderer with
|
|
384
|
-
language-aware highlighting for Java, TypeScript/JavaScript, JSON, XML, YAML,
|
|
385
|
-
properties, TOML, and shell-like files. Source is rendered as text tokens—not
|
|
386
|
-
injected HTML—so highlighting does not expand the dashboard's trust boundary.
|
|
311
|
+
MIT © Aperta contributors. See [LICENSE](LICENSE).
|