Skip to content

Releases: matthewsinclair/intent

Intent v2.9.0 — Agentic Software Engineering Suite

23 Apr 16:34

Choose a tag to compare

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.md as atomic, cite-able files with stable IN-* 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 is worker-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-agent

Authoring 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

  • elixir subagent deleted. Use critic-elixir instead. The migration prunes installed copies on upgrade.
  • worker-bee moved 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 --apply

The migrate_v2_8_2_to_v2_9_0 step (in bin/intent_helpers) does four things:

  1. Stamps .intent/config.json with intent_version: 2.9.0.
  2. Bootstraps ~/.intent/ext/ with a README on first run.
  3. Seeds ~/.intent/ext/worker-bee/ from lib/templates/ext-seeds/worker-bee/ (skipped if already present — never overwrites user state).
  4. Prunes installed copies of the deleted elixir subagent and the relocated worker-bee from ~/.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-* entries

Restart 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 across intent_st, intent_audit, intent_doctor, intent_plugin, and tests/run_tests.sh. Bugs included unquoted command substitutions in path construction, for x in $(find ...) patterns that swallowed find's exit code under set -e, an unsafe find | xargs pipeline missing -print0, and a get_terminal_width() shadow that silently overrode the canonical helper.
  • 60dfcd6 — Patches the dogfood journal commit reference.
  • 0de89cd — P2 sweep (Highlander pass). warning() and info() lifted into bin/intent_helpers as canonical helpers (the latter QUIET-aware); pure-shadow duplicates stripped from four files. P2a (set -e adoption) shipped only for tests/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, recognises 2.9.x, 2.10.x, and 3.x as already-migrated).
  • The migration chain in bin/intent_upgrade covers 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.min in the seed manifest is 2.8.2 — projects on the new minimum or higher load the extension successfully.

v2.8.2 -- cwd-resilient dispatch + Credo wiring

15 Apr 13:27

Choose a tag to compare

Fixed

  • ST0033: cwd-resilient dispatch. intent subcommands now work from any directory inside an Intent project, not only from the project root. The dispatcher (bin/intent) exports INTENT_ORIG_CWD and cds to $PROJECT_ROOT before exec'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/ or intent/ directories at the invoker's cwd. intent treeindex and intent fileindex consult INTENT_ORIG_CWD when 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 through migrate_v2_6_0_to_v2_8_0 (new, pure version stamp), migrate_v2_8_0_to_v2_8_1, and migrate_v2_8_1_to_v2_8_2. The pre-v2 fallback chain is extended to match. needs_v2_8_2_upgrade accepts 2.6.0 and 2.7.0 as starting points.
  • ST0032: Credo custom checks wired into .credo.exs. intent st zero (D5a) and intent audit now use a standalone lib/scripts/configure_credo.exs to programmatically patch .credo.exs, replacing the earlier wrong hint about elixirc_paths in mix.exs and the intent audit --checks-dir workaround. 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 added bracket_access_on_struct. Existing projects that went through st zero can re-run D5a to pick up the wiring.

v2.8.1 - TCA Suite Hardening (post-Lamplight)

09 Apr 11:51

Choose a tag to compare

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.md exists at the canonical path, report contains no [Fill in: template placeholders, info.md has zero unchecked acceptance criteria. The guard runs as a required step of /in-tca-finish before any session docs are touched.
  • Provisioning Invariants (intent/docs/total-codebase-audit.md section 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.sh provisioning guards: refuse to provision inside an existing intent/st/ST*/WP/* path (nested-WP antipattern), refuse to overwrite an audit with populated socrates.md files. 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-audit Post-WP: **Agent**: {type}; **Turns**: N; **Raw hits**: N; **FPs**: N at the top of each component audit's socrates.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 the in-tca-init -> in-tca-audit -> in-tca-synthesize -> in-tca-remediate -> in-tca-finish -> in-finish workflow.
  • intent upgrade v2.8.0 -> v2.8.1 step: needs_v2_8_1_upgrade() and migrate_v2_8_0_to_v2_8_1() in bin/intent_helpers, with a matching case branch in bin/intent_upgrade. The migration is a pure version stamp; no project files mutate.

Changed

  • BREAKING (internal TCA scripts): --st-dir renamed to --tca-dir across tca-init.sh, tca-progress.sh, and tca-report.sh and their invocations in in-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 variable ST_DIR was also renamed to TCA_DIR. Direct callers of these scripts must update their invocations. Intent's own skills have been updated.
  • in-tca-finish skill restructured: feedback report lives at $TCA_DIR/feedback-report.md as 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-finish wrap-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, and impl.md all claimed "ST0121 complete" before feedback-report.md existed. The new pre-flight guard makes this mechanically impossible.
  • Silent guard failures in tca-report.sh: initial guard implementations used grep -c ... || echo 0 and grep | wc -l | tr -d ' ', both of which interacted badly with set -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:

  • 58143ae WP-01 Docs: Provisioning Invariants, FP benchmark, dedup KPI framing
  • 55425a6 WP-02 Init hardening: invariant callout, FP Guidance REQUIRED, provisioning guards
  • 57e8155 WP-03 Finish guard: --check-only mode + 4 pre-flight guards, skill restructure
  • f605b37 WP-04 Rename + metadata + chains_to
  • 5b4435f ST0031 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:

  • 3b499ed Backfill missing completion dates on ST info.md frontmatter -- intent st done had been failing to fill in the completed: field reliably. ST0026, ST0027, ST0031 had empty completed: keys; ST0010 was missing the key entirely. Pure metadata correction.
  • 82ba792 Drop legacy .intent/version, use real version in init + bootstrap:
    • bin/intent_init was hardcoding intent_version: "2.1.0" in newly-created .intent/config.json regardless of the current Intent version. Now uses $INTENT_VERSION from get_intent_version.
    • bin/intent_init was also creating a .intent/version file alongside config.json -- a parallel version stamp that was never read by the Intent CLI, never updated by intent upgrade, and only existed to drift out of sync. Removed entirely. .intent/config.json is now the single source of truth for the project's Intent version.
    • bin/intent_bootstrap had the same hardcoded 2.1.0 in the global config template. Same fix.
    • tests/unit/init_commands.bats and tests/unit/bootstrap.bats updated to use dynamic $(get_intent_version) checks instead of hardcoded 2.1.0 assertions.

Compatibility

  • Intent CLI: no user-facing CLI surface changed. intent commands are unchanged.
  • intent upgrade: a v2.8.0 project will upgrade cleanly via intent 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-finish run 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-*.sh scripts: update --st-dir to --tca-dir at 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/version in an existing project, delete it manually -- nothing reads it.

(C) hello@matthewsinclair.com

v2.8.0 - Detrope Skill

28 Mar 16:55

Choose a tag to compare

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) and full (diagnosis + concrete rewrites)
    • Stylometric profile with AI signal strength rating
    • Integrates with Utilz cleanz --detrope for 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

(C) hello@matthewsinclair.com

v2.5.0: Work Packages, Highlander Audit

24 Feb 10:19

Choose a tag to compare

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 plugin

Each plugin now has a plugin.json metadata file for structured discovery.

Help improvements:

  • intent help now shows claude and plugin in the Core section
  • intent help claude -- new help file for the claude namespace
  • intent help plugin -- new help file for the plugin command
  • intent 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 usage

Specifiers 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 migrate commands
  • Removed backlog configuration keys and intent init backlog 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_dir and backlog_list_status configuration 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

17 Feb 16:40

Choose a tag to compare

Added

  • Skills system -- new always-on enforcement layer for Claude Code (ST0020)
    • intent claude skills list -- show available and installed skills
    • intent claude skills install <name> -- install skill(s) to .claude/skills/
    • intent claude skills sync -- update installed skills with latest versions
    • intent claude skills uninstall <name> -- remove Intent-managed skills
    • intent 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.md test 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.txt with common AI-isms (delve, unfortunately, etc.)
  • intent claude upgrade command for diagnosing and upgrading LLM guidance layer
    • Dry-run by default (use --apply to execute)
    • --project-dir DIR to target external projects
    • Diagnoses files, subagents, and skills; generates upgrade plan; applies changes
  • 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.md template with Elixir project overview and commands
    • RULES.md template with 9 core rules + framework rules + NEVER DO list
    • ARCHITECTURE.md template 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 new auto-generates a URL-safe slug: field in frontmatter, max 50 chars (ST0022)
  • -s|--start flag for st new -- create and immediately start a steel thread in one command (ST0022)
  • intent doctor now 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 install now copies entire skill directory (not just SKILL.md)
    • Scripts and supporting files installed alongside SKILL.md
    • intent claude skills sync also copies full directory on update
  • Updated intent agents init to 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 require inside a function body (module level only)
  • Added YAML frontmatter with description field to all SKILL.md files for Claude Code discovery
  • st list and st sync now 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

05 Feb 11:33

Choose a tag to compare

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 stat differences, 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-date

CLI 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 init version display: Now reads from VERSION file instead of showing hardcoded 2.0.0
  • --sync flag: 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 upgrade

If you have the Elixir subagent installed, update it:

intent claude subagents sync

Migration Details

The v2.3.3 -> v2.3.4 migration:

  1. Updates project version in .intent/config.json and VERSION
  2. No structural changes required
  3. The treeindex command is available immediately after upgrade
  4. 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

17 Jul 08:09

Choose a tag to compare

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 instructions
  • intent 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

  • stp command symlinked to intent
  • 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 doctor

Migration 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 content

Breaking Changes

While we maintain backwards compatibility, these changes affect the underlying structure:

  1. Directory paths have changed:

    • stp/prj/st/intent/st/
    • stp/prj/wip.mdintent/wip.md
    • Configuration in .intent/ not .stp/
  2. Configuration format:

    • YAML → JSON
    • New global config location
  3. Repository location:

    • GitHub: matthewsinclair/stpmatthewsinclair/intent

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

  1. Backup your project (automatic, but always good practice)
  2. Run intent upgrade from your project root
  3. Review the migration summary
  4. Update any custom scripts to use intent instead of stp
  5. 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

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"