Skip to content

Commit 9e019f4

Browse files
committed
release: v0.8.0 — antigravity adapter + rich episodic logging
New: - Antigravity adapter (PR #9, @smartsastram) - Rich PostToolUse episodic logging for Claude Code (PR #8, @aliirz) plus 11 rounds of codex follow-ups for wrapper detection, regex validation, failure severity overrides - CHANGELOG.md covering every release (v0.1.0 through v0.8.0); "What's new" sections removed from README Wizard: - Banner + render VERSION bumped to 0.8.0 - Outro now points users at .agent/protocols/hook_patterns.json so they know they can tune the importance scorer for their stack
1 parent 96298eb commit 9e019f4

6 files changed

Lines changed: 225 additions & 73 deletions

File tree

CHANGELOG.md

Lines changed: 214 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,214 @@
1+
# Changelog
2+
3+
All notable changes to this project.
4+
5+
The format follows [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
6+
and the project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
7+
8+
## [0.8.0] — 2026-04-21
9+
10+
### Added
11+
- **Google Antigravity adapter.** `./install.sh antigravity` drops an
12+
`ANTIGRAVITY.md` into the project root so Antigravity agents pick up
13+
the portable brain in `.agent/`. Matches the pattern of the other
14+
root-instruction harnesses. Brings the supported-harness count to 9.
15+
Thanks to @smartsastram for the contribution (PR #9).
16+
- **Rich `PostToolUse` episodic logging for Claude Code.** New
17+
`.agent/harness/hooks/claude_code_post_tool.py` reads the JSON payload
18+
Claude Code sends via stdin and derives a real action label, importance
19+
score, and non-empty reflection per tool call. Replaces the old
20+
hardcoded `post-tool ok` that produced identical entries every session
21+
and left the dream cycle with nothing to cluster on. Ships with a
22+
54-test validation suite (`test_claude_code_hook.py`). Thanks to
23+
@aliirz for the contribution (PR #8).
24+
- **User-owned stack tuning via `hook_patterns.json`.** Drop your own
25+
high-stakes and medium-stakes command patterns in
26+
`.agent/protocols/hook_patterns.json` so the hook scores `vercel deploy`,
27+
`supabase migrate`, etc. correctly for your stack. Ships with empty
28+
arrays and a `_examples` section; universal patterns stay hardcoded.
29+
- **`on_failure()` severity overrides.** New `importance=` and
30+
`pain_score=` parameters so a failed production deploy records its real
31+
severity instead of the flat `importance=7 / pain_score=8` defaults.
32+
Lets the dream-cycle salience formula actually distinguish a failed
33+
migration from a failed `ls`.
34+
- **Bash wrapper-aware failure detection.** `_is_success()` now detects
35+
explicit exit-masking wrappers (`|| true`, `|| :`, `|| exit 0`,
36+
`; true`) and falls through to stderr-based signal when they are
37+
present, so masked production failures are still captured. Quoted
38+
strings and `set +e` are excluded from masking detection to avoid
39+
false positives on patterns like `echo '... || true ...'` and
40+
`set +e; grep X log; set -e`.
41+
- **33-check regression verifier.** `verify_codex_fixes.py` validates
42+
every classification path after 7 rounds of codex review. Named
43+
`verify_*.py` (not `test_*.py`) to avoid pytest collection side
44+
effects. Uses a TMPDIR / `$HOME` / repo-local / `VERIFY_TMPDIR`
45+
fallback chain so it runs in constrained sandboxes.
46+
47+
### Fixed
48+
- **Bash `exit_code=0` no longer second-guessed via stdout.** Commands
49+
like `grep Error /var/log/app.log` and `cat failures.log` used to be
50+
recorded as failures because the output contained error-looking
51+
strings. Exit code is now authoritative for Bash responses.
52+
- **User regex fragments in `hook_patterns.json` can't crash the hook.**
53+
Each fragment is validated standalone via `re.compile`; invalid ones
54+
are dropped with a stderr warning. Merged-compile failures (e.g., a
55+
fragment like `(?i)foo` that validates alone but breaks once embedded)
56+
fall back to an incremental build that drops only the offending
57+
fragments, preserving universals and good user fragments.
58+
- **`on_failure` reflection no longer prefixes `str:` for string errors.**
59+
Only `Exception` objects get a type-name prefix now.
60+
61+
### Changed
62+
- **Wizard version bumped to 0.8.0** in `onboard_render.py`.
63+
- **Wizard outro** now points users at `.agent/protocols/hook_patterns.json`
64+
so they know they can extend the importance scorer with their stack's
65+
service names.
66+
67+
## [0.7.2] — 2026-04-20
68+
69+
### Changed
70+
- **README repositioning.** Leads with the actual buyer pain —
71+
switching coding-agent tools keeps resetting how your agent behaves —
72+
so the adapter list, wizard, and memory architecture read as proof
73+
instead of preamble. Follow / coded-using / article framing moved
74+
into the Credits section.
75+
76+
## [0.7.1] — 2026-04-20
77+
78+
### Changed
79+
- **Relicensed from MIT to Apache 2.0.**
80+
81+
## [0.7.0] — 2026-04-20
82+
83+
### Added
84+
- **`learn.py` host-agent tool.** Teach the agent a rule in one
85+
command: `python3 .agent/tools/learn.py "Always serialize timestamps
86+
in UTC" --rationale "past cross-region bugs"`. Stages, graduates, and
87+
renders in one step. Idempotent. Cleans up staged files on heuristic
88+
reject; preserves on crashes so retries work.
89+
- **`recall.py` host-agent tool.** Surfaces graduated lessons relevant
90+
to what you're about to do. Ranked lexical-overlap hits with per-entry
91+
source labels. Merges `lessons.jsonl` and seed bullets in `LESSONS.md`
92+
so graduating your first lesson doesn't hide the seeds. Logs every
93+
recall to episodic memory for audit.
94+
- **`show.py` host-agent tool.** Colorful dashboard of brain state
95+
(episodes, candidates, lessons, failing skills, 14d activity
96+
sparkline). `--json` / `--plain` / `NO_COLOR` flags.
97+
- **Adapter wiring for recall across all 8 harnesses.** Every adapter
98+
(`claude-code`, `cursor`, `windsurf`, `opencode`, `openclaw`,
99+
`hermes`, `pi`, `standalone-python`) now instructs the model to run
100+
`recall.py "<intent>"` before deploy / migration / timestamp / debug
101+
/ refactor work, and to surface results in a
102+
`Consulted lessons before acting:` block.
103+
- **Pre-graduated seed UTC lesson** so new installs see proactive recall
104+
return a real hit on first try. Stored at
105+
`.agent/memory/semantic/lessons.jsonl`.
106+
107+
### Fixed
108+
- **Canonical `pattern_id`.** Conditions are casefolded, unicode
109+
whitespace collapsed, zero-widths stripped, deduped, sorted — the
110+
same logical set always yields the same id.
111+
- **Stricter heuristic check.** `validate.heuristic_check` now requires
112+
≥3 content words in a claim (blocks junk like `!!!abc` that passed
113+
the raw-length gate).
114+
- **Idempotent `graduate.py` retries.** Re-renders `LESSONS.md`, honors
115+
original reviewer / rationale from `lessons.jsonl` to keep stores
116+
in sync, refuses retries against legacy rows missing metadata.
117+
- **Advisory flock on `lessons.jsonl`.** `render_lessons` and
118+
`append_lesson` now hold an exclusive flock during writes. Concurrent
119+
writers serialize; `LESSONS.md` can no longer go stale relative to
120+
`lessons.jsonl`. Atomic rewrite via temp file + rename.
121+
122+
## [0.6.0] — 2026-04-17
123+
124+
### Added
125+
- **Pi Coding Agent adapter.** `./install.sh pi` drops `AGENTS.md` and
126+
symlinks `.pi/skills` to `.agent/skills` so pi sees the full brain
127+
with zero duplication. Safe to install alongside `hermes` / `opencode`
128+
(all read `AGENTS.md`; the installer skips the overwrite if one
129+
exists).
130+
131+
### Changed
132+
- **BREAKING: `openclient` adapter renamed to `openclaw`.** Installed
133+
file changed: `.openclient-system.md``.openclaw-system.md`.
134+
Existing OpenClient users: re-run `./install.sh openclaw`.
135+
136+
## [0.5.0] — 2026-04-17
137+
138+
### Added
139+
- **Host-agent review protocol.** Python handles filing (cluster, stage,
140+
heuristic prefilter, decay). The host agent handles reasoning via
141+
`list_candidates.py` / `graduate.py` / `reject.py` / `reopen.py`.
142+
Graduation requires `--rationale` so rubber-stamping is structurally
143+
impossible. Zero unattended reasoning, zero provider coupling.
144+
- **Structured `lessons.jsonl` as source of truth.** `LESSONS.md` is
145+
rendered from it. Hand-curated content above the sentinel is preserved
146+
across renders; legacy bullets auto-migrate on first run.
147+
- **Proper single-linkage clustering with bridge-merge.** Pattern IDs
148+
derived from canonical claim + conditions, stable across cluster-
149+
membership changes, distinct for generic-canonical collisions.
150+
- **Query-aware retrieval.** `context_budget` ranks episodes by salience
151+
× relevance and filters lessons to `status=accepted` only —
152+
provisional, legacy, and superseded entries never leak into the
153+
system prompt.
154+
- **[BETA] FTS5 memory search** (`.agent/memory/memory_search.py`).
155+
Opt-in via onboarding or `.agent/memory/.features.json`. Default off.
156+
Prefers ripgrep when FTS5 is not available, falls back to grep.
157+
Restricted to `.md` / `.jsonl` so source files never pollute results.
158+
- **Windows-native installer.** `install.ps1` runs natively under
159+
PowerShell; `install.sh` continues to work under Git Bash / WSL.
160+
161+
### Fixed
162+
- Batch-sound graduation gate.
163+
- Stable slugs across cluster drift.
164+
- Provisional re-review and supersession semantics.
165+
- `REVIEW_QUEUE` refreshes on every CLI action.
166+
- Heuristic-rejection stamping so unrelated `LESSONS.md` edits do not
167+
churn.
168+
- Atomic `graduate.py` (semantic write first, candidate move last).
169+
- `.gitignore` ordering so `.agent/memory/.index/` is actually ignored.
170+
- Fallback search restricted to `.md` / `.jsonl`.
171+
- Feature toggle file and `[BETA]` label in onboarding.
172+
173+
## [0.4.0] — 2026-04-16
174+
175+
### Added
176+
- **Interactive onboarding wizard** (`onboard.py`, clack-style UI) that
177+
auto-fills `PREFERENCES.md` after install. Flags: `--yes` (CI /
178+
defaults), `--reconfigure` (re-run). Apple-style redesign with 7
179+
scenes (Memory, Skills, Dream Cycle added).
180+
181+
## [0.3.0] — 2026-04-16
182+
183+
### Fixed
184+
- Cron-safe paths in `auto_dream.py` and `Stop` hook matcher.
185+
- Deny-glob syntax in `settings.json`.
186+
187+
## [0.2.0] — 2026-04-16
188+
189+
### Added
190+
- **Homebrew formula** at `Formula/agentic-stack.rb`.
191+
192+
### Fixed
193+
- `standalone-python` path detection.
194+
- Harness count in README.
195+
- `brew tap` URL in README.
196+
197+
## [0.1.0] — 2026-04-16
198+
199+
### Added
200+
- Initial release. Portable `.agent/` brain folder with adapters for
201+
Claude Code, Cursor, Windsurf, OpenCode, OpenClient (later OpenClaw),
202+
Hermes, and standalone Python. Homebrew installer (replaces the
203+
earlier `npx`-based flow).
204+
205+
[0.8.0]: https://github.com/codejunkie99/agentic-stack/compare/v0.7.2...v0.8.0
206+
[0.7.2]: https://github.com/codejunkie99/agentic-stack/compare/v0.7.1...v0.7.2
207+
[0.7.1]: https://github.com/codejunkie99/agentic-stack/compare/v0.7.0...v0.7.1
208+
[0.7.0]: https://github.com/codejunkie99/agentic-stack/compare/v0.6.0...v0.7.0
209+
[0.6.0]: https://github.com/codejunkie99/agentic-stack/compare/v0.5.0...v0.6.0
210+
[0.5.0]: https://github.com/codejunkie99/agentic-stack/compare/v0.4.0...v0.5.0
211+
[0.4.0]: https://github.com/codejunkie99/agentic-stack/compare/v0.3.0...v0.4.0
212+
[0.3.0]: https://github.com/codejunkie99/agentic-stack/compare/v0.2.0...v0.3.0
213+
[0.2.0]: https://github.com/codejunkie99/agentic-stack/compare/v0.1.0...v0.2.0
214+
[0.1.0]: https://github.com/codejunkie99/agentic-stack/releases/tag/v0.1.0

Formula/agentic-stack.rb

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
11
class AgenticStack < Formula
22
desc "One brain, many harnesses — portable .agent/ folder for AI coding agents"
33
homepage "https://github.com/codejunkie99/agentic-stack"
4-
url "https://github.com/codejunkie99/agentic-stack/archive/refs/tags/v0.7.2.tar.gz"
5-
sha256 "729e942dc7cd69967264ebb805ecd3fc5ee42be5d261bd97331d831af77f6a6c"
6-
version "0.7.2"
4+
url "https://github.com/codejunkie99/agentic-stack/archive/refs/tags/v0.8.0.tar.gz"
5+
sha256 "0000000000000000000000000000000000000000000000000000000000000000"
6+
version "0.8.0"
77
license "Apache-2.0"
88

99
def install

README.md

Lines changed: 3 additions & 68 deletions
Original file line numberDiff line numberDiff line change
@@ -138,75 +138,10 @@ harnesses.
138138
- **Protocols** — typed tool schemas, a `permissions.md` that the
139139
pre-tool-call hook enforces, and a delegation contract for sub-agents.
140140

141-
## What's new in v0.7.0
142-
143-
- **Three host-agent tools that make the brain usable from day one.**
144-
- `learn.py` — teach the agent a rule in one command:
145-
`python3 .agent/tools/learn.py "Always serialize timestamps in UTC" --rationale "past cross-region bugs"`.
146-
Stages + graduates + renders in one step. Idempotent. Cleans up staged
147-
files on heuristic reject; preserves on crashes so retries work.
148-
- `recall.py` — surface graduated lessons relevant to what you're about
149-
to do: `python3 .agent/tools/recall.py "add a created_at column"`.
150-
Returns ranked lexical-overlap hits with per-entry source labels.
151-
Merges `lessons.jsonl` and seed bullets in `LESSONS.md` so graduating
152-
your first lesson doesn't hide the seeds. Logs every recall to
153-
episodic memory for audit.
154-
- `show.py` — colorful dashboard of brain state (episodes, candidates,
155-
lessons, failing skills, 14d activity sparkline). `--json` / `--plain`
156-
/ `NO_COLOR` flags.
157-
- **Adapter wiring for recall across all harnesses.** Every adapter
158-
(`claude-code`, `cursor`, `windsurf`, `opencode`, `openclaw`, `hermes`,
159-
`pi`, `standalone-python`, `antigravity`) now instructs the model to run
160-
`recall.py "<intent>"` before deploy / migration / timestamp / debug /
161-
refactor work, and to surface results in a `Consulted lessons before
162-
acting:` block.
163-
- **Seed UTC lesson ships pre-graduated.** New installs see proactive
164-
recall return a real hit on first try — no setup ceremony for the
165-
demo path. Stored at `.agent/memory/semantic/lessons.jsonl`.
166-
- **Reliability fixes.**
167-
- `pattern_id` canonicalizes conditions (casefold, unicode-whitespace
168-
collapse, zero-width strip, dedupe, sort) — so the same logical set
169-
always yields the same id.
170-
- `validate.heuristic_check` now requires ≥3 content words in a claim
171-
(blocks junk like `!!!abc` that passed the raw-length gate).
172-
- `graduate.py` retry path is idempotent: re-renders `LESSONS.md`,
173-
honors original reviewer/rationale from `lessons.jsonl` to keep
174-
stores in sync, refuses retries against legacy rows missing
175-
metadata.
176-
- `render_lessons` + `append_lesson` now hold an advisory exclusive
177-
flock on `lessons.jsonl`. Concurrent writers serialize; `LESSONS.md`
178-
can no longer be stale relative to `lessons.jsonl`. Atomic rewrite
179-
via temp file + rename.
180-
181-
## What's new in v0.6.0
182-
183-
- **Pi Coding Agent adapter.** `./install.sh pi` drops `AGENTS.md` and
184-
symlinks `.pi/skills` to `.agent/skills` so pi sees the full brain
185-
with zero duplication. Safe to install alongside hermes/opencode
186-
(they all read `AGENTS.md`; we skip the overwrite if one exists).
187-
- **OpenClient → OpenClaw.** Adapter renamed across the board.
188-
Installed file changed: `.openclient-system.md``.openclaw-system.md`.
189-
Breaking for existing OpenClient users — re-run `./install.sh openclaw`.
190-
191-
## What's new in v0.5.0
192-
193-
- **Host-agent review protocol.** Python handles filing (cluster, stage,
194-
heuristic prefilter, decay). The host agent handles reasoning via
195-
`list_candidates.py` / `graduate.py` / `reject.py` / `reopen.py`.
196-
Graduation requires `--rationale` so rubber-stamping is structurally
197-
impossible.
198-
- **Structured `lessons.jsonl` as source of truth.** `LESSONS.md` is
199-
rendered from it. Hand-curated content above the sentinel is
200-
preserved across renders; legacy bullets auto-migrate on first run.
201-
- **Content clustering.** Proper single-linkage Jaccard with bridge
202-
merging. Pattern IDs derived from canonical claim + conditions, stable
203-
across cluster-membership changes.
204-
- **[BETA] FTS5 memory search.** Opt-in full-text search over all
205-
`.md` / `.jsonl` memory documents. Default **off**; enable during
206-
onboarding or edit `.agent/memory/.features.json` directly.
207-
- **Windows-native installer.** `install.ps1` runs natively in
208-
PowerShell; `install.sh` continues to work under Git Bash / WSL.
141+
## Releases & changelog
209142

143+
Per-version release notes live in [CHANGELOG.md](CHANGELOG.md). The
144+
latest release, what broke, what's new, upgrade path, all there.
210145

211146
## Memory search `[BETA]`
212147

onboard.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -109,6 +109,9 @@ def main():
109109
f"Features: {features_file}",
110110
"Edit either file any time — your AI re-reads them every session.",
111111
"Tip: git add .agent/memory/ to track your brain.",
112+
"Want Claude Code to score YOUR stack's deploys/migrations as",
113+
"high-stakes? Edit .agent/protocols/hook_patterns.json —",
114+
"add service names like 'vercel' or 'supabase' under high_stakes.",
112115
])
113116
except KeyboardInterrupt:
114117
print(f"\n\n{MUTED} Setup cancelled.{R}\n")

onboard_render.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
"""Turn collected answers into a PREFERENCES.md string. Pure function, no I/O."""
22
import datetime
33

4-
VERSION = "0.6.0"
4+
VERSION = "0.8.0"
55

66
_DEFAULTS = {
77
"name": "",

onboard_ui.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ def _hex(h, bg=False):
2525
# 2-row pixel font spells "AGENTIC STACK"
2626
_L1 = " ▄▀█ █▀▀ █▀▀ █▄░█ ▀█▀ █ █▀▀ █▀ ▀█▀ ▄▀█ █▀▀ █▄▀ "
2727
_L2 = " █▀█ █▄█ ██▄ █░▀█ ░█░ █ █▄▄ ▄█ ░█░ █▀█ █▄▄ █░█ "
28-
_T = " your portable brain · harness-agnostic AI memory · v0.6.0"
28+
_T = " your portable brain · harness-agnostic AI memory · v0.8.0"
2929

3030
def _cc(c):
3131
if c == "█": return f"{PURPLE}{B}{c}{R}"

0 commit comments

Comments
 (0)