<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Architecture on DevFlow</title><link>https://devflow.cloud/docs/architecture/</link><description>Recent content in Architecture on DevFlow</description><generator>Hugo</generator><language>en-us</language><atom:link href="https://devflow.cloud/docs/architecture/index.xml" rel="self" type="application/rss+xml"/><item><title>Agents</title><link>https://devflow.cloud/docs/architecture/agents/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://devflow.cloud/docs/architecture/agents/</guid><description>&lt;p&gt;Skills are thin orchestrators. They load state, decide what to dispatch, and spawn&#10;agents — the work happens in the agents, each in its own fresh context window.&lt;/p&gt;&#10;&lt;div class="table-wrap"&gt;&#10;&lt;table&gt;&#10; &lt;thead&gt;&lt;tr&gt;&lt;th&gt;Agent&lt;/th&gt;&lt;th&gt;Role&lt;/th&gt;&lt;th&gt;Quality&lt;/th&gt;&lt;th&gt;Balanced&lt;/th&gt;&lt;th&gt;Budget&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&#10; &lt;tbody&gt;&#10; &lt;tr&gt;&#10; &lt;td&gt;&lt;code&gt;codebase-mapper&lt;/code&gt;&lt;/td&gt;&#10; &lt;td&gt;Analyzes a codebase from a specific angle (stack, architecture, quality, or concerns) and writes structured findings.&lt;/td&gt;&#10; &lt;td&gt;&lt;span class="chip gold"&gt;sonnet&lt;/span&gt;&lt;/td&gt;&#10; &lt;td&gt;&lt;span class="chip gold"&gt;haiku&lt;/span&gt;&lt;/td&gt;&#10; &lt;td&gt;&lt;span class="chip gold"&gt;haiku&lt;/span&gt;&lt;/td&gt;&#10; &lt;/tr&gt;&#10; &lt;tr&gt;&#10; &lt;td&gt;&lt;code&gt;debugger&lt;/code&gt;&lt;br&gt;&lt;span class="chip"&gt;effort xhigh&lt;/span&gt;&lt;/td&gt;&#10; &lt;td&gt;Investigates bugs using a structured scientific method with persistent session state across context resets.&lt;/td&gt;&#10; &lt;td&gt;&lt;span class="chip gold"&gt;opus&lt;/span&gt;&lt;/td&gt;&#10; &lt;td&gt;&lt;span class="chip gold"&gt;sonnet&lt;/span&gt;&lt;/td&gt;&#10; &lt;td&gt;&lt;span class="chip gold"&gt;sonnet&lt;/span&gt;&lt;/td&gt;&#10; &lt;/tr&gt;&#10; &lt;tr&gt;&#10; &lt;td&gt;&lt;code&gt;executor&lt;/code&gt;&lt;br&gt;&lt;span class="chip"&gt;effort xhigh&lt;/span&gt;&lt;/td&gt;&#10; &lt;td&gt;Executes planned tasks with atomic git commits, handles deviations, and manages checkpoints during builds.&lt;/td&gt;&#10; &lt;td&gt;&lt;span class="chip gold"&gt;opus&lt;/span&gt;&lt;/td&gt;&#10; &lt;td&gt;&lt;span class="chip gold"&gt;sonnet&lt;/span&gt;&lt;/td&gt;&#10; &lt;td&gt;&lt;span class="chip gold"&gt;sonnet&lt;/span&gt;&lt;/td&gt;&#10; &lt;/tr&gt;&#10; &lt;tr&gt;&#10; &lt;td&gt;&lt;code&gt;integration-checker&lt;/code&gt;&lt;/td&gt;&#10; &lt;td&gt;Verifies that separately-built features connect properly and end-to-end user workflows actually work.&lt;/td&gt;&#10; &lt;td&gt;&lt;span class="chip gold"&gt;sonnet&lt;/span&gt;&lt;/td&gt;&#10; &lt;td&gt;&lt;span class="chip gold"&gt;sonnet&lt;/span&gt;&lt;/td&gt;&#10; &lt;td&gt;&lt;span class="chip gold"&gt;haiku&lt;/span&gt;&lt;/td&gt;&#10; &lt;/tr&gt;&#10; &lt;tr&gt;&#10; &lt;td&gt;&lt;code&gt;job-checker&lt;/code&gt;&lt;/td&gt;&#10; &lt;td&gt;Reviews execution plans before they run to verify they will actually achieve the objective goal.&lt;/td&gt;&#10; &lt;td&gt;&lt;span class="chip gold"&gt;sonnet&lt;/span&gt;&lt;/td&gt;&#10; &lt;td&gt;&lt;span class="chip gold"&gt;sonnet&lt;/span&gt;&lt;/td&gt;&#10; &lt;td&gt;&lt;span class="chip gold"&gt;haiku&lt;/span&gt;&lt;/td&gt;&#10; &lt;/tr&gt;&#10; &lt;tr&gt;&#10; &lt;td&gt;&lt;code&gt;objective-researcher&lt;/code&gt;&lt;/td&gt;&#10; &lt;td&gt;Researches how to implement an objective — discovers best practices, patterns, and pitfalls before planning begins.&lt;/td&gt;&#10; &lt;td&gt;&lt;span class="chip gold"&gt;opus&lt;/span&gt;&lt;/td&gt;&#10; &lt;td&gt;&lt;span class="chip gold"&gt;sonnet&lt;/span&gt;&lt;/td&gt;&#10; &lt;td&gt;&lt;span class="chip gold"&gt;haiku&lt;/span&gt;&lt;/td&gt;&#10; &lt;/tr&gt;&#10; &lt;tr&gt;&#10; &lt;td&gt;&lt;code&gt;planner&lt;/code&gt;&lt;br&gt;&lt;span class="chip"&gt;effort xhigh&lt;/span&gt;&lt;/td&gt;&#10; &lt;td&gt;Creates detailed execution plans for objectives with task breakdown, dependency ordering, and built-in quality checks.&lt;/td&gt;&#10; &lt;td&gt;&lt;span class="chip gold"&gt;opus&lt;/span&gt;&lt;/td&gt;&#10; &lt;td&gt;&lt;span class="chip gold"&gt;opus&lt;/span&gt;&lt;/td&gt;&#10; &lt;td&gt;&lt;span class="chip gold"&gt;sonnet&lt;/span&gt;&lt;/td&gt;&#10; &lt;/tr&gt;&#10; &lt;tr&gt;&#10; &lt;td&gt;&lt;code&gt;project-researcher&lt;/code&gt;&lt;/td&gt;&#10; &lt;td&gt;Researches the domain ecosystem for a new project — stack options, architecture patterns, features, and common pitfalls.&lt;/td&gt;&#10; &lt;td&gt;&lt;span class="chip gold"&gt;opus&lt;/span&gt;&lt;/td&gt;&#10; &lt;td&gt;&lt;span class="chip gold"&gt;sonnet&lt;/span&gt;&lt;/td&gt;&#10; &lt;td&gt;&lt;span class="chip gold"&gt;haiku&lt;/span&gt;&lt;/td&gt;&#10; &lt;/tr&gt;&#10; &lt;tr&gt;&#10; &lt;td&gt;&lt;code&gt;research-synthesizer&lt;/code&gt;&lt;/td&gt;&#10; &lt;td&gt;Combines findings from multiple parallel research agents into a unified summary for roadmap creation.&lt;/td&gt;&#10; &lt;td&gt;&lt;span class="chip gold"&gt;sonnet&lt;/span&gt;&lt;/td&gt;&#10; &lt;td&gt;&lt;span class="chip gold"&gt;sonnet&lt;/span&gt;&lt;/td&gt;&#10; &lt;td&gt;&lt;span class="chip gold"&gt;haiku&lt;/span&gt;&lt;/td&gt;&#10; &lt;/tr&gt;&#10; &lt;tr&gt;&#10; &lt;td&gt;&lt;code&gt;roadmapper&lt;/code&gt;&lt;br&gt;&lt;span class="chip"&gt;effort high&lt;/span&gt;&lt;/td&gt;&#10; &lt;td&gt;Creates project roadmaps by breaking requirements into ordered objectives with success criteria and dependency mapping.&lt;/td&gt;&#10; &lt;td&gt;&lt;span class="chip gold"&gt;opus&lt;/span&gt;&lt;/td&gt;&#10; &lt;td&gt;&lt;span class="chip gold"&gt;sonnet&lt;/span&gt;&lt;/td&gt;&#10; &lt;td&gt;&lt;span class="chip gold"&gt;sonnet&lt;/span&gt;&lt;/td&gt;&#10; &lt;/tr&gt;&#10; &lt;tr&gt;&#10; &lt;td&gt;&lt;code&gt;security-auditor&lt;/code&gt;&lt;br&gt;&lt;span class="chip"&gt;effort xhigh&lt;/span&gt;&lt;/td&gt;&#10; &lt;td&gt;Scans codebase for security vulnerabilities in a specific domain: secrets, auth flows, or dependency risks.&lt;/td&gt;&#10; &lt;td&gt;&lt;span class="chip gold"&gt;opus&lt;/span&gt;&lt;/td&gt;&#10; &lt;td&gt;&lt;span class="chip gold"&gt;sonnet&lt;/span&gt;&lt;/td&gt;&#10; &lt;td&gt;&lt;span class="chip gold"&gt;sonnet&lt;/span&gt;&lt;/td&gt;&#10; &lt;/tr&gt;&#10; &lt;tr&gt;&#10; &lt;td&gt;&lt;code&gt;ui-evaluator&lt;/code&gt;&lt;br&gt;&lt;span class="chip"&gt;effort high&lt;/span&gt;&lt;/td&gt;&#10; &lt;td&gt;Machine-judges the visual correctness of Flutter UI states by capturing each declared surface, scoring it through the offline visual-eval engine, and writing evidence the verifier consumes.&lt;/td&gt;&#10; &lt;td&gt;&lt;span class="chip gold"&gt;opus&lt;/span&gt;&lt;/td&gt;&#10; &lt;td&gt;&lt;span class="chip gold"&gt;sonnet&lt;/span&gt;&lt;/td&gt;&#10; &lt;td&gt;&lt;span class="chip gold"&gt;sonnet&lt;/span&gt;&lt;/td&gt;&#10; &lt;/tr&gt;&#10; &lt;tr&gt;&#10; &lt;td&gt;&lt;code&gt;verifier&lt;/code&gt;&lt;/td&gt;&#10; &lt;td&gt;Verifies that built code actually achieves the objective goal, not just that tasks were completed.&lt;/td&gt;&#10; &lt;td&gt;&lt;span class="chip gold"&gt;sonnet&lt;/span&gt;&lt;/td&gt;&#10; &lt;td&gt;&lt;span class="chip gold"&gt;sonnet&lt;/span&gt;&lt;/td&gt;&#10; &lt;td&gt;&lt;span class="chip gold"&gt;haiku&lt;/span&gt;&lt;/td&gt;&#10; &lt;/tr&gt;&#10; &lt;/tbody&gt;&#10;&lt;/table&gt;&#10;&lt;/div&gt;&#10;&#10;&lt;h2 id="how-an-agent-is-defined"&gt;How an agent is defined&lt;/h2&gt;&#10;&lt;p&gt;Each agent is a single markdown file in &lt;code&gt;plugins/devflow/agents/&lt;/code&gt; with YAML&#10;frontmatter and an XML-structured body:&lt;/p&gt;</description></item><item><title>Hooks</title><link>https://devflow.cloud/docs/architecture/hooks/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://devflow.cloud/docs/architecture/hooks/</guid><description>&lt;p&gt;Hooks run in a separate process, receive the tool call as JSON on stdin, and can&#10;inject context, warn, or block execution outright. They are the difference between&#10;a convention and a rule.&lt;/p&gt;&#10;&lt;p&gt;All hooks are declared in &lt;code&gt;plugins/devflow/hooks/hooks.json&lt;/code&gt; and registered&#10;automatically when the plugin is enabled. Every command uses&#10;&lt;code&gt;${CLAUDE_PLUGIN_ROOT}&lt;/code&gt; for path resolution.&lt;/p&gt;&#10;&lt;h2 id="enforcement--these-can-block"&gt;Enforcement — these can block&lt;/h2&gt;&#10;&lt;div class="table-wrap"&gt;&#10;&lt;table&gt;&#10; &lt;thead&gt;&lt;tr&gt;&lt;th&gt;Hook&lt;/th&gt;&lt;th&gt;Event&lt;/th&gt;&lt;th&gt;What it does&lt;/th&gt;&lt;th&gt;Escape hatch&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&#10; &lt;tbody&gt;&#10; &lt;tr&gt;&#10; &lt;td&gt;&lt;code&gt;changelog-on-tag.js&lt;/code&gt;&lt;/td&gt;&#10; &lt;td&gt;&lt;span class="chip"&gt;PreToolUse (Bash)&lt;/span&gt; &lt;/td&gt;&#10; &lt;td&gt;Blocks &lt;code&gt;git tag -a vX.Y.Z&lt;/code&gt; unless CHANGELOG.md has a &lt;code&gt;## [X.Y.Z]&lt;/code&gt; heading and the three release manifests carry matching versions.&lt;/td&gt;&#10; &lt;td&gt;&lt;code&gt;DEVFLOW_SKIP_CHANGELOG_GATE=1&lt;/code&gt;&lt;/td&gt;&#10; &lt;/tr&gt;&#10; &lt;tr&gt;&#10; &lt;td&gt;&lt;code&gt;gate-commits.js&lt;/code&gt;&lt;/td&gt;&#10; &lt;td&gt;&lt;span class="chip"&gt;PreToolUse (Bash)&lt;/span&gt; &lt;/td&gt;&#10; &lt;td&gt;Blocks raw &lt;code&gt;git commit&lt;/code&gt; and redirects to &lt;code&gt;df-tools commit&lt;/code&gt;, which preserves objective scope and task IDs and updates STATE.md. Detection is invocation-aware: heredoc bodies and quoted arguments are stripped first, so prose that merely mentions the command is not gated.&lt;/td&gt;&#10; &lt;td&gt;&lt;code&gt;DEVFLOW_ALLOW_RAW_COMMIT=1&lt;/code&gt;&lt;/td&gt;&#10; &lt;/tr&gt;&#10; &lt;tr&gt;&#10; &lt;td&gt;&lt;code&gt;gate-edits.js&lt;/code&gt;&lt;/td&gt;&#10; &lt;td&gt;&lt;span class="chip"&gt;PreToolUse (Edit|Write|MultiEdit)&lt;/span&gt; &lt;/td&gt;&#10; &lt;td&gt;Strict DENY by default in ambient mode. Allows edits when a live &lt;code&gt;.planning/.skill-active&lt;/code&gt; marker exists (resolved from both the local and the main checkout, so worktree-isolated agents are not denied by a marker they cannot see), when the prompt carries an override phrase, or when the env escape is set. Targets outside the project root are never gated. Severity is per-project via &lt;code&gt;gates.editGate&lt;/code&gt;.&lt;/td&gt;&#10; &lt;td&gt;&lt;code&gt;DEVFLOW_SKIP_EDIT_GATE=1&lt;/code&gt;&lt;/td&gt;&#10; &lt;/tr&gt;&#10; &lt;tr&gt;&#10; &lt;td&gt;&lt;code&gt;gate-interactive.js&lt;/code&gt;&lt;/td&gt;&#10; &lt;td&gt;&lt;span class="chip"&gt;PreToolUse (Bash)&lt;/span&gt; &lt;/td&gt;&#10; &lt;td&gt;Intercepts TTY-requiring commands and routes them to the handoff watcher rather than letting them hang on a prompt no one can answer.&lt;/td&gt;&#10; &lt;td&gt;&lt;span style="color:var(--text-muted)"&gt;—&lt;/span&gt;&lt;/td&gt;&#10; &lt;/tr&gt;&#10; &lt;tr&gt;&#10; &lt;td&gt;&lt;code&gt;guard-no-progress.js&lt;/code&gt;&lt;/td&gt;&#10; &lt;td&gt;&lt;span class="chip"&gt;PreToolUse (*)&lt;/span&gt; &lt;/td&gt;&#10; &lt;td&gt;Detects the same tool being called with identical arguments repeatedly: warns at 3, escalates to &lt;code&gt;ask&lt;/code&gt; at 5, and resets whenever the agent varies its approach. Step limits cannot catch a stuck loop — they only fire once the whole budget is spent.&lt;/td&gt;&#10; &lt;td&gt;&lt;code&gt;DEVFLOW_SKIP_PROGRESS_GUARD=1&lt;/code&gt;&lt;/td&gt;&#10; &lt;/tr&gt;&#10; &lt;tr&gt;&#10; &lt;td&gt;&lt;code&gt;route-intent.js&lt;/code&gt;&lt;/td&gt;&#10; &lt;td&gt;&lt;span class="chip"&gt;UserPromptSubmit&lt;/span&gt; &lt;/td&gt;&#10; &lt;td&gt;Matches the prompt against build/plan/verify/debug intent and injects a directive to route through the matching skill instead of editing code directly. Regexes require imperative form, so plain questions do not trip it.&lt;/td&gt;&#10; &lt;td&gt;&lt;span style="color:var(--text-muted)"&gt;—&lt;/span&gt;&lt;/td&gt;&#10; &lt;/tr&gt;&#10; &lt;/tbody&gt;&#10;&lt;/table&gt;&#10;&lt;/div&gt;&#10;&#10;&lt;h3 id="gate-edits-is-the-one-you-will-meet"&gt;gate-edits is the one you will meet&lt;/h3&gt;&#10;&lt;p&gt;In ambient mode — DevFlow project detected, no skill running — &lt;code&gt;gate-edits&lt;/code&gt;&#10;&lt;strong&gt;denies&lt;/strong&gt; &lt;code&gt;Edit&lt;/code&gt;, &lt;code&gt;Write&lt;/code&gt; and &lt;code&gt;MultiEdit&lt;/code&gt; by default. That is intentional: it is&#10;what forces work through skills instead of ad-hoc edits that leave no plan, no&#10;summary and no atomic commits.&lt;/p&gt;</description></item><item><title>Plugin layout</title><link>https://devflow.cloud/docs/architecture/plugin-layout/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://devflow.cloud/docs/architecture/plugin-layout/</guid><description>&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;plugins/devflow/&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;├── .claude-plugin/plugin.json manifest — name, version, statusLine&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;├── skills/&amp;lt;name&amp;gt;/SKILL.md user-invocable slash commands&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;├── agents/&amp;lt;agent&amp;gt;.md subagent prompts&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;├── hooks/&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;│ ├── hooks.json event registrations, auto-loaded&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;│ ├── sync-runtime.js SessionStart: mirrors devflow/ → ~/.claude/devflow/&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;│ └── *.js the rest of the hooks&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;└── devflow/ runtime, mirrored to ~/.claude/devflow/&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; ├── bin/df-tools.cjs the central CLI&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; ├── bin/lib/*.cjs df-tools internals&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; ├── workflows/&amp;lt;name&amp;gt;.md workflow bodies, referenced via @~/.claude/devflow/...&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; ├── references/&amp;lt;name&amp;gt;.md static docs agents read at runtime&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; └── templates/&amp;lt;name&amp;gt;.md files copied into user projects&amp;#39; .planning/&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="skills"&gt;Skills&lt;/h2&gt;&#10;&lt;p&gt;A skill is a directory containing exactly one &lt;code&gt;SKILL.md&lt;/code&gt;:&lt;/p&gt;</description></item></channel></rss>