Releases: matthewsinclair/intent
Intent v2.9.0 — Agentic Software Engineering Suite
Intent v2.9.0 Release Notes
Release Date: 2026-04-23
Overview
Intent v2.9.0 ships the Agentic Software Engineering Suite (ST0034). Three things change at once and they were designed to land together:
- Rules become first-class citizens. Coding standards live in
intent/plugins/claude/rules/<lang>/<category>/<slug>/RULE.mdas atomic, cite-able files with stableIN-*IDs, structured frontmatter, Detection heuristics, and bad/good examples. - Critic subagents enforce rules mechanically. A new
critic-<lang>family (critic-elixir,critic-rust,critic-swift,critic-lua,critic-shell) reads the rule library, applies each rule's Detection heuristic to target files, and emits a stable severity-grouped report. - A user extension system at
~/.intent/ext/lets you ship your own subagents, skills, or rule packs without forking Intent. Discovery is layered: canon is the default; user extensions override by name with a visible shadow warning. The reference extension isworker-bee, relocated from canon to demonstrate the mechanism end-to-end.
These three pieces unlock the same workflow loop: a rule file says what good looks like, a critic enforces it on real code, and an extension lets you customise either without touching upstream.
Rules library
A rule is one atomic standard. It has a stable ID (IN-EX-CODE-006, IN-AG-HIGHLANDER-001, etc.), a Detection heuristic, bad/good examples, and required Markdown sections. Skills cite rules by ID; the rule file owns the prose.
The library ships with packs for agnostic, elixir, rust, swift, lua, and shell. The schema is intentionally compatible with iautom8things/elixir-test-critic, so upstream rules drop into Intent's discovery unchanged.
The intent claude rules command surface — list, show, validate, index — operates against the library. validate is the canonical authoring gate; index regenerates a deterministic, sorted index.json.
Authoring guide: intent/docs/rules.md. Schema reference: intent/plugins/claude/rules/_schema/rule-schema.md.
Critic subagents
Critics are thin orchestrators. On invocation, a critic re-reads the rule library (no caching), applies each rule's Detection heuristic to the target source files, and emits a parse-stable severity-grouped report:
## Critic Report: critic-elixir code lib/myapp/accounts.ex
CRITICAL
- IN-EX-CODE-005 (no-silent-failures) lib/myapp/accounts.ex:42
rescue _ -> :ok swallows the lookup failure silently.
Surface the error tuple or let it raise.
WARNING
- IN-EX-CODE-002 (tagged-tuple-returns) lib/myapp/accounts.ex:18
Function returns bare nil on not-found.
Return {:ok, value} | {:error, reason} so callers can pattern-match.
Summary: 1 critical, 1 warning, 0 recommendation, 0 style.
Rules applied: 4 agnostic, 12 language-specific.
Modes are code and test (critic-shell is code only). Each rule's applies_to glob narrows the file set further. Per-project config lives in .intent_critic.yml at the project root for disabling rules and adjusting severity thresholds.
Critics never autofix, never shell out to external linters, never invent rule IDs. Every finding cites a real RULE.md you can open directly.
The full contract — invocation, modes, ambiguity handling, report format, .intent_critic.yml schema, Diogenes/Socrates handoffs, and the registration-freeze operational note — lives at intent/docs/critics.md.
User extensions (~/.intent/ext/)
Extensions are content-only directories that contribute subagents, skills, or rule packs. Each extension has an extension.json manifest declaring its contributions and Intent compatibility bounds. Discovery is layered: canon stays the default; user extensions override by name; extension rules override canon rules with the same ID. Every shadow is logged — no silent overrides.
Author your own:
intent ext new my-agent --subagent
intent ext new my-skill --skill
intent ext new my-rules --rule-pack
intent ext validate my-agentAuthoring guide: intent/docs/writing-extensions.md. Manifest schema: intent/plugins/claude/ext-schema/extension.schema.json.
The reference extension is worker-bee. In v2.8.x it was a canon subagent; in v2.9.0 it is the worked example for the extension mechanism. The migration seeds it from lib/templates/ext-seeds/worker-bee/ to ~/.intent/ext/worker-bee/ on first run. If worker-bee can live as an extension end-to-end, any user-authored subagent can.
Breaking changes
elixirsubagent deleted. Usecritic-elixirinstead. The migration prunes installed copies on upgrade.worker-beemoved out of canon. Re-install from the extension after upgrade:intent claude subagents install worker-bee.
Both are aggressive, fail-forward changes — there are no compatibility shims and no deprecation period inside the migration. The migration prunes the installed copies of both and seeds the new worker-bee extension. Run the upgrade, restart your session, re-install worker-bee from the extension if you want it.
Upgrade
intent upgrade --applyThe migrate_v2_8_2_to_v2_9_0 step (in bin/intent_helpers) does four things:
- Stamps
.intent/config.jsonwithintent_version: 2.9.0. - Bootstraps
~/.intent/ext/with a README on first run. - Seeds
~/.intent/ext/worker-bee/fromlib/templates/ext-seeds/worker-bee/(skipped if already present — never overwrites user state). - Prunes installed copies of the deleted
elixirsubagent and the relocatedworker-beefrom~/.claude/agents/and~/.intent/agents/installed-agents.json.
The migration is idempotent — running the upgrade twice is safe.
To verify post-upgrade state:
intent doctor # general health check
cat .intent/config.json | jq .intent_version # should print "2.9.0"
intent ext list # should show worker-bee
intent claude subagents list | grep critic- # should show 5 critic-* entriesRestart Claude Code after the upgrade. Mid-session subagent installs are not visible to Task() until the next session starts. If you try to invoke critic-elixir (or any other critic) without restarting, you'll get "subagent not found". This is a Claude Code constraint, not an Intent behaviour.
Post-release fixes (tag updated 2026-04-23)
The v2.9.0 tag was force-updated from d1b0fe1 to 0de89cd to include the first real-world dogfood pass of critic-shell against Intent's own bash codebase (WP12 dogfood Entry 1). Three follow-up commits resolve every CRITICAL finding and most WARNING findings the new critic surfaced in production code:
a9ee349— P0/P1 fixes. Seven CRITICAL plus three WARNING resolved acrossintent_st,intent_audit,intent_doctor,intent_plugin, andtests/run_tests.sh. Bugs included unquoted command substitutions in path construction,for x in $(find ...)patterns that swallowed find's exit code underset -e, an unsafefind | xargspipeline missing-print0, and aget_terminal_width()shadow that silently overrode the canonical helper.60dfcd6— Patches the dogfood journal commit reference.0de89cd— P2 sweep (Highlander pass).warning()andinfo()lifted intobin/intent_helpersas canonical helpers (the latter QUIET-aware); pure-shadow duplicates stripped from four files. P2a (set -eadoption) shipped only fortests/run_tests.sh; rolled back from six production scripts after surfacing real conflicts with the[ -d ... ] || error "not found"pattern they use — recorded as follow-on work in the dogfood journal.
Full triage and rationale: intent/st/COMPLETED/ST0034/WP/12/dogfood-journal.md Entry 1.
If you already pulled v2.9.0 at d1b0fe1, re-fetch the tag (git fetch --tags --force) to get the dogfooded version. The migration step and all behavioural surfaces remain unchanged — these are bug fixes in Intent's own bash, not new features.
Acknowledgements
The rule schema, the borrowed rule principles, and the _attribution/elixir-test-critic.md MIT notice all credit iautom8things/elixir-test-critic (MIT, copyright 2026 Manuel Zubieta), pinned at commit 1d9aa40700dab7370b4abd338ce11b922e914b14. The compatibility was deliberate: upstream rules drop into Intent's discovery unchanged, and Intent's critic-elixir recognises upstream's elixir-test-critic plugin if it is installed at ~/.claude/plugins/elixir-test-critic/.
Migration notes for fleet projects
- The migration is gated on
needs_v2_9_0_upgrade(returns true for< 2.9.0, recognises2.9.x,2.10.x, and3.xas already-migrated). - The migration chain in
bin/intent_upgradecovers every prior starting version (16 chain-tails); a project on any v2.x release upgrades cleanly through to v2.9.0. - Worker-bee's
intent_compat.minin the seed manifest is2.8.2— projects on the new minimum or higher load the extension successfully.
v2.8.2 -- cwd-resilient dispatch + Credo wiring
Fixed
- ST0033: cwd-resilient dispatch.
intentsubcommands now work from any directory inside an Intent project, not only from the project root. The dispatcher (bin/intent) exportsINTENT_ORIG_CWDandcds to$PROJECT_ROOTbeforeexec'ing the subcommand, so every subcommand runs with a known-correct cwd. Outside any project, commands fail cleanly with "not in an Intent project" and no longer create stray.intent/orintent/directories at the invoker's cwd.intent treeindexandintent fileindexconsultINTENT_ORIG_CWDwhen resolving relative path arguments. - Upgrade chain completed through 2.8.2.
bin/intent_upgrade's case statement previously halted at 2.6.0 for any starting version <= 2.5.0 and had no entry for 2.6.0/2.7.0 at all, leaving projects stuck mid-chain. Every starting-version case now chains throughmigrate_v2_6_0_to_v2_8_0(new, pure version stamp),migrate_v2_8_0_to_v2_8_1, andmigrate_v2_8_1_to_v2_8_2. The pre-v2 fallback chain is extended to match.needs_v2_8_2_upgradeaccepts 2.6.0 and 2.7.0 as starting points. - ST0032: Credo custom checks wired into
.credo.exs.intent st zero(D5a) andintent auditnow use a standalonelib/scripts/configure_credo.exsto programmatically patch.credo.exs, replacing the earlier wrong hint aboutelixirc_pathsinmix.exsand theintent audit --checks-dirworkaround. Removed 2 broken check templates (boolean_operators,dependency_graph), fixed 4 buggy ones (map_get_on_struct,missing_impl_annotation,debug_artifacts,thick_coordinator), and addedbracket_access_on_struct. Existing projects that went throughst zerocan re-run D5a to pick up the wiring.
v2.8.1 - TCA Suite Hardening (post-Lamplight)
Intent v2.8.1 -- TCA Suite Hardening (post-Lamplight)
A focused patch release integrating feedback from the first full Total Codebase Audit run on an external project (Lamplight ST0121, 2026-04-08/09). The audit worked -- 17 raw violations found, 10 fixed -- but exposed 8 process corrections in provisioning and close-out discipline that needed to land in the in-tca-* skill family before the next audit runs anywhere.
The root failure was that documentation was not enough: an operator eager to declare victory skipped past written guidance. This release replaces guidance with mechanical guards wherever the failure modes allow it.
Added
- TCA pre-flight guard (
tca-report.sh --check-only) with 4 checks: TCA shape validation (WP/ directory, design.md with rule set),feedback-report.mdexists at the canonical path, report contains no[Fill in:template placeholders,info.mdhas zero unchecked acceptance criteria. The guard runs as a required step of/in-tca-finishbefore any session docs are touched. - Provisioning Invariants (
intent/docs/total-codebase-audit.mdsection 0.0): four load-bearing rules -- TCA is always its own dedicated steel thread, WPs are flat (no sub-WPs), the last WP is the synthesis WP, rank components by later-pain impact not raw violation count. tca-init.shprovisioning guards: refuse to provision inside an existingintent/st/ST*/WP/*path (nested-WP antipattern), refuse to overwrite an audit with populatedsocrates.mdfiles. Both guards run before argument validation; the nested-WP check fires on non-existent paths as well.- False Positive Guidance as a REQUIRED design.md section, with an R8/R9 example showing the pre-classification format. Lamplight benchmark: R8 false-positive rate dropped from an estimated 82% to 0% with pre-classification.
- Audit metadata line in
in-tca-auditPost-WP:**Agent**: {type}; **Turns**: N; **Raw hits**: N; **FPs**: Nat the top of each component audit'ssocrates.md, queryable across audits and feeds the Sub-Agent Effectiveness section of the final feedback report. chains_to:frontmatter on all 5 TCA skills encoding thein-tca-init->in-tca-audit->in-tca-synthesize->in-tca-remediate->in-tca-finish->in-finishworkflow.intent upgradev2.8.0 -> v2.8.1 step:needs_v2_8_1_upgrade()andmigrate_v2_8_0_to_v2_8_1()inbin/intent_helpers, with a matching case branch inbin/intent_upgrade. The migration is a pure version stamp; no project files mutate.
Changed
- BREAKING (internal TCA scripts):
--st-dirrenamed to--tca-diracrosstca-init.sh,tca-progress.sh, andtca-report.shand their invocations inin-tca-*SKILL.md files. The old flag was misleading -- it always takes the TCA's steel thread directory, not an arbitrary ST's. 33 occurrences across 6 files. The shell variableST_DIRwas also renamed toTCA_DIR. Direct callers of these scripts must update their invocations. Intent's own skills have been updated. in-tca-finishskill restructured: feedback report lives at$TCA_DIR/feedback-report.mdas a top-level artifact. The old "Feedback WP" step is deleted -- a report about all WPs should not itself be a WP. New skill steps for manual fill-in, closing acceptance criteria, and running the pre-flight guard are added. The/in-finishwrap-up call is explicitly gated on the guard passing.- Dedup-rate KPI framing in the TCA reference doc: low dedup on newly-authored code is now explicitly a positive signal about rule-aware authorship.
Fixed
- Premature TCA close-out failure mode (Lamplight ST0121 incident, commits 75706c18 -> 98616a0c, 2026-04-08): a 24-hour window existed where
wip.md,intent/restart.md,.claude/restart.md, andimpl.mdall claimed "ST0121 complete" beforefeedback-report.mdexisted. The new pre-flight guard makes this mechanically impossible. - Silent guard failures in
tca-report.sh: initial guard implementations usedgrep -c ... || echo 0andgrep | wc -l | tr -d ' ', both of which interacted badly withset -euo pipefail(grep returning 1 on zero matches killed the pipeline silently on assignment). Replaced with pure-shell while-loop counters.
Implementation
ST0031 -- TCA suite hardening (post-Lamplight ST0121). 4 work packages, 5 commits on main:
58143aeWP-01 Docs: Provisioning Invariants, FP benchmark, dedup KPI framing55425a6WP-02 Init hardening: invariant callout, FP Guidance REQUIRED, provisioning guards57e8155WP-03 Finish guard:--check-onlymode + 4 pre-flight guards, skill restructuref605b37WP-04 Rename + metadata + chains_to5b4435fST0031 close-out
Plus the release commit 9c0994e.
Post-tag fixes (also at v2.8.1)
The v2.8.1 tag was force-moved on 2026-04-09 to absorb two follow-up bug fixes discovered during the rollout to sister projects. Both are internal hygiene fixes; no user-facing surface changes:
3b499edBackfill missing completion dates on ST info.md frontmatter --intent st donehad been failing to fill in thecompleted:field reliably. ST0026, ST0027, ST0031 had emptycompleted:keys; ST0010 was missing the key entirely. Pure metadata correction.82ba792Drop legacy.intent/version, use real version in init + bootstrap:bin/intent_initwas hardcodingintent_version: "2.1.0"in newly-created.intent/config.jsonregardless of the current Intent version. Now uses$INTENT_VERSIONfromget_intent_version.bin/intent_initwas also creating a.intent/versionfile alongsideconfig.json-- a parallel version stamp that was never read by the Intent CLI, never updated byintent upgrade, and only existed to drift out of sync. Removed entirely..intent/config.jsonis now the single source of truth for the project's Intent version.bin/intent_bootstraphad the same hardcoded2.1.0in the global config template. Same fix.tests/unit/init_commands.batsandtests/unit/bootstrap.batsupdated to use dynamic$(get_intent_version)checks instead of hardcoded2.1.0assertions.
Compatibility
- Intent CLI: no user-facing CLI surface changed.
intentcommands are unchanged. intent upgrade: a v2.8.0 project will upgrade cleanly viaintent upgrade. Earlier-version projects (v2.6.0, v2.7.0) hit a pre-existing gap in the upgrade chain that is unrelated to this release.- TCA skill users: if you are mid-audit when upgrading, the next
/in-tca-finishrun will use the new flag name and expect the feedback report at the new canonical path. The guard will tell you what is wrong. - Direct callers of
tca-*.shscripts: update--st-dirto--tca-dirat your call sites. - Existing projects with
.intent/version: the post-tag fix stops creating this file in new projects but does not delete it from existing projects. If you find a stale.intent/versionin an existing project, delete it manually -- nothing reads it.
v2.8.0 - Detrope Skill
Intent v2.8.0
Added
- Detrope skill (
/in-detrope) for LLM trope detection and stylometric analysis- Trope catalog vendored from llm-tropes (44 tropes, 8 categories)
- Context-aware severity assessment (reads project CLAUDE.md for audience/purpose)
- Two modes:
quick(diagnosis only) andfull(diagnosis + concrete rewrites) - Stylometric profile with AI signal strength rating
- Integrates with Utilz
cleanz --detropefor automated pre-scanning
Changed
- Blog series detroped - all 8 blog posts revised to remove LLM writing tropes (64 fixes across word choice, sentence structure, tone, and formatting tropes)
Stats
- 18 skills, 5 subagents
- 462 tests passing across 22 BATS test files
v2.5.0: Work Packages, Highlander Audit
Intent v2.5.0 Release Notes
Release Date: 24 February 2026
Overview
Intent v2.5.0 adds work package management (intent wp), plugin discovery (intent plugin), removes the Backlog.md integration, and applies a Highlander audit to eliminate ~350 lines of duplicated plugin code via a shared helper library.
What's New
Plugin Discovery
Intent has two plugins (claude and agents) but previously had zero discoverability. The new intent plugin command makes all plugins and their commands visible:
intent plugin # List all plugins and their commands
intent plugin list # Same as above
intent plugin show claude # Detailed view of a single plugin
intent plugin show agents # Detailed view of a single pluginEach plugin now has a plugin.json metadata file for structured discovery.
Help improvements:
intent helpnow showsclaudeandpluginin the Core sectionintent help claude-- new help file for the claude namespaceintent help plugin-- new help file for the plugin commandintent help agents-- corrected to describe AGENTS.md management (was incorrectly documenting subagent operations)
Work Package Management (ST0024)
Work packages break a steel thread into smaller units of work. Each WP lives in a numbered subdirectory under STXXXX/WP/NN/.
New command: intent wp
intent wp new <STID> "Title" # Create next WP (auto-assigns 01-99)
intent wp list <STID> # Table with WP, Title, Scope, Status
intent wp start <STID/NN> # Mark WP as WIP
intent wp done <STID/NN> # Mark WP as Done (hints when all complete)
intent wp show <STID/NN> # Display WP info.md
intent wp help # Show usageSpecifiers accept bare numbers: 5 = ST0005, 5/01 = ST0005/01. Titles can contain special characters (/, &, \) safely.
Highlander Audit: Shared Plugin Helper Library
The skills and subagents scripts shared ~80% identical code for install/sync/uninstall/manifest operations. A new shared library eliminates the duplication:
- Created
intent/plugins/claude/lib/claude_plugin_helpers.sh-- shared install, sync, uninstall, and manifest operations using a callback pattern - Refactored
intent_claude_skills(654 -> 299 lines) -- defines 8 callbacks, delegates install/sync/uninstall to shared functions - Refactored
intent_claude_subagents(1015 -> 613 lines) -- defines 8 callbacks, keeps init/list/show/status as script-specific
Each plugin script defines a small set of callbacks describing its source/target/copy semantics, then delegates operations to shared functions. Bug fixes and new features (e.g., adding --dry-run) now only need to be made once.
Shared Config Extraction
Added get_config_field() to bin/intent_helpers -- a single function replacing inline grep -oE patterns duplicated across intent_st and intent_wp.
# Before (duplicated in intent_st and intent_wp):
AUTHOR=$(grep -oE '"author"[[:space:]]*:[[:space:]]*"[^"]+"' .intent/config.json | cut -d'"' -f4)
# After (one shared function):
AUTHOR=$(get_config_field "author" "$USER")Backlog.md Removal (ST0023)
All backlog commands and configuration removed:
- Removed
intent bl,intent task,intent status,intent migratecommands - Removed backlog configuration keys and
intent initbacklog directory creation - Removed Node.js dependency from CI pipeline
- Deleted 3 test files; test suite reduced from 17 to 14 files
Documentation Updates
- README.md: Added bare number syntax and special character support for WP commands
- CLAUDE.md: Added WP specifier syntax, directory structure, and special character notes
- user_guide.md: Added special character handling for WP titles and template location
- reference_guide.md: Added special character support, template location, and WP directory structure
Testing
- 29 new BATS tests for work package commands
- 12 new BATS tests for plugin discovery command
- 5 new tests for help and global command coverage
- Test sandbox updated to include
lib/directory for shared helpers - Full test suite: 356 tests across 18 test files
- All tests passing on macOS
Breaking Changes
- Backlog.md commands removed (
intent bl,intent task,intent status,intent migrate) backlog_dirandbacklog_list_statusconfiguration keys no longer recognized
Migration
No migration required. Work package commands and plugin discovery are additive. If you were using Backlog.md commands, those are no longer available -- use work packages (intent wp) as the replacement workflow.
Intent v2.4.0 — Skills, Upgrade Command, Elixir Reference Docs
Added
- Skills system -- new always-on enforcement layer for Claude Code (ST0020)
intent claude skills list-- show available and installed skillsintent claude skills install <name>-- install skill(s) to.claude/skills/intent claude skills sync-- update installed skills with latest versionsintent claude skills uninstall <name>-- remove Intent-managed skillsintent claude skills show <name>-- display skill content and status- SHA256 checksum-based manifest tracking at
~/.intent/skills/installed-skills.json
- Six skills for proactive code enforcement:
intent-essentials-- 7 Intent workflow rules (CLI usage, treeindex, steel thread conventions)intent-elixir-essentials-- 8 core rules (pattern matching, tagged tuples, pipes, naming)intent-ash-ecto-essentials-- 7 Ash/Ecto rules (code interfaces, migrations, actor placement)intent-phoenix-liveview-- 7 LiveView rules (two-phase mount, streams, components)intent-elixir-testing-- 8 mandatory test quality rules (no control flow in tests, strong assertions, spec-driven)intent-autopsy-- session forensics and memory meta-learning (ST0021)
- Diogenes subagent -- Elixir Test Architect using Socratic dialog (ST0020 WP-11)
- Two personas: Aristotle (Empiricist) and Diogenes (Skeptic)
- Specify mode: 5-phase dialog producing
*.spec.mdtest specifications - Validate mode: gap analysis comparing specs to test files
- intent-autopsy skill -- session forensics and memory meta-learning (ST0021)
- Inspired by @chickensintrees and adapted from his work with STEF
- Elixir script (
autopsy.exs) pre-processes JSONL session files - Detects correction pairs, frustration signals, capability regressions, banned patterns
- Memory-aware analysis: compares findings against MEMORY.md and CLAUDE.md rules
- Identifies memory gaps, enforcement failures, undocumented conventions, stale memory
- Ships default
banned-words.txtwith common AI-isms (delve, unfortunately, etc.)
intent claude upgradecommand for diagnosing and upgrading LLM guidance layer- Dry-run by default (use
--applyto execute) --project-dir DIRto target external projects- Diagnoses files, subagents, and skills; generates upgrade plan; applies changes
- Dry-run by default (use
- Elixir subagent reference documents:
ash-ecto.md-- Ash/Ecto database patterns (Ash-first, never raw Ecto)liveview.md-- LiveView operational patterns (two-phase rendering, streams, uploads)testing.md-- Testing reference (DataCase, ConnCase, LiveView, Mox, Ash testing)project-structure.md-- Standard Phoenix/Ash project layout
- Elixir project templates for
intent agents init --template elixir:AGENTS.mdtemplate with Elixir project overview and commandsRULES.mdtemplate with 9 core rules + framework rules + NEVER DO listARCHITECTURE.mdtemplate with domain map and directory structure skeleton
usage-rules.md-- Intent's own LLM-optimized usage reference (~310 lines)docs/upgrade-guide-2.4.0.md-- human-readable upgrade guide for Intent projects- Special character handling in
st new-- titles with/,&,\no longer break creation (ST0022) - Slug generation --
st newauto-generates a URL-safeslug:field in frontmatter, max 50 chars (ST0022) -s|--startflag forst new-- create and immediately start a steel thread in one command (ST0022)intent doctornow checks for Elixir installation (optional, needed for autopsy)- BATS tests across 17 test files
Changed
- Refactored Elixir subagent rules from 23 overlapping to 12 non-overlapping rules
- Organized into 5 categories: Data Access, Control Flow, Composition, Error Handling, Code Hygiene
- Each rule is distinct with no overlap between categories
intent claude skills installnow copies entire skill directory (not just SKILL.md)- Scripts and supporting files installed alongside SKILL.md
intent claude skills syncalso copies full directory on update
- Updated
intent agents initto support--template <name>flag- Template copies AGENTS.md, RULES.md, ARCHITECTURE.md from template directory
- RULES.md and ARCHITECTURE.md are human-curated (not overwritten without
--force)
- Added NEVER DO rule: never put
requireinside a function body (module level only) - Added YAML frontmatter with
descriptionfield to all SKILL.md files for Claude Code discovery st listandst syncnow show "Slug" column instead of "Title" (falls back to title for older threads)- Updated copyright to 2026 across all source files
Intent v2.3.4 - Treeindex, Documentation Refresh
Intent v2.3.4 Release Notes
Release Date: February 4, 2026
Overview
Intent v2.3.4 introduces the intent treeindex command for generating LLM-optimized directory summaries, along with bug fixes and Elixir subagent enhancements.
New Features
Treeindex CLI (ST0019 WP01)
The intent treeindex DIR command generates concise .treeindex summary files for each directory, designed to help LLMs navigate unfamiliar codebases without reading every file.
Key capabilities:
- Bottom-up indexing: Leaf directories first, then parents (child summaries feed into parent context)
- Claude Haiku 4.5: Fast, cost-effective summarization via headless
claude -p - Centralized shadow directory: Index files stored at
intent/.treeindex/to keep the source tree clean - Fingerprint-based staleness: Detects adds/removes/size changes without mtime dependency (stable across git clones)
.treeindexignore: Gitignore-style config for excluding files and directories from indexing- Platform compatible: Handles macOS/Linux
statdifferences, works with Bash 3.2
Usage:
intent treeindex lib/ # Index lib/ and subdirectories (depth 2)
intent treeindex --depth 3 src/ # Index deeper
intent treeindex --check lib/ # Report staleness without regenerating
intent treeindex --dry-run lib/ # Preview what would be generated
intent treeindex --force lib/ # Regenerate even if up-to-dateCLI options:
| Option | Description |
|---|---|
--depth N |
Directory traversal depth (default: 2) |
--check |
Report staleness without generating |
--dry-run |
Preview plan without writing files |
--force |
Regenerate even when fingerprint matches |
--model MODEL |
Claude model to use (default: haiku) |
--verbose |
Show detailed progress |
CLAUDE.md Convention (ST0019 WP03)
CLAUDE.md now instructs Claude to check .treeindex files before exploring unfamiliar directories, avoiding redundant Glob/Grep/Read operations. The intent treeindex <dir> command is listed under Core Commands.
Bug Fixes
intent initversion display: Now reads from VERSION file instead of showing hardcoded 2.0.0--syncflag: Fixed bug in steel thread synchronization
Enhancements
- Expanded Elixir subagent with architectural principles, Ash/Phoenix patterns, and testing guidance
- Standardized abbreviations throughout documentation
Upgrade Notes
From v2.3.3
To upgrade from v2.3.3 to v2.3.4:
intent upgradeIf you have the Elixir subagent installed, update it:
intent claude subagents syncMigration Details
The v2.3.3 -> v2.3.4 migration:
- Updates project version in
.intent/config.jsonandVERSION - No structural changes required
- The treeindex command is available immediately after upgrade
- Elixir subagent enhancements are available via
intent claude subagents sync
Compatibility
- Fully compatible with Intent v2.3.0 through v2.3.3
- No breaking changes
- Existing projects can upgrade seamlessly
- Bash 3.2+ required (macOS default is compatible)
Files Changed
bin/intent_treeindex(new, 612 lines)tests/unit/treeindex_commands.bats(new, ~580 lines, 38 tests)intent/.treeindex/.treeindexignore(new, default ignore patterns)VERSION(2.3.3 -> 2.3.4).intent/config.json(version fields updated)bin/intent_helpers(added migration functions)bin/intent_upgrade(added v2.3.4 upgrade paths)
For More Information
- Full Changelog: See CHANGELOG.md
- Steel Thread:
intent/st/ST0019/(Treeindex design and implementation) - Treeindex Design:
intent/st/ST0019/design.md - Treeindex Implementation:
intent/st/ST0019/impl.md
Intent v2.0.0 - Major Rebrand from STP
Intent v2.0.0 Release Notes
Release Date: July 17, 2025
Overview
Intent v2.0.0 marks a major milestone in the evolution of the Steel Thread Process tooling. This release represents a complete rebrand from STP to Intent, reflecting the tool's core mission of capturing and preserving the intention behind software development decisions.
Major Changes
🚀 Complete Rebrand: STP → Intent
The project has been renamed from "STP" (Steel Thread Process) to "Intent" to better communicate its purpose. While the Steel Thread methodology remains unchanged, the tooling now has a name that immediately conveys its value proposition.
📁 Simplified Directory Structure
The project structure has been flattened and simplified:
Before (STP v1.x):
stp/
├── bin/ # Executables mixed with project
├── prj/ # Nested project directory
│ ├── st/ # Steel threads
│ └── wip.md # Work in progress
├── eng/ # Engineering docs
└── usr/ # User docs
After (Intent v2.0.0):
.
├── bin/ # Tool executables (top-level)
├── intent/ # Project artifacts (flattened)
│ ├── st/ # Steel threads
│ ├── eng/ # Engineering docs
│ ├── usr/ # User docs
│ └── wip.md # Work in progress
└── tests/ # Test suite
🔧 New Commands
intent bootstrap: One-command global setup with clear instructionsintent doctor: Comprehensive diagnostics to troubleshoot issues
📋 JSON Configuration
Configuration has moved from YAML to JSON format with proper local/global hierarchy:
- Local:
.intent/config.json - Global:
~/.config/intent/config.json(follows XDG standard)
✅ Full Backwards Compatibility
stpcommand symlinked tointent- Automatic migration via
intent upgrade - All existing projects continue to work
Installation & Migration
New Installation
# Clone the repository
git clone https://github.com/matthewsinclair/intent.git
cd intent
# Add to PATH
export PATH="$PATH:$(pwd)/bin"
# Bootstrap global configuration
intent bootstrap
# Verify installation
intent doctorMigration from STP v1.x
# From your existing STP project
intent upgrade
# The upgrade will:
# 1. Detect your current version
# 2. Create backups
# 3. Migrate directory structure
# 4. Update configuration format
# 5. Preserve all contentBreaking Changes
While we maintain backwards compatibility, these changes affect the underlying structure:
-
Directory paths have changed:
stp/prj/st/→intent/st/stp/prj/wip.md→intent/wip.md- Configuration in
.intent/not.stp/
-
Configuration format:
- YAML → JSON
- New global config location
-
Repository location:
- GitHub:
matthewsinclair/stp→matthewsinclair/intent
- GitHub:
New Features
Enhanced User Experience
- Better error messages: Clear, actionable feedback
- Improved help system: Context-aware help
- Streamlined commands: Consistent interface
- Progress indicators: Visual feedback during operations
Developer Experience
- Comprehensive test suite: Full coverage with BATS
- GitHub Actions CI/CD: Automated testing
- Example projects: Migration demonstrations
- Enhanced documentation: Updated for Intent
Technical Improvements
- Robust migration: Fail-forward approach
- Better path handling: Works in more environments
- Dependency management: Clear requirements (jq, backlog.md)
- Configuration validation: Catches errors early
Fixed Issues
- GitHub Actions workflows now properly exclude library tests
- Symlink handling improved for cross-platform compatibility
- Test suite reliability enhanced
- Configuration loading hierarchy properly implemented
- Path resolution works correctly in all scenarios
Known Issues
None at this time. All tests passing on Ubuntu and macOS.
Upgrading
From v1.2.1 to v2.0.0
- Backup your project (automatic, but always good practice)
- Run
intent upgradefrom your project root - Review the migration summary
- Update any custom scripts to use
intentinstead ofstp - Update your PATH if you had hardcoded the old location
Command Equivalents
All commands remain the same, just replace stp with intent:
| Old Command | New Command |
|---|---|
stp st new |
intent st new |
stp bl list |
intent bl list |
stp task create |
intent task create |
stp help |
intent help |
Future Roadmap
With the rebrand complete, Intent is positioned for:
- Q3 2025: Native AI integrations (MCP protocol)
- Q4 2025: Team collaboration features
- 2026: Enterprise scalability
Support
- Documentation: Updated user and reference guides
- Issues: Report bugs at https://github.com/matthewsinclair/intent/issues
- Help: Run
intent helporintent doctor
Contributors
- Matthew Sinclair - Project creator and maintainer
- Claude (Anthropic) - Development assistance
Thank You
Thank you to all early adopters of STP. Your feedback shaped Intent into what it is today. The Steel Thread Process remains at the heart of Intent, now with tooling that better reflects its purpose.
Start capturing intention today with Intent v2.0.0!
intent st new "My first intentional development"