Skip to content
Back to skills

Fsd

ASecurity

Full Self Driving — autonomous release loop that processes all auto-dev-eligible GitHub issues until none remain, by repeatedly running /pipeline auto-dev then /homework.

  • 43 stars
  • 0 votes
  • 0 copies
  • 1 view
  • Added September 9, 2026
ai-agentsgobashexpressrailsgit

Works with

  • claude code

Security analysis

A100/100

Scanned September 27, 2026

npx -y skills add baekenough/oh-my-customcode --skill fsd --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Fsd?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for Fsd
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/baekenough-fsd/badge)](https://www.skillsdirectory.com/skills/baekenough-fsd)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
SKILL.md
---
name: omcustom:fsd
description: Full Self Driving — autonomous release loop that processes all auto-dev-eligible GitHub issues until none remain, by repeatedly running /pipeline auto-dev then /homework.
scope: harness
user-invocable: true
argument-hint: "[<max-releases>]"
version: 0.1.0
effort: high
---

# /omcustom:fsd — Full Self Driving

Autonomous release loop. Can be expressed as running:

```
/goal "모든 이슈가 처리될 때까지" /loop "/pipeline auto-dev -> /homework"
```

> The main conversation may also drive the same loop inline without invoking `goal`/`loop` — see 「인라인 실행 허용 — 계약과 실측의 정합 (#1683 #4)」 below.

This is a **thin alias / orchestrator skill**. It does not implement loop, issue-polling, release, or verification logic — it delegates entirely to existing skills.

## Usage

```
/omcustom:fsd               # Run until all auto-dev-eligible issues are exhausted
/omcustom:fsd 3             # Optional: cap at N releases (default: unlimited)
```

No arguments are required. The default behavior runs until the auto-dev-eligible issue set is empty.

## What It Does

FSD expands into:

1. **`/goal` wrapper** — applies disciplined goal-to-execution workflow:
   - Objective: "모든 이슈가 처리될 때까지"
   - Delegates planning, gap detection, and R020 completion verification to the `goal` skill
2. **`/loop` recurrence** — self-paced loop (model decides cadence), each iteration runs:
   1. `/pipeline auto-dev` — full release pipeline for the next eligible issue
   2. `/homework` — retrospective 찐빠 audit gate
   3. **Open PR processing** — merge or defer all open PRs before checking convergence

### Loop Convergence

The loop converges naturally when **both** conditions are met:

1. The auto-dev-eligible issue set reaches 0
2. All open PRs have been either merged or explicitly deferred

If a release step is held pending a user-executed constrained command (per `pipeline auto-dev`'s release-step user-execution constraint check), convergence MUST NOT be declared — present the pending command(s) to the user and wait, even if the eligible issue set and open-PR count would otherwise read as zero (#1733 찐빠 #2).

수렴을 선언하기 전에(수렴 조건이 아니라 **선언 직전 게이트**로) 이 세션의 homework 아티팩트 수를 실측해 반복 수와 대조합니다. 불일치는 다음 반복을 돌리는 신호가 아니라 **누락분을 기록하라는 신호**이므로, 회상 기반(`[recall]` 표시)으로라도 기록한 뒤 수렴을 선언합니다. v1.1.65 반복은 아티팩트를 기록하지 않은 채 다음 반복으로 넘어갔고 Iteration 4 종료 후에야 누락이 발견되어 회상 기반으로 보완되었습니다(#1688 Iteration 2 #1).

FSD processes **open PRs as part of each iteration**, not only issues. This includes dependabot PRs and any automatically created PRs. Issue eligibility follows `/pipeline auto-dev` label selection exactly:

- **Included**: `verify-ready` (preferred), unlabeled auto-dev candidates
- **Excluded**: `triage-complete`, `needs-review`, `decision-needed` labels

Do NOT invent new label logic here — defer to the `pipeline` skill's auto-dev issue selection.

### PR Processing Rules

When open PRs are found during an iteration:

| PR state | Action |
|----------|--------|
| CI passing, auto-mergeable | Merge via mgr-gitnerd (R010) |
| CI failing with known pattern (e.g., dependabot frozen-lockfile cascade → `bun install` lockfile regeneration) | Fix CI, then merge |
| CI failing with unknown cause | Diagnose; if fixable within iteration, fix and merge; otherwise defer |
| Breaking change / design judgment required | Defer and surface to user |
| Explicitly excluded by user this session | Skip (honor directive persistence, R015) |

Before executing any merge in this table, apply the same user-execution constraint check used by the release step (CLAUDE.md / session memory / the entry card, if the environment provides one, e.g. a recall entry card) — if the merge is covered by a user-execution constraint, do NOT execute it; present the exact command to the user and wait (#1733 찐빠 #2).

All PR merge operations are delegated to **mgr-gitnerd** (R010). After merging, verify ground-truth via `gh pr view` or `git log` before declaring done (R020).

Do NOT merge PRs that require user approval for architectural decisions. Surface them with a short summary and wait.

### `.claude/hooks/**` 이슈 — 무인 루프 분리 스코프

FSD는 사용자가 실시간 응답할 수 없는 무인 루프이므로, scope-selection의 R010 approval-required
path pre-check(`auto-dev.yaml`)가 `.claude/hooks/**` 대상 이슈를 발견하면 매 이터레이션마다
즉시 승인을 요청하지 않는다. 대신 그 이슈를 이번 스코프에서 **분리·이월**하고 나머지 적격 이슈로
계속 진행하며, `/homework` 반복 경계(게이트)에서 이월된 hooks 이슈들을 **1회 묶어** 승인 질문으로
제시한다. 승인을 받으면 R015 directive persistence로 세션 내 동일 카테고리에 지속 적용한다.
무인 여부의 판별 신호는 아래 「무인 모드 마커」 절이 정의한다.

### 무인 모드 마커 — 결정론적 판별 신호 (#1650 C)

`pipeline auto-dev`의 scope-selection Step 3가 요구하는 "무인 여부"는 산문 추론이 아니라 마커 파일로
판정한다. FSD 진입 시 오케스트레이터가 Bash로 아래 한 줄을 실행한다. 이 마커는 R010 「Exception:
Simple Tasks」의 carve-out(PPID 스코프 `/tmp` 런타임 상태 마커 — v1.1.61 신설)에 해당하므로
오케스트레이터가 직접 실행한다. 구조화된 파이프라인 상태(`/tmp/.claude-pipeline-*-{PPID}.json`)는 이
예외 대상이 아니며 기존대로 `tracker-checkpoint`에 위임된다.

```bash
printf '%s\n' "$(date -u +%Y-%m-%dT%H:%M:%SZ)" > "/tmp/.claude-fsd-$PPID"
```

- `$PPID`는 Bash 도구 셸의 부모, 즉 Claude Code 프로세스이며 호출 간 안정적이다(2026-09-03 실측: 두
  호출 모두 동일 값).
- `claude -p`·예약 실행처럼 마커를 미리 만들 수 없는 경로는 env `OMCUSTOM_UNATTENDED=1`로 대체한다.
- `pipeline auto-dev` pre-triage Phase 0.6이 마커 존재 또는 env 값을 실측해 `unattended_mode` 상태를
  산출하고, scope-selection Step 3는 그 상태로 `.claude/hooks/**` 이슈 분리·이월을 결정한다.
- 매 반복 시작 시 같은 명령으로 마커를 다시 써서 mtime을 갱신한다. Phase 0.6은 mtime이 6시간(360분)보다
  오래된 마커를 **부재로 취급**한다 — 프로세스 크래시·PID 재사용으로 남은 마커가 이후 수동
  `/pipeline auto-dev`를 무인으로 오판하지 않게 하는 가드다.
- 수렴(`[FSD Done]`), 릴리즈 cap 도달, safety classifier 차단으로 인한 중단, 사용자 인터럽트 — **어느
  경로로 끝나든** `command rm -f "/tmp/.claude-fsd-$PPID"`로 마커를 제거한다 — 남겨두면
  같은 세션의 이후 수동 `/pipeline auto-dev`가 무인으로 오판된다. `rm`이 alias(`trash`)로 셰이딩된
  셸에서 `rm -f`는 거부되므로 `command`를 붙인다(R005, 2026-09-03 실측).

### Iteration Flow (per iteration)

```
[FSD Entry] write marker /tmp/.claude-fsd-$PPID
[FSD Iteration N]
├── /pipeline auto-dev        → one release (PR create → merge → npm publish → milestone close)
├── /homework                 → extract 찐빠, confirm gate (or --dry-run if requested)
├── Open PR processing        → for each open PR: merge (if CI-green + auto-mergeable)
│                                                  fix-then-merge (known CI failure pattern)
│                                                  defer+surface (design decision needed)
└── Check convergence: eligible issues = 0 AND open PRs = 0 (merged or deferred)?
    ├── YES → record any missing homework artifact (recall-based) → [FSD Done] converged naturally → command rm -f /tmp/.claude-fsd-$PPID
    └── NO  → cap reached or classifier block? → YES → [FSD Stop] → command rm -f /tmp/.claude-fsd-$PPID
                                                 → NO  → next iteration (re-write marker first)
```

### 인라인 실행 허용 — 계약과 실측의 정합 (#1683 #4)

FSD의 루프 드라이버는 **메인 대화(오케스트레이터) 자신**입니다. `/goal`·`/loop`(ScheduleWakeup) 스킬 호출은 루프를 표현하는 한 방법일 뿐 필수 호출이 아니며, 오케스트레이터가 아래 최소 계약을 지키면 스킬 호출 없이 인라인으로 반복을 진행하는 것도 이 스킬의 정상 실행입니다. v1.1.64 반복이 인라인으로 실행된 것을 계약 이탈로 회고한 것(#1683 찐빠 #4)이 이 절의 기원이며, 같은 세션의 v1.1.65·v1.1.66 반복도 인라인으로 실행되었습니다(세션 실측, 이슈 범위 밖).

| 반복마다 지켜야 할 최소 계약 | 근거 |
|------------------------------|------|
| 반복 시작 시 무인 마커 갱신(`/tmp/.claude-fsd-$PPID`) | 위 「무인 모드 마커」 |
| `/pipeline auto-dev` 1회 → homework 아티팩트 1개 기록 → 열린 PR 처리 | 「Iteration Flow」 |
| 반복 끝에 수렴 판정(적격 이슈 0 AND 열린 PR 0)을 실측으로 수행하고, 선언 직전 **반복 수 == homework 아티팩트 수**를 `ls .claude/outputs/sessions/{YYYY-MM-DD}/homework-*.md`로 대조 — 세션이 UTC 자정을 넘길 수 있으므로 세션이 걸친 **모든 날짜 디렉토리**를 포함합니다(예: `ls .claude/outputs/sessions/2026-09-1[78]/homework-*.md`) | R020, #1688 |
| 종료 경로와 무관하게 마커 제거(`command rm -f`) | 「무인 모드 마커」 |

`/goal`·`/loop`를 호출하는 경로는 여전히 유효하며, 세션이 무인(`claude -p`, 예약 실행)이라 자기 페이싱이 필요할 때 권장됩니다. 대화형 세션에서는 인라인 실행이 스킬 호출 오버헤드 없이 같은 계약을 만족합니다.

## Safety and Discipline

Each iteration operates under full project rules — no relaxation because FSD is autonomous:

| Rule | Applies |
|------|---------|
| R001 (safety) | Destructive ops still require explicit approval. Credential guardrails always active. PR merges that risk data loss require explicit approval. |
| R009 (parallel) | Independent subtasks within each pipeline iteration run in parallel. |
| R010 (orchestration) | All file modifications delegated to specialist subagents. mgr-gitnerd for git ops including PR merges. |
| R015 (intent persistence) | If user explicitly defers a specific PR this session, honor that deferral — do not retry it. |
| R017 (sync verification) | mgr-sauron passes required before any commit. |
| R020 (completion verification) | Each release verified via `npm view`, `gh release view`, closed issues before `[Done]`. PR merges verified via `gh pr view` ground-truth before declaring iteration complete. |
| cost-cap advisory (`cost-cap-advisor.sh`, Conversation Block) | FSD는 사용자가 명시 호출한 다중 릴리즈 루프라 세션 비용이 상한(기본 $5)을 필연적으로 넘는다. advisory 발화는 루프를 멈추는 신호가 아니며, 오케스트레이터는 발화 사실과 누적 비용을 반복 경계(homework 게이트)에서 사용자에게 고지한다. 상한을 올리려면 `CLAUDE_COST_CAP`(v1.1.61 세션 실측: 착수 직후 $5.38에서 발화). |

`/homework` runs as a **retrospective gate** between iterations — findings go through `omcustom-feedback`'s Phase 4A confirmation gate. The loop does NOT skip homework on the grounds that it is "automated". If homework requires user confirmation (e.g., to file a feedback issue), the loop pauses and waits.

**Homework 제출 게이트 묶음 (opt-in, #1652 #4)**: 기본 계약은 위와 같이 **반복마다** 게이트를
제시하는 것이다. 사용자가 세션 중 명시적으로 지시하거나(예: "homework 게이트는 수렴 시점에 1회로
묶어라") 무인 실행을 선언하며 묶음을 지정한 경우에만, homework 아티팩트(`homework-{HHmmss}.md`)는
반복마다 기록하되 `omcustom-feedback` Phase 4A 제출 게이트는 수렴 시점(또는 릴리즈 cap 도달 시점)에
**1회** 묶어 제시한다 — 이월된 `.claude/hooks/**` 승인 질문과 같은 자리에서 함께 제시한다. 묶음
여부는 사용자 결정 사항이며 오케스트레이터가 단독으로 선택하지 않는다(v1.1.59/60 세션에서
오케스트레이터가 단독 결정한 것이 스킬 계약 이탈로 회고됐다). 한 번 지시되면 R015 directive
persistence로 세션 내 유지된다. 묶음 여부는 `unattended_mode`(마커·env)에서 **도출하지 않는다** —
무인 판별은 hooks 이슈 분리·이월에만 쓰이고, 게이트 묶음은 사용자 지시가 유일한 트리거다.

If a release operation triggers the safety classifier, the current iteration stops and surfaces the block to the user before continuing.

## When to Use

| Scenario | Use FSD? |
|----------|----------|
| Multiple eligible issues ready to process autonomously | YES |
| Session where the user wants to "let it run" through the backlog | YES |
| Verifying the autonomous release loop pattern from session memory | YES |
| Single targeted issue fix | NO — use `/pipeline auto-dev` directly |
| Exploratory research / planning only | NO — use `/research` or `/deep-plan` |
| Only one issue and it needs human judgment | NO — use `/pipeline auto-dev` with manual oversight |

## When NOT to Use

- When issues require stakeholder approval or design decisions before implementation
- When the issue set includes `decision-needed` or `needs-review` items only (loop converges immediately — just use `/pipeline auto-dev` once)
- When cost sensitivity is high and the issue backlog is large — inspect the eligible set first before running FSD

## Optional Release Cap

Pass a numeric argument to cap at N releases:

```
/omcustom:fsd 3    # Process at most 3 issues this FSD run
```

This corresponds to the `-max` parameter used in the manual pattern. Default is unlimited (run until eligible issues exhausted). The cap is advisory — the pipeline itself may stop earlier if the eligible set runs out before the cap is reached.

## Session 114 Precedent

This skill was extracted from the manual pattern used in Session 114 (2026-06-09):

```
/goal "모든 이슈가 처리될 때까지" /loop "/pipeline auto-dev -> /homework"
```

That session ran 2 iterations (v0.177.0 and v0.178.0) before converging with 0 eligible issues remaining. FSD codifies this pattern as a first-class invocable command.

## Cross-References

| Skill / Rule | Role |
|--------------|------|
| `goal` | Disciplined goal-to-execution wrapper — objective parse, gap detection, R020 verification |
| `omcustom-loop` | Session auto-continuation via SubagentStop hook — keeps the loop alive during background agent work |
| `pipeline` | `/pipeline auto-dev` — the core release pipeline per iteration |
| `homework` | Retrospective 찐빠 audit gate per iteration |
| `mgr-gitnerd` | PR merge operations — all open PR merges delegated here (R010) |
| R001 (safety) | Destructive ops require approval; credential guardrails; risky PR merges require explicit approval |
| R009 (parallel execution) | Parallel subtasks within each pipeline iteration |
| R010 (orchestrator coordination) | All file writes delegated; mgr-gitnerd for git including PR merges |
| R015 (intent persistence) | User PR deferral decisions honored for the session |
| R017 (sync verification) | mgr-sauron required before commit/push |
| R020 (completion verification) | Actual outcome verified before declaring each release or PR merge done |

## Design Notes

This skill is intentionally a **thin alias**. It does NOT duplicate:
- Issue polling logic (owned by `pipeline`)
- Loop cadence / auto-continuation (owned by `omcustom-loop` + SubagentStop hook)
- Release pipeline steps (owned by `pipeline auto-dev`)
- Retrospective analysis (owned by `homework`)
- PR merge execution (owned by `mgr-gitnerd`)
- Completion verification (owned by R020 + `goal`)
- Loop driving itself — the main conversation may run the iteration inline (see 「인라인 실행 허용」); `goal`/`omcustom-loop` are optional expressions of the same contract

If any of those underlying skills evolve, FSD automatically benefits — its only responsibility is declaring the intent and forwarding to the right components.

## Permission Mode Note

When this skill delegates work via Agent tool calls, ALL Agent tool calls MUST include `mode: "bypassPermissions"` per R010 Universal bypassPermissions.

⚠ **그 파라미터는 CC v2.1.212+ 에서 무시되며, 프로젝트 scope `permissions.defaultMode` 역시
CC v2.1.257+ 에서 무시된다(#1644).** 즉 위 지시를 지켰다는 사실은 **무인 실행의 증거가 아니다**.
자율 루프 진입 전에 유효 모드를 실측한다:

```bash
jq -r '.permissions.defaultMode // "unset"' ~/.claude/settings.json 2>/dev/null || echo unset
```

`bypassPermissions` 가 아니면 루프 도중 permission 프롬프트로 정지할 수 있으므로,
`--permission-mode bypassPermissions` 로 재시작하거나 사람이 지켜보는 실행임을 전제한다.
(파이프라인 쪽 배선은 `pipeline auto-dev` 의 pre-triage Phase 0.5 가 담당한다.)

⚠ **커밋 위임 타임아웃 (#1645)**: 메인 워크트리의 `.husky/pre-commit` 이 전체 테스트
스위트(약 165초)를 돌리므로, `git commit` 을 위임할 때는 Bash `timeout: 400000` 을 명시한다.
기본값 120000ms 로는 exit 143(SIGTERM)으로 끊긴다. `--no-verify` 우회는 금지(R010).

## Artifact Output

Artifacts from each iteration follow the conventions of the constituent skills:
- Pipeline artifacts: `.claude/outputs/sessions/{YYYY-MM-DD}/pipeline-auto-dev-{HHmmss}.md`
- Homework artifacts: `.claude/outputs/sessions/{YYYY-MM-DD}/homework-{HHmmss}.md`

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments

Loading comments…