update agent-ops project domain rules

This commit is contained in:
toki 2026-06-24 09:06:59 +09:00
parent a95fc27151
commit c8871b4495
5 changed files with 72 additions and 16 deletions

View file

@ -1,14 +1,14 @@
---
domain: contracts
last_rule_review_commit: 03187a4be3d9864419221d14bb44b8bc6645e6f1
last_rule_updated_at: 2026-05-31
last_rule_review_commit: a95fc27151e5e0750c1e25df3f72ad10f2d89506
last_rule_updated_at: 2026-06-24
---
# contracts
## 목적 / 책임
NomadCode 런타임 사이의 공유 계약 도메인이다. API schema, event schema, generated client boundary, compatibility note를 관리한다.
NomadCode 런타임 사이의 공유 계약 도메인이다. API schema, event schema, roadmap/work item sync 후보, generated client boundary, compatibility note를 관리한다.
## 포함 경로
@ -24,7 +24,7 @@ NomadCode 런타임 사이의 공유 계약 도메인이다. API schema, event s
## 주요 구성 요소
- `packages/contracts/README.md` — 현재 contracts 도메인의 역할과 사용 방향.
- `packages/contracts/notes/flutter-core-api-candidates.md` — Flutter/Core REST compatibility map, proto-socket semantic envelope, task channel, diagnostics, workspace metadata, client integration 설정 후보.
- `packages/contracts/notes/flutter-core-api-candidates.md` — Flutter/Core REST compatibility map, proto-socket semantic envelope, task channel, Gito branch event consumer, roadmap/work item sync, roadmap operations control plane, workspace metadata, client integration 설정 후보.
## 유지할 패턴
@ -34,6 +34,7 @@ NomadCode 런타임 사이의 공유 계약 도메인이다. API schema, event s
- generated client가 생기면 생성 명령과 source schema를 문서화한다.
- 내부 런타임 통신은 `proto-socket` channel/action을 우선 기준으로 삼고, REST/HTTP 유지나 신규 추가는 health/readiness, 외부 provider compatibility, smoke/curl, public callback, 단순 정적 조회 같은 예외 사유를 기록한다.
- source schema가 아직 없는 계약은 compatibility note로 표시하고, 실제 schema/generator 도입 전까지 단일 source-of-truth인 것처럼 다루지 않는다.
- Gito branch event와 roadmap/work item sync 후보는 외부 원문 계약과 Core 구현 경계를 함께 링크하고, source-of-truth branch/revision과 wakeup hint의 차이를 명시한다.
## 다른 도메인과의 경계

View file

@ -1,19 +1,20 @@
---
domain: core
last_rule_review_commit: 03187a4be3d9864419221d14bb44b8bc6645e6f1
last_rule_updated_at: 2026-06-01
last_rule_review_commit: a95fc27151e5e0750c1e25df3f72ad10f2d89506
last_rule_updated_at: 2026-06-24
---
# core
## 목적 / 책임
NomadCode의 백엔드 오케스트레이션 도메인이다. workflow, scheduling, persistence, HTTP/proto-socket API, work item intake, 외부 서비스 adapter를 통해 AI 작업 실행 상태와 자동화 흐름을 관리한다.
NomadCode의 백엔드 오케스트레이션 도메인이다. workflow, scheduling, persistence, HTTP/proto-socket API, work item intake, authoring bridge, project/roadmap sync, 외부 서비스 adapter를 통해 AI 작업 실행 상태와 자동화 흐름을 관리한다.
## 포함 경로
- `services/core/cmd/` — 서버와 Plane smoke 실행 entrypoint.
- `services/core/internal/agent/` — agent 모델과 실행 단위.
- `services/core/internal/authoring/` — Plane-origin workspace authoring 입력, 결과 판정, identity write 경계.
- `services/core/internal/config/` — 환경 변수 기반 core 설정 로딩.
- `services/core/internal/model/` — 모델 호출 추상 인터페이스와 입출력 타입.
- `services/core/internal/workflow/` — workflow 모델과 서비스.
@ -21,6 +22,11 @@ NomadCode의 백엔드 오케스트레이션 도메인이다. workflow, scheduli
- `services/core/internal/notification/` — task notification 모델과 발행 서비스.
- `services/core/internal/http/` — HTTP router, handlers, middleware.
- `services/core/internal/protosocket/` — proto-socket envelope, dispatcher, server, task channel, event broadcaster.
- `services/core/internal/gitoevents/` — Gito branch event 계약 decode와 subscribe envelope.
- `services/core/internal/gitosync/` — Gito develop branch event를 roadmap sync enqueue로 연결하는 bridge/runner/scanner.
- `services/core/internal/projectsync/` — provider project sync 설정, checkout/provision, workspace slot 경계.
- `services/core/internal/roadmapsync/` — roadmap/work item identity, develop match, Plane projection, retry/reconcile 결정.
- `services/core/internal/roadmapsyncpipeline/` — roadmap creation sync side-effect orchestration과 step ledger 호출.
- `services/core/internal/workitem/` — provider-neutral work item reference, capability, projection, task input mapping.
- `services/core/internal/workitempipeline/` — 외부 work item을 core task로 변환하는 pipeline service.
- `services/core/internal/db/` — SQLC 생성 코드, DB pool, persistence 모델.
@ -47,19 +53,42 @@ NomadCode의 백엔드 오케스트레이션 도메인이다. workflow, scheduli
- `internal/model/model.go` — 모델 client interface와 generation DTO.
- `internal/scheduler/river.go` — River scheduler 연결.
- `internal/scheduler/jobs.go` — background job 정의.
- `internal/scheduler/roadmap_sync_jobs.go` — Plane-origin Milestone creation sync River job.
- `internal/scheduler/slot_finalizer.go` — authoring task 종료 시 workspace slot 상태 반영.
- `internal/scheduler/stale.go` — authoring in-progress 관측 시각 stale 판정.
- `internal/notification/service.go` — task 완료 notification 발행.
- `internal/protosocket/server.go` — proto-socket WebSocket server, heartbeat, diagnostics logging, broadcast.
- `internal/protosocket/dispatcher.go` — channel/action dispatch registry.
- `internal/protosocket/envelope.go``nomadcode.proto-socket.v1` semantic envelope 변환.
- `internal/protosocket/tasks.go``task.create/list/get/enqueue` proto-socket channel handlers.
- `internal/protosocket/events.go` — notification event를 `task.status.changed` event로 투영.
- `internal/gitoevents/events.go` — Gito `branch.updated` payload decode와 roadmap milestone path hint 판정.
- `internal/gitoevents/client.go` — Gito proto-socket subscription client.
- `internal/gitosync/bridge.go` — verified develop scan 결과를 roadmap creation sync enqueue로 변환.
- `internal/gitosync/scanner.go` — develop branch revision에서 active Milestone 문서와 provider identity를 scan.
- `internal/gitosync/runner.go` — Gito branch event stream을 bridge로 전달하는 runner.
- `internal/authoring/request.go` — Plane-origin authoring task의 model input/push input 구성.
- `internal/authoring/identity_write.go` — authoring 결과의 provider identity를 Milestone 문서에 기록하는 경계.
- `internal/authoring/result.go` — authoring 결과와 workspace slot terminal state 판정.
- `internal/adapters/openai/client.go` — OpenAI integration.
- `internal/adapters/a2a/client.go` — A2A integration.
- `internal/adapters/mattermost/client.go` — Mattermost task notification integration.
- `internal/adapters/plane/client.go` — Plane work item 조회, comment 생성, state update integration.
- `internal/adapters/jira/client.go` — Jira issue lookup/comment/status projection integration.
- `internal/projectsync/config.go` — provider project target, branch workspace, slot path/state 모델.
- `internal/projectsync/provision.go` — project workspace와 branch workspace provision.
- `internal/projectsync/checkout.go` — work item 실행용 workspace slot checkout.
- `internal/roadmapsync/identity.go` — provider-neutral Milestone/Task identity와 revision 모델.
- `internal/roadmapsync/develop_match.go` — develop scan 결과와 expected identity match gate.
- `internal/roadmapsync/plane_projection.go` — Plane Todo projection formatting.
- `internal/roadmapsync/retry.go` — sync step ledger 기반 retry/reconcile 결정.
- `internal/roadmapsyncpipeline/service.go` — Plane-origin Milestone creation sync 실행 순서와 side-effect 기록.
- `internal/workitem/provider.go` — provider-neutral work item abstraction과 task input mapping.
- `internal/workitempipeline/service.go` — work item reader와 workflow task creator 연결.
- `internal/db/tasks.sql.go` — SQLC generated query boundary.
- `internal/storage/project_sync_settings.go` — project sync 설정 persistence.
- `internal/storage/workspace_slots.go` — workspace slot persistence.
- `internal/storage/roadmap_sync_identities.go`, `internal/storage/roadmap_sync_steps.go` — roadmap sync identity/step ledger persistence.
## Plane dev 작업 메모
@ -87,6 +116,10 @@ NomadCode의 백엔드 오케스트레이션 도메인이다. workflow, scheduli
- 외부 서비스 호출은 `internal/adapters/<provider>` 아래에 격리한다.
- provider-neutral work item 계약은 `internal/workitem`에 두고, Plane/Jira 같은 provider별 HTTP/DTO 세부는 adapter 아래에 둔다.
- work item을 core task로 만드는 흐름은 `internal/workitempipeline`에서 조립하고, workflow service에 provider별 DTO를 직접 넣지 않는다.
- project/workspace checkout 규칙과 slot 상태 전이는 `internal/projectsync`와 storage/scheduler 경계를 통해 처리한다.
- Plane-origin authoring task는 provider identity와 checkout metadata를 보존하고, identity 누락은 task id fallback으로 숨기지 않는다.
- Gito branch event의 `changed_files`는 wakeup hint로만 사용하고, 실제 sync 여부는 develop revision scan과 `roadmapsync` identity match로 판정한다.
- roadmap/work item sync side effect는 identity/step ledger를 기준으로 idempotent하게 재개하고, provider 호출 성공 직후 step을 기록한다.
- 신규 내부 런타임 통신은 `proto-socket` channel/action을 우선 검토하고, REST/HTTP 예외는 health/readiness, smoke/curl, 외부 provider 호환 API처럼 사유가 분명할 때 contracts 또는 domain rule에 남긴다.
- proto-socket envelope diagnostics에는 connection id, protocol version, channel/action, error code, timestamp 같은 운영 필드만 남기고 secret이나 payload 원문을 로그에 싣지 않는다.
- 환경 변수 기본값과 alias는 `internal/config`에서 관리하고 README의 실행 예시와 어긋나지 않게 유지한다.
@ -100,12 +133,14 @@ NomadCode의 백엔드 오케스트레이션 도메인이다. workflow, scheduli
- **contracts**: API, proto-socket envelope/channel/action, diagnostics 의미가 클라이언트와 공유되면 contracts에 먼저 표현하거나 compatibility note로 문서화한다.
- **mobile**: mobile은 public API, proto-socket semantic envelope, notification/auth 계약만 의존하며 core 내부 패키지를 직접 참조하지 않는다.
- **web**: [Legacy/Retired] React web 도메인은 완전히 제거되었습니다.
- **workspace-ops**: root helper 변경은 workspace-ops 소유이고, core-local bin 변경만 core 소유다.
- **workspace-ops**: root helper, agent-roadmap 문서 형식, agent-ops 규칙은 workspace-ops가 소유한다. core-local bin 변경만 core 소유이며, core는 sync/action 경계에서 필요한 roadmap 문서를 scan하거나 provider projection에 사용한다.
## 금지 사항
- `apps/**`의 UI 상태나 라우팅을 core 변경에 끼워 넣지 않는다.
- 외부 provider별 세부 구현을 workflow/service 레이어에 직접 흘리지 않는다.
- proto-socket payload를 임의 map indexing으로 여기저기 해석하지 말고 envelope/channel boundary에서 typed DTO로 변환한다.
- Gito `changed_files`만 믿고 roadmap/provider mutation을 실행하지 않는다.
- roadmap sync projection에서 identity/step ledger를 우회하거나 provider side effect를 중복 실행하지 않는다.
- SQLC 생성 파일만 수동 수정하지 않는다.
- 테스트 없이 scheduler, persistence, adapter behavior를 크게 바꾸지 않는다.

View file

@ -1,7 +1,7 @@
---
domain: mobile
last_rule_review_commit: 03187a4be3d9864419221d14bb44b8bc6645e6f1
last_rule_updated_at: 2026-05-31
last_rule_review_commit: a95fc27151e5e0750c1e25df3f72ad10f2d89506
last_rule_updated_at: 2026-06-24
---
# mobile
@ -15,6 +15,7 @@ NomadCode의 Flutter-first 제품 UI 도메인이다. 모바일/데스크톱/선
- `apps/client/lib/` — Flutter application code.
- `apps/client/lib/src/app/` — app host, bootstrap, workbench shell.
- `apps/client/lib/src/features/` — product feature UI and local feature state.
- `apps/client/lib/src/features/workspaces/domain/` — workspace/project/task UI model.
- `apps/client/lib/src/integrations/` — Mattermost, proto-socket, workspace launcher 같은 외부 경계 adapter.
- `apps/client/test/` — Flutter widget/service tests.
- `apps/client/assets/` — Flutter asset bundle과 ignored local smoke credential 위치.
@ -33,15 +34,19 @@ NomadCode의 Flutter-first 제품 UI 도메인이다. 모바일/데스크톱/선
- `lib/main.dart` — Flutter app entrypoint.
- `lib/src/app/nomadcode_client_app.dart` — MaterialApp host와 integration lifecycle wiring.
- `lib/src/app/nomadcode_workbench_shell.dart` — top titlebar, 우측 activity rail, 중앙 content 전환, 우측 Agent dock panel, 하단 IOP slot을 가진 workbench shell.
- `lib/src/features/workspaces/domain/project_workspace.dart` — workspace/project 목록 UI 모델과 mock workspace seed.
- `lib/src/features/workspaces/domain/workspace_task.dart` — Core `task` channel 응답을 파싱하는 client-side task 모델.
- `lib/src/features/workspaces/presentation/workspace_home_page.dart` — workspace project/task UI. workbench mount 시 `showAppBar: false`로 내부 app bar를 숨길 수 있다.
- `lib/src/integrations/mattermost/mattermost_auth_service.dart` — Mattermost auth flow.
- `lib/src/integrations/mattermost/mattermost_push_client.dart` — Mattermost-compatible push interface.
- `lib/src/integrations/mattermost/mattermost_push_plugin_client.dart` — production-only `NexoMessagingPlugin.instance` adapter.
- `lib/src/integrations/mattermost/mattermost_push_host_integration.dart` — Mattermost push host initialization, auth handoff, notification navigation.
- `lib/src/integrations/proto_socket/proto_socket_client.dart` — local `proto_socket` package 기반 real connector/transport.
- `lib/src/integrations/proto_socket/proto_socket_endpoint_config.dart``PROTO_SOCKET_*` env/dart-define 기반 endpoint value object.
- `lib/src/integrations/proto_socket/proto_socket_envelope.dart` — core와 공유하는 semantic envelope DTO.
- `lib/src/integrations/proto_socket/proto_socket_lifecycle.dart` — proto-socket connection lifecycle facade.
- `lib/src/integrations/proto_socket/proto_socket_task_service.dart` — workspace task loading over proto-socket transport.
- `lib/src/integrations/proto_socket/proto_socket_branch_event_service.dart` — Gito `branch.updated` event subscribe/wakeup service.
- `lib/src/integrations/workspace/workspace_launcher.dart` — workspace/code-server launch boundary.
- `android/app/src/main/java/com/tokilabs/mattermost/MainActivity.kt` — Android Flutter activity host.
- `test/widget_test.dart` — baseline widget test.
@ -57,6 +62,8 @@ NomadCode의 Flutter-first 제품 UI 도메인이다. 모바일/데스크톱/선
- IOP entry는 우측 rail 하단에 둔다. IOP-specific 운영 화면은 `iopContent` 같은 선택적 widget slot으로 mount하고, IOP package가 없는 기본 빌드에서는 placeholder로 유지한다.
- 공통 agent interaction UI는 sibling `agent_shell` package를 사용한다. NomadCode-specific workflow/web context capability는 NomadCode mobile domain이 소유하고, IOP-specific 운영 화면은 향후 IOP-owned package/widget을 선택적으로 mount한다.
- proto-socket 연결은 `ProtoSocketLifecycle`과 connector/transport interface 뒤에 두고, bootstrap은 안전한 no-op 기본값으로 시작한다.
- `PROTO_SOCKET_HOST`가 없으면 endpoint config는 null/disabled로 두고, bootstrap에서 네트워크 연결을 강제하지 않는다.
- Gito `branch.updated` event는 UI wakeup hint로만 소비하고, 클라이언트가 source-of-truth 상태나 provider/roadmap mutation을 직접 수행하지 않는다.
- production code에서 `NexoMessagingPlugin.instance` 직접 참조는 `MattermostPushPluginClient`에만 둔다.
- `assets/mattermost_credentials.json`은 local smoke credential로만 쓰며 ignored file 상태를 유지한다.
- `flutter test`를 기본 검증으로 사용한다.
@ -65,7 +72,7 @@ NomadCode의 Flutter-first 제품 UI 도메인이다. 모바일/데스크톱/선
## 다른 도메인과의 경계
- **core**: mobile은 core API/notification 계약에 의존하되 core 내부 구현을 알지 않는다.
- **contracts**: mobile이 사용하는 API/event/proto-socket envelope shape는 contracts 후보로 올린다.
- **contracts**: mobile이 사용하는 API/event/proto-socket envelope shape와 Gito branch event 소비 의미는 contracts 후보로 올린다.
- **agent-shell**: common chat/agent shell widget과 message model만 제공하는 sibling package다. Product routing, workbench section, web context 조작, IOP mount 결정은 mobile domain에서 조립한다.
- **IOP**: IOP는 runtime/operation/agent capability와 IOP console widget/package 경계를 소유한다. mobile은 IOP 기능을 직접 복제하지 않고 선택적 section으로 mount한다.
- **web**: [Legacy/Retired] React web 도메인은 완전히 제거되었습니다.
@ -78,6 +85,7 @@ NomadCode의 Flutter-first 제품 UI 도메인이다. 모바일/데스크톱/선
- Firebase 초기화/handler 변경을 테스트나 수동 검증 메모 없이 마무리하지 않는다.
- IOP client UI나 runtime/operation semantics를 NomadCode mobile code에 직접 복제하지 않는다.
- `agent_shell` package에 NomadCode 전용 workflow/web context/IOP product logic을 밀어 넣지 않는다.
- branch event 수신만으로 roadmap/provider 상태를 변경하지 않는다.
- `nexo_messaging` plugin singleton을 host UI나 auth service에서 직접 호출하지 않는다.
- local smoke credential 파일을 tracked asset으로 커밋하지 않는다.
- generated/platform build output을 의도 없이 커밋하지 않는다.

View file

@ -1,14 +1,14 @@
---
domain: workspace-ops
last_rule_review_commit: 03187a4be3d9864419221d14bb44b8bc6645e6f1
last_rule_updated_at: 2026-05-31
last_rule_review_commit: a95fc27151e5e0750c1e25df3f72ad10f2d89506
last_rule_updated_at: 2026-06-24
---
# workspace-ops
## 목적 / 책임
NomadCode 원레포 운영 도메인이다. 루트 helper, 문서, ignore 정책, 원레포 구조, agent entry 파일, agent-ops project rules와 roadmap을 관리한다.
NomadCode 원레포 운영 도메인이다. 루트 helper, 문서, ignore/secret 정책, 원레포 구조, agent/tooling entry 파일, agent-ops project rules와 roadmap을 관리한다.
## 포함 경로
@ -16,8 +16,10 @@ NomadCode 원레포 운영 도메인이다. 루트 helper, 문서, ignore 정책
- `docs/` — architecture and operations documents.
- `README.md` — workspace overview.
- `AGENTS.md`, `CLAUDE.md`, `GEMINI.md` — root agent entry instructions.
- `opencode.json` — agent/tooling configuration.
- `.aiexclude`, `.clineignore`, `.clinerules`, `.cursorignore`, `.cursorrules`, `.geminiignore`, `.claude/`, `opencode.json` — agent/tooling ignore와 configuration.
- `.gitignore` — workspace-level ignore policy.
- `.sops.yaml`, `secrets/` — encrypted secret policy와 SOPS-managed tracked secret material.
- `collect_evidence.sh` — local evidence collection helper.
- `agent-ops/.version` — agent-ops framework/version marker.
- `agent-ops/bin/` — agent-ops 초기화, sync, entry file helper.
- `agent-ops/rules/project/` — project/domain rules.
@ -36,13 +38,21 @@ NomadCode 원레포 운영 도메인이다. 루트 helper, 문서, ignore 정책
- `bin/lint` — vet/check/analyze entrypoint.
- `bin/build` — build entrypoint.
- `bin/dev` — development entrypoint 안내.
- `bin/nomadcode-sops-env` — SOPS-managed env material 실행 helper.
- `collect_evidence.sh` — workspace evidence 수집 helper.
- `AGENTS.md`, `CLAUDE.md`, `GEMINI.md` — agent별 루트 진입 규칙.
- `.aiexclude`, `.clineignore`, `.cursorignore`, `.geminiignore` — agent별 archive/private ignore 경계.
- `.clinerules`, `.cursorrules`, `.claude/settings.json`, `opencode.json` — agent/tooling별 루트 설정.
- `agent-test/local/rules.md` — local 테스트 환경 routing과 private input 사용 경계.
- `agent-ops/rules/project/rules.md` — 프로젝트 전체 agent routing.
- `agent-roadmap/ROADMAP.md` — 전체 Phase와 Milestone index.
- `agent-roadmap/current.md` — 현재 Phase와 기본 Milestone pointer.
- `agent-ops/bin/sync.sh` — agent-ops 동기화 helper.
- `agent-ops/bin/ai-ignore.sh` — agent별 archive/private ignore 파일 생성 helper.
- `agent-ops/bin/entry-files.sh` — root agent entry 파일 재생성 helper.
- `agent-ops/bin/bump-version.sh` — agent-ops version marker 갱신 helper.
- `agent-ops/bin/roadmap-dependency-checker.sh` — roadmap 외부 의존 lock 판별 helper.
- `agent-test/live-cycle-smoke.md`, `agent-test/plane-dev.md` — lifecycle/Plane dev smoke routing 문서.
- `agent-test/local/*-smoke.md` — 도메인별 local smoke routing 문서.
- `agent-roadmap/phase/*/PHASE.md`, `agent-roadmap/phase/*/milestones/*.md` — 활성 Phase/Milestone 문서.
@ -53,6 +63,7 @@ NomadCode 원레포 운영 도메인이다. 루트 helper, 문서, ignore 정책
- roadmap은 `agent-roadmap/`에 두고, 서비스별 README에 Phase 계획을 중복 유지하지 않는다.
- 일반 작업에서 `agent-roadmap/archive/**``agent-task/archive/**`는 사용자가 명시하거나 규칙이 허용한 경우에만 읽는다.
- `.gitignore`에는 private rules와 local-only `agent-test/local/`, `agent-test/runs/`만 제외하고, `agent-task/archive/**`는 AI ignore/permission 파일에서 제어한다.
- raw `.env*` secret은 tracked 문서/규칙에 값으로 기록하지 않고, SOPS encrypted material과 local ignored env material의 경계를 유지한다.
- 원레포 구조 설명은 README를 기준으로 갱신하고, 별도 운영/아키텍처 세부가 있을 때만 docs에 분리한다.
## 다른 도메인과의 경계
@ -66,4 +77,5 @@ NomadCode 원레포 운영 도메인이다. 루트 helper, 문서, ignore 정책
- 하위 앱/서비스에 별도 agent entry 파일이나 agent-ops scaffold를 복제하지 않는다.
- framework 공통 파일을 프로젝트 요구에 맞춰 직접 수정하지 않는다.
- root helper에 특정 개발자 로컬 절대경로를 넣지 않는다.
- SOPS encrypted file을 평문 secret 문서처럼 다루거나 secret 값을 rules/roadmap/docs에 기록하지 않는다.
- roadmap이나 agent-task archive 문서를 최신 템플릿에 맞춘다는 이유만으로 재포맷하지 않는다.

View file

@ -43,7 +43,7 @@ NomadCode는 AI 병렬 작업 운용을 위한 원레포다. 백엔드 오케스
| `services/core/**` | core | `agent-ops/rules/project/domain/core/rules.md` |
| `apps/client/**` | mobile | `agent-ops/rules/project/domain/mobile/rules.md` |
| `packages/contracts/**` | contracts | `agent-ops/rules/project/domain/contracts/rules.md` |
| `bin/**`, `docs/**`, `README.md`, `.gitignore`, `AGENTS.md`, `CLAUDE.md`, `GEMINI.md`, `opencode.json`, `agent-ops/.version`, `agent-ops/bin/**`, `agent-roadmap/**`, `agent-test/**`, `agent-ops/rules/project/**` | workspace-ops | `agent-ops/rules/project/domain/workspace-ops/rules.md` |
| `bin/**`, `docs/**`, `README.md`, `.gitignore`, `.aiexclude`, `.clineignore`, `.clinerules`, `.cursorignore`, `.cursorrules`, `.geminiignore`, `.claude/**`, `.sops.yaml`, `secrets/**`, `collect_evidence.sh`, `AGENTS.md`, `CLAUDE.md`, `GEMINI.md`, `opencode.json`, `agent-ops/.version`, `agent-ops/bin/**`, `agent-roadmap/**`, `agent-test/**`, `agent-ops/rules/project/**` | workspace-ops | `agent-ops/rules/project/domain/workspace-ops/rules.md` |
## 스킬 라우팅