autoflow
v0.1.26v0.1.25: `is_autonomous()` reads the shared autonomy switch (harness_core::autonomy) in-process instead of shelling out to `condukt state autonomy-check`. The subprocess made the answer depend on `condukt` being on PATH, and a PATH miss came back as exit-non-zero -- byte-identical to a deliberate 'not autonomous', i.e. a cannot-determine read as a verdict (CLAUDE.md section 3). Still fail-closed: an unreadable switch file resolves to NOT autonomous and its warning is surfaced on stderr. Scope note: this reads the SHARED switch, not condukt's private config.toml `autonomous`; it is consulted only to word the visible EscalateStuck message, which blocks either way. v0.1.23 is the integration point where this machine's line merges origin/main (e018fe91). It carries no behaviour change of its own: autoflow's code here is the remote's v0.1.22 retirement verbatim, and the number moves only because both merge parents had already published 0.1.22 for different trees, so leaving it in place would strand this tree behind a version nobody can distinguish. v0.1.22 RETIRES the backlog nudges on the user's instruction. Three paths asked the operator to work the queue and two of them are gone: the SessionStart hook that injected "バックログに {n} 件 (最優先: '{title}')。/flow で開始しますか?" (and "/compass で再接地して から /flow を実行してください" when the charter was stale), and the Stop-hook arm that, once the condukt pending set emptied, read the queue and BLOCKED the stop with "残課題バック ログに {n} 件…/backlog を実行してください" — every turn, until the queue emptied — behind a compass-freshness gate that existed only to guard that auto-driving. The condukt arm stays: an in-flight run this session started and abandoned is an accident, while a queue item nobody has started is not, and asking about it every turn adds no information. Repetition is not detection. What went with them, so nothing is left half-wired: the `session-start` subcommand and its hooks.json entry, the launcher's `session-start` arm (the arg now falls through to the catch-all `exit 1` — a retired hook name must not get a successful-looking reply), the `compass` module (its only caller was the gate), `backlog::find_open` plus `BacklogItem` (a queue reader with no consumer invites the next author to re-wire it), and the `backlog_prev_open`/`backlog_no_progress_streak` state fields (write-only once nothing observes the queue — serde keeps such fields invisible to the compiler, and a field claiming to count observations never made is the same drift as a stale comment). The Phase::Done latch changes its PREMISE and keeps resting on an observation: it was "condukt empty AND backlog empty", it is now "this condukt run has no pending task", whose `Determination::Undetermined` arm still blocks — Done is never reached by failing to look. Two tests were not deleted into silence but INVERTED on the same input, so the retirement is pinned rather than merely performed: a stub backlog answering with a pending item must now produce no block, no mention of the task, and no "/backlog" or "/flow" string (a re-worded nudge is still a nudge, which `blocks()` alone would miss), and an answer in an unrecognised status vocabulary — which used to block as undetermined — must now be ignored because no question is being asked. Kill power is measured, not argued: at 0ce4894a both old tests were green, and against this revision the same input yields "a readable, pending queue must drive /backlog, got: \"\"". `pending_run_state_still_drives_condukt` remains the anti-vacuity control, so "silent" here means "chose not to nudge", not "never ran". Session-end auto-flow gate: on Stop, prompt /record once, then loop /condukt and /backlog while work keeps *progressing* — continuation is progress-based (no call-count ceiling); stalled progress escalates *visibly* and the loop stops only when the pending/open set is empty. Subscription-native (one hook + bundled Rust binary, no API key). v0.1.19: an explicit user stop now stands the loop down for that Stop only — see `stop_intent`: if the user's most recent transcript signal (a typed message, or their answer to an `AskUserQuestion`) is an explicit stop instruction (e.g. "止めて"/"stop"), the Stop is allowed through untouched instead of blocking with a backlog/condukt nudge. Not a session-wide latch — no `Phase::Done` is set, so ordinary nagging resumes if the user keeps working afterward. v0.1.17: an observation autoflow could NOT make no longer reads as "no work left" — `backlog::find_open` / `condukt::find_pending` / `find_backlog_binary` now return `harness_core::verdict::Determination`, so an unreadable run-state, an unparseable or non-zero `backlog list`, a queue answering in an unknown status vocabulary, and an unlistable plugin-cache dir are `Undetermined` instead of an empty set. `Phase::Done` (a per-session silence latch) now requires an observed-empty queue; undetermined blocks visibly via `Verdict::stop_decision()`, and an undetermined binary lookup stands the auto-loop down instead of double-driving a live queue. v0.1.16: replaced the count-proxy stops with progress-based continuation (backlog 422d256a facets 822c7209/9aa0031f) — removed the condukt loop's auto-≤4×/ask-from-5× count split and the backlog loop's silent Phase::Done at max_backlog_prompts; both now continue while the remaining-work set shrinks and escalate visibly (never silently) via a no-progress streak vs cfg.stuck_threshold (default 3), consulting condukt state autonomy-check for the escalation wording. v0.1.15: strengthened the Tier 2 delegation-record advisory's own regression test (skill_doc_text_quoting_backlog_lock_acquire_never_fires) after an independent verifier found the prior fixture vacuous — no functional code change. v0.1.14: Tier 2 delegation-record advisory now matches only genuine executed Bash tool_use invocations (not raw transcript prose/doc text) and scopes run-completion checks to THIS session's own condukt run id (not the project-wide latest run file), fixing two false-positive classes (backlog d8051ed4). v0.1.9: Stop hook now runs under harness-core's run_guarded panic barrier (fail-closed block on crash instead of silent allow).
By yukineko0 GitHub starsUpdated yesterday
Directory evidence
- Runtimes
- Claude Code
- Parsed components
- 0 skill or MCP entries
- Source updated
- Sep 23, 2026
- Manifest status
- Canonical path parsed
The directory validates manifest shape and source location. It does not execute the plugin or provide a security endorsement. Review the indexing methodology →
Install autoflow for Claude Code
claude plugin marketplace add IchenDEV/agent-plugin-mkt
claude plugin marketplace update agent-plugin-marketplace
claude plugin install autoflow@agent-plugin-marketplacePaste and run these commands in a terminal with Claude Code. They add and refresh the PluginsMP catalog, then install this plugin.
The installer fetches third-party code from the source repository shown on this page. This directory validates manifest structure and source location, but does not perform a security audit; review the manifest, components, and source before installing.
Get the source manually
git clone https://github.com/yukineko/claude-harnessesClone the source repository, then follow its setup instructions to add the plugin to a compatible client. The plugin root is crates/autoflow/.
Plugin files
└── .claude-plugin/plugin.json
Plugin manifests1
{
"name": "autoflow",
"version": "0.1.26",
"description": "v0.1.25: `is_autonomous()` reads the shared autonomy switch (harness_core::autonomy) in-process instead of shelling out to `condukt state autonomy-check`. The subprocess made the answer depend on `condukt` being on PATH, and a PATH miss came back as exit-non-zero -- byte-identical to a deliberate 'not autonomous', i.e. a cannot-determine read as a verdict (CLAUDE.md section 3). Still fail-closed: an unreadable switch file resolves to NOT autonomous and its warning is surfaced on stderr. Scope note: this reads the SHARED switch, not condukt's private config.toml `autonomous`; it is consulted only to word the visible EscalateStuck message, which blocks either way. v0.1.23 is the integration point where this machine's line merges origin/main (e018fe91). It carries no behaviour change of its own: autoflow's code here is the remote's v0.1.22 retirement verbatim, and the number moves only because both merge parents had already published 0.1.22 for different trees, so leaving it in place would strand this tree behind a version nobody can distinguish. v0.1.22 RETIRES the backlog nudges on the user's instruction. Three paths asked the operator to work the queue and two of them are gone: the SessionStart hook that injected \"バックログに {n} 件 (最優先: '{title}')。/flow で開始しますか?\" (and \"/compass で再接地して から /flow を実行してください\" when the charter was stale), and the Stop-hook arm that, once the condukt pending set emptied, read the queue and BLOCKED the stop with \"残課題バック ログに {n} 件…/backlog を実行してください\" — every turn, until the queue emptied — behind a compass-freshness gate that existed only to guard that auto-driving. The condukt arm stays: an in-flight run this session started and abandoned is an accident, while a queue item nobody has started is not, and asking about it every turn adds no information. Repetition is not detection. What went with them, so nothing is left half-wired: the `session-start` subcommand and its hooks.json entry, the launcher's `session-start` arm (the arg now falls through to the catch-all `exit 1` — a retired hook name must not get a successful-looking reply), the `compass` module (its only caller was the gate), `backlog::find_open` plus `BacklogItem` (a queue reader with no consumer invites the next author to re-wire it), and the `backlog_prev_open`/`backlog_no_progress_streak` state fields (write-only once nothing observes the queue — serde keeps such fields invisible to the compiler, and a field claiming to count observations never made is the same drift as a stale comment). The Phase::Done latch changes its PREMISE and keeps resting on an observation: it was \"condukt empty AND backlog empty\", it is now \"this condukt run has no pending task\", whose `Determination::Undetermined` arm still blocks — Done is never reached by failing to look. Two tests were not deleted into silence but INVERTED on the same input, so the retirement is pinned rather than merely performed: a stub backlog answering with a pending item must now produce no block, no mention of the task, and no \"/backlog\" or \"/flow\" string (a re-worded nudge is still a nudge, which `blocks()` alone would miss), and an answer in an unrecognised status vocabulary — which used to block as undetermined — must now be ignored because no question is being asked. Kill power is measured, not argued: at 0ce4894a both old tests were green, and against this revision the same input yields \"a readable, pending queue must drive /backlog, got: \\\"\\\"\". `pending_run_state_still_drives_condukt` remains the anti-vacuity control, so \"silent\" here means \"chose not to nudge\", not \"never ran\". Session-end auto-flow gate: on Stop, prompt /record once, then loop /condukt and /backlog while work keeps *progressing* — continuation is progress-based (no call-count ceiling); stalled progress escalates *visibly* and the loop stops only when the pending/open set is empty. Subscription-native (one hook + bundled Rust binary, no API key). v0.1.19: an explicit user stop now stands the loop down for that Stop only — see `stop_intent`: if the user's most recent transcript signal (a typed message, or their answer to an `AskUserQuestion`) is an explicit stop instruction (e.g. \"止めて\"/\"stop\"), the Stop is allowed through untouched instead of blocking with a backlog/condukt nudge. Not a session-wide latch — no `Phase::Done` is set, so ordinary nagging resumes if the user keeps working afterward. v0.1.17: an observation autoflow could NOT make no longer reads as \"no work left\" — `backlog::find_open` / `condukt::find_pending` / `find_backlog_binary` now return `harness_core::verdict::Determination`, so an unreadable run-state, an unparseable or non-zero `backlog list`, a queue answering in an unknown status vocabulary, and an unlistable plugin-cache dir are `Undetermined` instead of an empty set. `Phase::Done` (a per-session silence latch) now requires an observed-empty queue; undetermined blocks visibly via `Verdict::stop_decision()`, and an undetermined binary lookup stands the auto-loop down instead of double-driving a live queue. v0.1.16: replaced the count-proxy stops with progress-based continuation (backlog 422d256a facets 822c7209/9aa0031f) — removed the condukt loop's auto-≤4×/ask-from-5× count split and the backlog loop's silent Phase::Done at max_backlog_prompts; both now continue while the remaining-work set shrinks and escalate visibly (never silently) via a no-progress streak vs cfg.stuck_threshold (default 3), consulting condukt state autonomy-check for the escalation wording. v0.1.15: strengthened the Tier 2 delegation-record advisory's own regression test (skill_doc_text_quoting_backlog_lock_acquire_never_fires) after an independent verifier found the prior fixture vacuous — no functional code change. v0.1.14: Tier 2 delegation-record advisory now matches only genuine executed Bash tool_use invocations (not raw transcript prose/doc text) and scopes run-completion checks to THIS session's own condukt run id (not the project-wide latest run file), fixing two false-positive classes (backlog d8051ed4). v0.1.9: Stop hook now runs under harness-core's run_guarded panic barrier (fail-closed block on crash instead of silent allow).",
"author": {
"name": "yukineko"
},
"keywords": [
"hooks",
"session",
"record",
"condukt",
"automation",
"rust"
]
}For maintainers
If you maintain this plugin, link to this source-backed listing from your README so users can review its manifest and indexed components.
[autoflow on Agent Plugins Marketplace](https://pluginsmp.com/plugins/autoflow)