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 CHANGED
@@ -1,6 +1,6 @@
1
1
  MIT License
2
2
 
3
- Copyright (c) 2026 Vequan Clark
3
+ Copyright (c) 2026 Aperta contributors
4
4
 
5
5
  Permission is hereby granted, free of charge, to any person obtaining a copy
6
6
  of this software and associated documentation files (the "Software"), to deal
package/README.md CHANGED
@@ -1,67 +1,231 @@
1
- # Aperta
2
-
3
- **Your code works. Could you explain why?**
4
-
5
- AI coding agents make it easy to ship code you cannot explain. Aperta measures
6
- that comprehension gap before it becomes a debugging, maintenance, or ownership
7
- problem. It records what changed, asks for a quick self-rating, and shows where
8
- the codebase has outrun your understanding. It records explanations but does not
9
- grade them.
10
-
11
- The current 1.0 beta combines a provider-neutral coding-agent harness with a
12
- local comprehension system. It observes changes from any editor or agent,
13
- executes bounded work in disposable Git worktrees, verifies outcomes, and turns
14
- the resulting evidence into review sessions, a learning journal, and a durable
15
- Proof Graph.
16
-
17
- The local Vue dashboard includes:
18
-
19
- - Agent Workbench with persistent multi-turn conversations
20
- - Aperta Native, Cursor Agent, Claude Code, and OpenCode execution runtimes
21
- - OpenAI, Anthropic, Google Gemini, DeepSeek, Ollama, OpenRouter, Groq, and
22
- OpenAI-compatible model profiles
23
- - staged, unstaged, and untracked Git views
24
- - syntax-highlighted source, diffs, agent responses, and execution output
25
- - repository, impact, and behavioral Proof Graphs
26
- - guided ownership sessions, Review Queue, Learn Next, and Learning Journal
27
- - local harness reliability, verification, repair, and trusted-keep metrics
28
-
29
- Repository evidence stays in private per-user storage unless the user explicitly
30
- invokes a configured model. Credentials never enter project memory.
31
-
32
- ## How the harness is divided
33
-
34
- Aperta deliberately separates three responsibilities:
35
-
36
- - **Model APIs reason.** A configured model can plan, explain, and choose from
37
- Aperta's bounded tools.
38
- - **Agent runtimes execute.** Aperta Native, Cursor Agent, Claude Code, or
39
- OpenCode can inspect and edit an isolated workspace. External runtimes keep
40
- their own authentication and model configuration.
41
- - **Aperta owns trust.** Aperta selects the skill contract, constrains
42
- capabilities, captures actions, runs deterministic checks and localhost
43
- probes, controls promotion, and records proof and learning evidence.
44
-
45
- Changing the runtime or model never gives it authority to declare its own work
46
- correct or understood.
47
-
48
- ## Aperta Coach (optional AI)
49
-
50
- Aperta Coach turns the deterministic ownership brief into an adaptive change
51
- debrief. It can orient the maintainer and personalize trace, failure-mode,
52
- evidence, and debugging questions. Model output remains visibly AI-generated:
53
- it cannot change Trust Kernel relationships, mark runtime evidence as proven,
54
- grade prose, or award ownership. Returned file citations are accepted only when
55
- they match files in the captured change.
56
-
57
- Coach is provider-neutral and configured through environment variables so API
58
- keys never enter the project config or ledger. It supports native OpenAI,
59
- Anthropic, Google Gemini, DeepSeek, and Ollama APIs; OpenRouter and Groq
60
- gateways; and any OpenAI-compatible HTTPS or local endpoint, including LM
61
- Studio.
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
- # OpenAI (OPENAI_API_KEY is read automatically)
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 provider
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
- `APERTA_AI_MODEL` overrides every provider default. Remote custom endpoints
101
- must use HTTPS; plaintext HTTP is accepted only for loopback model servers.
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
- ```sh
223
- npm install --global aperta-cli@beta
224
- ```
260
+ </details>
225
261
 
226
- To develop Aperta itself from source instead:
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
- Initialize the repository you want Aperta to track:
274
+ Useful commands:
238
275
 
239
276
  ```sh
240
- cd /path/to/your/repository
241
- aperta init
242
- aperta status
243
- aperta dashboard
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
- `aperta init` starts the universal observer automatically. On macOS it installs
247
- a private per-project login service, so observation returns after login and is
248
- restarted if the process crashes. It captures stable staged, unstaged,
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
- The repository-level `vercel.json` deploys `marketing/dist`, so the repository
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
- ## Recommended agent loop
296
+ ## Built for builders who want to remain responsible
285
297
 
286
- Wrap the coding agent once and work normally inside it:
287
-
288
- ```sh
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
- ## Data
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
- Aperta keeps repository identity separate from private developer memory. The
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
- This private directory is outside the Git working tree. Initializing an older
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).