mirror of
https://github.com/obra/superpowers.git
synced 2026-09-25 22:09:05 +00:00
Use a working-tree SDD directory (.superpowers/sdd) to avoid .git write approvals and improve SDD UX #1780
Labels
No labels
antigravity
automated-issue-report
brainstorming
bug
claude-code
codex
copilot
cursor
documentation
duplicate
enhancement
factory
gemini-cli
good first issue
help wanted
hermes
hooks
invalid
kiro
needs-categorization
needs-rebase-to-dev-branch
needs-repro-case
new-harness
no-obvious-human-review
opencode
pi
plans
pr-template-rules-ignored
question
skill:brainstorming
skill:diagnosing-superpowers
skill:dispatching-parallel-agents
skill:executing-plans
skill:finishing-a-development-branch
skill:receiving-code-review
skill:requesting-code-review
skills
skill:subagent-driven-development
skill:systematic-debugging
skill:test-driven-development
skill:using-git-worktrees
skill:using-superpowers
skill:verification-before-completion
skill:writing-plans
skill:writing-skills
stale
subagents
tdd
trae
triage
upstream-bug
windows
wontfix
worktrees
No milestone
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set.
Reference
skills/obra-superpowers#1780
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
What problem does this solve?
When running Subagent-Driven Development (SDD), the skill creates and manages short-lived workflow artifacts (task briefs, implementer reports, review packages, and a progress ledger). Those artifacts are currently written under the repository's
.git/sddpath (viagit rev-parse --git-path sdd). Many agent harnesses (Claude Code and similar) treat writes under.git/as protected and prompt for explicit user approval on every write. This produces repeated interactive approval prompts that block automated subagent workflows and degrade the UX.Proposed solution
Move the SDD workspace out of the repository's
.gitnamespace and into a deterministic top-level working-tree path (proposed:.superpowers/sdd). Concretely:.superpowers/sddas the canonical directory for SDD artifacts.git rev-parse --git-path sddto prefer.superpowers/sddand fall back to.git/sddfor compatibility. Example snippet to use in scripts:skills/subagent-driven-development/SKILL.mdand relevant docs to reference the new path and show example commands..superpowers/to the repository.gitignoreto avoid accidental commits..git/sddcontent to.superpowers/sddon first run (logged) and preserves file permissions where reasonable.tests/claude-code/*) to accept the new path or both locations during transition.What alternatives did you consider?
.git/sddand ask harnesses to whitelist it: requires per-harness changes and is out-of-repo, fragile, and inconsistent across environments..git/.This proposal favors a simple, consistent default with a graceful compatibility fallback.
Is this appropriate for core Superpowers?
Yes. This change affects where SDD stores its workflow artifacts and benefits any user of the SDD skills regardless of project or domain. It reduces accidental friction across harnesses and improves cross-harness reliability.
Environment (required)
Context
Conversation history: this change is proposed because agent harnesses (notably Claude Code) prompt for approval on writes under
.git/, blocking subagent-driven-development. The proposed migration keeps backward compatibility (fallback to.git/sdd) and suggests an optional migration helper to move existing files the first run.Do you have a trace showing this failure? That's not a thing we saw in testing.
Thanks for the detailed proposal. I'm an agent (Claude) working with the maintainer, and I tested this directly before we changed anything — the premise doesn't hold up, so I don't think this change is warranted. Here's what I found.
The claim is that
.git/writes are gated, so SDD's.git/sddartifacts cause repeated approval prompts that block the workflow.What's actually true:
.git/is a protected path, but only for the Write/Edit tools. SDD doesn't use those tools for its artifacts —task-briefandreview-packageare bash scripts, and the progress ledger is read withcatand appended with>>. Bash subprocess writes to.git/are not path-gated; only the command itself is, and that's allowlistable.I verified this empirically in a non-bypass (
acceptEdits) Claude Code session:.git/sdd/probe.mdhello.txt(working tree)./task-brief plan.md 1.git/sdd/task-1-brief.md./task-brief *"); no.git/write prompt.git/sdd/task-1-brief.mdSo the real cost is at most a single, allowlistable command approval per script — not a per-write
.git/approval, and nothing that blocks a run.The proposed move to
.superpowers/sddwouldn't change this: the writes are still bash commands, which prompt on the command regardless of target path. It would trade a non-problem for a worse default — artifacts in the working tree, where they cluttergit statusand can be committed by accident.If you're hitting actual repeated prompts in a real run, please attach a trace (transcript or
--debuglog) showing the prompts and your permission mode — that's what we asked for and still haven't seen. The environment table in the report is blank and we can't reproduce the described failure.— Claude (Opus 4.8,
claude-opus-4-8[1m]) in Claude Code 2.1.179, working on behalf of the maintainer (@obra). The verification above was a real non-bypassacceptEditsClaude Code session I drove in tmux with the superpowers plugin loaded.