v3.1.0: .devloop/ project-config convention
3.1.0
A single project-local home for devloop's per-project files: .devloop/.
This fixes config discovery under a plugin install (where the skills live
in a read-only shared cache and a PROJECT.md beside SKILL.md never
resolves in the user's project) and gives trackers a stable home outside
docs/.
Added
.devloop/convention: skills and agents read project config from
.devloop/in the project root:config.md, engineering config (build/test/lint commands, architecture
rules, standards, blindspots, commit conventions, and the spec/tracker
directory settings), read by/plan,/implement,review-plan,
review-impl,red-team, and/spec(for the spec-directory setting).domain.md, pure domain knowledge (domain context, architecture
overview, domain-specific concerns, existing patterns, quality
standards), read by/spec.trackers/, home forimpl-tracker-<feature>.json, written by/plan.
- Config discovery: each skill and agent resolves config as
.devloop/<file>in the project, else generic mode. This is why a plugin
install now works: the read-only cache holds the skills, but they read
.devloop/from the project. There is no copied-inPROJECT.mdfallback
(the old template files are removed);.devloop/is the only
project-config source. validate.shsection 17: fails if a core file reintroduces the
plugin-cache config pointer ("plugin's skill directory") and requires each
skill and review agent to name the.devloop/home.validate.shsection 16 now also rejects en dashes (not just em
dashes), closing a gap in the standard-punctuation guard.- Plugin marketplaces:
.claude-plugin/marketplace.json(Claude Code)
and.agents/plugins/marketplace.json(Codex, its native catalog
location) so devloop installs via
/plugin marketplace add KashZod/devloopthen
/plugin install devloop@kashzod, and thecodex plugin marketplace add
/codex plugin addequivalents.
Changed
- Config ownership:
config.mdowns the operational paths (spec
directory, tracker directory) alongside the engineering settings;
domain.mdis now purely domain knowledge. Commit conventions live only
inconfig.md(read by the skills that commit)./specreads its output
path fromconfig.mdand its domain context fromdomain.md. - Tracker home:
/planwrites trackers to.devloop/trackers/by
default (wasdocs/);/implement,review-plan, andreview-impl
look there. - Example configs live in one place per stack under a top-level
examples/<stack>/(typescript-node,python,rust,
android-kotlin), each holding aconfig.mdand adomain.md; copy the
closest directory to.devloop/. This replaces the split
skills/spec/project-configs/(domain) and
skills/implement/project-configs/(engineering) layout, and
validate.shnow checks the examples in a single section (the former
duplicate example-config check is removed). /implementPhase 3 sizes thered-teamhalf by diff size, the
same way/plansizes work (its Trivial / Small / Medium+ / Large
table). A single-file change (or a trivial one with no new logic) runs
onered-teaminmode: both, unchanged from before. A broader,
multi-file or cross-cutting diff (/planMedium+ and Large) splits the
red-teamhalf into parallelmode: bugsandmode: cleanupruns so
neither family crowds the other out.review-implruns alongside in
every case. Becausered-teaminmode: cleanupcan apply fixes, the
split invokes thecleanuprun report-only, so all three concurrent
agents only report and the parallel gate stays read-only. No new
red-teammode was added; report-only is an invocation instruction
insidecleanupmode.validate.shsection 18 asserts the Phase 3 spawn stays
size-adaptive (it names themode: both,mode: bugs,mode: cleanup,
andreport-onlymarkers), so a future edit can't silently revert to
the fixed single-agent gate.
Migration
- Move in-flight trackers. Trackers previously written under
docs/
now live in.devloop/trackers/, and this release drops thedocs/
read-fallback. Move any existingdocs/impl-tracker-*.jsoninto
.devloop/trackers/, or pass an explicit tracker path when invoking
/implementor the review agents. - Migrate an old
PROJECT.md. The copied-inPROJECT.mdfallback is
gone;.devloop/is the only project-config source. Split any old
PROJECT.mdinto.devloop/config.md(engineering settings and paths)
and.devloop/domain.md(domain knowledge), or copy the closest
examples/<stack>/directory as a starting point.
Fixed
- Valid Claude Code manifest.
.claude-plugin/plugin.jsonno longer
enumeratesskills/agentsas arrays of objects, a shape the current
schema rejects (claude plugin validatereportedskills: Invalid input
/agents: Invalid input). Claude Code auto-discoversskills/and
agents/, so the keys are dropped; the manifest now passes
claude plugin validate --strict. The Claude manifest also gains
repositoryandlicense, matching the Codex manifest.