From pjc Harness
This skill should be used when starting work on a project that has no AGENTS.md file. Triggered automatically by plan-feature when AGENTS.md is missing, or manually with "/pjc:bootstrap-agents-md". Detects project stack from marker files (.csproj, package.json, pyproject.toml, etc.) and generates a minimal AGENTS.md from one of 7 templates. If stack is unknown, asks the user.
How this skill is triggered — by the user, by Claude, or both
Slash command
/pjc:bootstrap-agents-md (자동)(자동)The summary Claude sees in its skill listing — used to decide when to auto-load this skill
프로젝트 루트에 `AGENTS.md`가 없을 때, 표식 파일을 감지하여 적절한 template으로
프로젝트 루트에 AGENTS.md가 없을 때, 표식 파일을 감지하여 적절한 template으로
초기 AGENTS.md를 생성한다.
| 시점 | 호출 방식 |
|---|---|
plan-feature Step 1에서 AGENTS.md 부재 감지 | 자동 호출 |
| 사용자 직접 호출 | /pjc:bootstrap-agents-md |
생성 후 plan-feature가 그 AGENTS.md를 읽고 정상 진행.
test -f AGENTS.md || test -f CLAUDE.md
있으면 → 즉시 종료, plan-feature로 복귀.
다음 표 순서대로 검사 (위에서부터):
| 표식 파일 (glob) | Stack | Template 파일 |
|---|---|---|
*.csproj에 <UseWinUI>true</UseWinUI> 포함 | WinUI 3 | winui3.md |
*.csproj에 <UseWPF>true</UseWPF> 포함 (WinUI 아님) | WPF | wpf.md |
*.csproj, *.sln, *.fsproj (WinUI/WPF 아님) | .NET | dotnet.md |
build.gradle*, settings.gradle*, AndroidManifest.xml | Android | android.md |
package.json + tsconfig.json 또는 *.ts 파일 | Node/TypeScript | node-typescript.md |
package.json (TS 없음) | Node/JavaScript | node-typescript.md (라벨만 변경) |
pyproject.toml, setup.py, requirements*.txt | Python | python.md |
go.mod | Go | go.md |
Cargo.toml | Rust | rust.md |
.NET UI 프레임워크 우선 판정: .csproj가 있으면 그 안의 UI 플래그를 먼저 확인한다. <UseWinUI>true</UseWinUI>면 winui3.md, <UseWPF>true</UseWPF>(WinUI 아님)면 wpf.md, 둘 다 없으면 dotnet.md. WinUI 3가 WPF보다 우선(WinUI 프로젝트도 드물게 UseWPF가 보일 수 있음).
검색 명령 (PowerShell):
$markers = @{
'dotnet' = @('*.csproj', '*.sln', '*.fsproj')
'android' = @('build.gradle', 'build.gradle.kts', 'settings.gradle', 'settings.gradle.kts')
'node-typescript' = @('package.json', 'tsconfig.json')
'python' = @('pyproject.toml', 'setup.py')
'go' = @('go.mod')
'rust' = @('Cargo.toml')
}
$detected = @()
foreach ($stack in $markers.Keys) {
foreach ($pattern in $markers[$stack]) {
if (Get-ChildItem -Filter $pattern -ErrorAction SilentlyContinue) {
$detected += $stack
break
}
}
}
# WinUI 3 / WPF 우선 판정: csproj의 UI 플래그로 dotnet → winui3/wpf 승격
if ($detected -contains 'dotnet') {
$csprojContent = Get-ChildItem -Filter '*.csproj' -Recurse -ErrorAction SilentlyContinue |
Get-Content -Raw -ErrorAction SilentlyContinue
$isWinUI = $csprojContent | Select-String -Pattern '<UseWinUI>\s*true\s*</UseWinUI>' -Quiet
$isWPF = $csprojContent | Select-String -Pattern '<UseWPF>\s*true\s*</UseWPF>' -Quiet
if ($isWinUI) {
$detected = ($detected | Where-Object { $_ -ne 'dotnet' }) + 'winui3'
} elseif ($isWPF) {
$detected = ($detected | Where-Object { $_ -ne 'dotnet' }) + 'wpf'
}
}
해당 templates/<stack>.md 복사 + 자동 추론 가능한 값 채움.
자동 채울 수 있는 값:
*.sln 파일명으로 솔루션 경로 추정app/build.gradle에서 namespace/minSdk/targetSdk 추출package.json의 scripts 분석 (build, test, dev, lint)pyproject.toml의 project.name, tool.pytest 설정go.mod의 module 경로Cargo.toml의 package.name, edition예: pubspec.yaml (Flutter), Package.swift (Swift), Gemfile (Ruby), mix.exs (Elixir)
→ templates/generic.md로 복사 + 다음 정보로 채움:
추측치 매핑 (확신 없음 표시):
pubspec.yaml → "Flutter | flutter build / flutter test (추측)"
Package.swift → "Swift | swift build / swift test (추측)"
Gemfile → "Ruby | bundle install / bundle exec rspec (추측)"
mix.exs → "Elixir | mix compile / mix test (추측)"
build.zig → "Zig | zig build / zig build test (추측)"
generic.md 복사. 모든 값 빈 칸. 사용자에게 4가지 질문:
프로젝트의 stack을 자동 감지하지 못했습니다.
발견된 주요 파일:
- <Get-ChildItem 결과 상위 10개>
다음 4가지만 알려주세요:
1. 언어/플랫폼은? (예: Flutter, Swift, Ruby, Elixir, Zig, ...)
2. Build 명령은? (예: zig build)
3. Test 명령은? (예: zig build test)
4. 아키텍처/디렉터리 구조 간단히
답변을 받아 generic.md에 채움.
이 프로젝트에서 여러 stack을 발견했습니다:
- .NET (src/Backend/Backend.csproj)
- Node.js (frontend/package.json)
- Python (scripts/pyproject.toml)
어떤 작업을 주로 하실 건가요?
A) .NET 위주 → dotnet 명령 기본
B) Node.js 위주 → npm 명령 기본
C) Python 위주 → pytest 등 기본
D) 모두 → AGENTS.md에 3개 섹션 (큰 파일)
D 선택 시 multi-stack-example.md를 참고하여 3개 섹션 모두 작성.
다음 AGENTS.md를 생성했습니다. 검토하세요:
---
<생성된 내용 전체>
---
이대로 저장할까요?
[Y] 그대로 저장
[E] 편집 후 저장 (어디를 수정할지 알려주세요)
[N] 취소
Y → ./AGENTS.md에 저장 → "AGENTS.md 생성 완료" 보고 → plan-feature 계속.
E → 사용자 수정 사항 반영 → 다시 보여주기.
N → 종료. plan-feature는 추측 모드로 진행 (또는 사용자가 plan-feature 재호출).
## 🔧 bootstrap-agents-md
**감지 결과**: <stack>
**Template 사용**: <template 파일명>
**자동 채움**:
- Build 명령: <값>
- Test 명령: <값>
- 아키텍처: <값>
**비워둔 항목** (사용자 입력 필요):
- <항목 1>
- <항목 2>
<생성된 AGENTS.md 전체 미리보기>
저장하시겠습니까? [Y/E/N]
plugin 패키지의 AGENTS.md.templates/ 디렉터리:
winui3.md — WinUI 3 (Windows App SDK). 프로젝트 생성/실행 실패 방지 규칙 + Gallery 디자인 + 다국어 규칙 포함wpf.md — WPF + WPF-UI(Fluent). 패키지 설치·App.xaml 병합·FluentWindow·테마 규칙 포함dotnet.md — 일반 .NET (WinUI/WPF 아님)android.mdnode-typescript.mdpython.mdgo.mdrust.mdgeneric.md — 매칭 실패 또는 알려지지 않은 stack용multi-stack-example.md — 모노레포 참고용npx claudepluginhub jongcheol-pak/claude-harness-pjc --plugin pjcCreates, edits, and optimizes skills for Claude Code, including drafting, evaluating with test prompts, iterating on performance, and improving skill descriptions for better triggering accuracy.