From plastic
Autonomous intent delivery — agent takes over How and Exec. Use when user says "auto", "take it from here", "deliver this", or when brainstorming-grill-me concludes and user confirms autonomous execution. Requires an active intent in INDEX.md.
How this skill is triggered — by the user, by Claude, or both
Slash command
/plastic:autoThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
Announce: "Taking over intent [ID] — [name] for autonomous delivery."
Announce: "Taking over intent [ID] — [name] for autonomous delivery."
An active intent MUST exist in INDEX.md. If none exists, refuse: "No active intent found. Create one first with /plastic-creating-intent."
If multiple active intents exist, ask the user which one to deliver (this is the only question auto asks).
Picking work when no intent is specified. If the user says "auto" without naming an intent and none is active, consult the dashboard's machine-readable queue to choose the next dispatchable intent:
ruby ~/.plastic/scripts/dashboard.rb all --json
Work dispatchable_queue in rank order (these are defer/research dispositions —
safe to deliver autonomously). Leave human_only and next_big_thing for the user — those
are drive/triage items the human should lead. See the plastic-dashboard skill.
Immediately after selecting the intent — before any other work — arm auto mode. This writes the session bridge that makes the code-edit gate live, so project code cannot be edited before the plan exists (the gate applies to YOU, the orchestrator):
ruby -r ~/.plastic/scripts/lib/bridge -e \
'Bridge.arm_auto(ENV["CLAUDE_SESSION_ID"], intent_id: "<ID>", intent_dir: "<STORE>/<dir>", store: "<STORE>", name: "<name>")'
Replace <ID>, <STORE> (e.g. ~/.plastic/projects/<slug>/store or ~/.plastic/store),
<dir> (the ID--slug directory), and <name>. If CLAUDE_SESSION_ID is unset, arm_auto
falls back to a deterministic derived bridge key (a hash of the store and intent id), so the
gate still engages; arming prints a one-line notice to stderr in that case.
Hard rule for the rest of this run: do NOT edit project code (anything outside the
intent directory / ~/.plastic/) until plan.md AND checklist.md exist for the intent.
Honor the cycle: What → Why (spec.md) → How (plan.md + actions/ + checklist.md) → Exec.
--skip-permissions — bypass hard stops on destructive actions on existing projects. Full trust mode. Default: off.Auto mode spins up exactly ONE enforcer-led team per intent. The plastic-enforcer IS this orchestrator (you), not a separately dispatched agent, which avoids the who-gates-the-gater regress.
Roster (one role per cycle stage):
## Context + ### Decisionsspec.md)plan.md + actions/ + checklist.md)## Insights)Dispatch rule: sequential, one specialist per stage on one branch (the deliverables share files). Gate each deliverable against the stage's exit criteria before handing off. The How and Exec phases below default to Plastic's native dispatch (plastic-executing-plan) and delegate to the superpowers skills only when they are available or the user asks; do not restate the phase mechanics here.
Spawn preamble (live-state injection): before dispatching any specialist, run scripts/spawn-preamble <intent_dir> --role <role> and PREPEND its output to that specialist's prompt. The preamble is a deterministic, filesystem-only snapshot of the active intent (id, intent line, current stage) plus the honoring instruction, so every spawned agent boots with accurate live state instead of guessing. This is the authoritative L2 mechanism for harnesses whose sub-agents do not inherit a top-level session event (see docs/reference/harness-adapters.md).
Final-gate review: dispatch an independent reviewer subagent at the final gate only, not as a standing role.
Headless manual gate: when running headless or in the background, enforce gates manually and do not rely on hooks, because CLAUDE_SESSION_ID may be unset (this ties to the arm-gate fallback above).
Solo fallback: if the harness has no subagent dispatch, fall back to a single agent walking the full What, Why, How, Exec cycle yourself. This preserves current behavior.
Read the active intent's directory. Determine current lifecycle stage from filesystem state:
| Check (in order) | Stage |
|---|---|
checklist.md exists with some items checked | Resume Exec from last unchecked item |
plan.md + checklist.md exist (no items checked) | Enter Exec |
spec.md exists, no plan.md | Enter How |
## Context has content in intent file, no spec.md | Complete Why (fill gaps, write spec.md) |
Only ## Intent exists | Start Why from scratch |
Announce which stage you're entering and why.
When entering at Why stage:
## Context and ### Decisions from the intent file## Links), web search if needed. NO questions to human.## Context > ### Decisions with rationale## Insights with (autonomous) marker: "Decision: chose X because Y (autonomous)"spec.md — consolidated specificationThen proceed to How.
superpowers:writing-plans is available as a skill, delegate plan creation to it. Tell it the plan saves to the active intent's directory (not docs/superpowers/plans/).plan.md directly — implementation plan with numbered tasksactions/ directory with ACTION_N.md files (one per task, self-contained)checklist.md — execution registry with checkboxes covering all actionsThen proceed to Exec.
If the plan calls for creating a new project (the intent is an implementation intent that needs a new codebase):
~/.plastic/config.yml project_roots or from intent context"Creating project
<slug>at<path>. Confirm path, or provide alternative."
plastic-creating-project skillsuperpowers:subagent-driven-development or superpowers:executing-plans is available, delegate execution to itplastic-executing-planchecklist.md as completed## Insights with (autonomous) markerThe agent MUST prefer non-destructive routes:
| Instead of... | Do this... |
|---|---|
| Drop table | Rename to _deprecated_<table>, flag for cleanup |
| Delete files | Move to .archive/ or backup branch |
| Alter column | Additive migration — new column + backfill |
| Remove feature | Feature flag off, code stays until human confirms |
| Database migration | Backup before migration, keep rollback path |
--skip-permissions)When a genuinely destructive action on an existing project has NO safe alternative:
## InsightsWith --skip-permissions, the agent logs the action in Insights but proceeds without stopping.
During initial project creation, all decisions are non-destructive by definition (there's nothing to destroy). The agent has full autonomy for greenfield choices — DB engine, framework, gems, architecture.
outcome.md with detailed results## Outcome summary in the intent file (1-2 sentences)~/.plastic/projects.yml to find the project slug. If no match, skip to step 5 (default commit-only behavior).~/.plastic/projects/{slug}/project.yml. If the file doesn't exist or has no release key, skip to step 5.release.on_complete:
commit — git add + commit (same as default, proceed to step 5)commit_and_push — git add + commit + pushmanual — skip auto-commit, notify user: "Release configured as manual — commit when ready."release.verify is set, run the verify command (e.g. bundle exec rake test):
release.on_red:
fix_and_retry — attempt to fix the failure, re-run verify (max 2 retries)stop — write savepoint.md with current state, notify user: "Verify failed — savepoint written.", STOPmanual — notify user: "Verify failed: [summary]. Resolve manually."release.on_green has items, invoke plastic-releasing to handle them (tag, changelog, publish, etc.). Do NOT duplicate release logic — delegate entirely.## Insights for observations that should spawn future intents. If any:
plastic-creating-intent conventions)chain in the current intent's frontmatter## Active to ## Completed in INDEX.md (with today's date)cd <store-root> && git add . && git commit -m "feat: deliver intent <ID> — <name>"ruby ~/.plastic/scripts/qmd-sync reindex --store <store-root>
Delivery is the lifecycle event that keeps the search index fresh. <store-root> is the
store that holds this intent (the global store or the project store).ruby -r ~/.plastic/scripts/lib/bridge -e 'Bridge.disarm_auto(ENV["CLAUDE_SESSION_ID"])'
Disarming also purges stale bridge files from the temp directory automatically (it keeps the
current bridge and any live run), so no manual /tmp cleanup is needed.If the agent gets stuck (can't resolve a gap, dependency is missing, tests fail persistently):
## Insightssavepoint.md with current statereferences/agent-architecture.md for the full team model (the 5-role enforcer-led team, per-stage handoffs, gate ownership, headless note, solo fallback) and the orchestrator hierarchy (Main Orchestrator, Project Orchestrators, coordination loop) when spinning up the team or understanding autonomous delivery scopenpx claudepluginhub zalom/plastic --plugin plasticProvides behavioral guidelines to reduce common LLM coding mistakes, focusing on simplicity, surgical changes, assumption surfacing, and verifiable success criteria.
Searches, retrieves, and installs Agent Skills from prompts.chat registry using MCP tools like search_skills and get_skill. Activates for finding skills, browsing catalogs, or extending Claude.