sync: agent-ops from agentic-framework v1.1.55

This commit is contained in:
toki 2026-05-25 21:16:43 +09:00
parent 265516725e
commit c497d10eaa
7 changed files with 28 additions and 64 deletions

View file

@ -2,8 +2,7 @@
"$schema": "https://json.schemastore.org/claude-code-settings.json", "$schema": "https://json.schemastore.org/claude-code-settings.json",
"permissions": { "permissions": {
"deny": [ "deny": [
"Read(./agent-task/archive/**)", "Read(./agent-task/archive/**)"
"Read(./agent-ops/roadmap/archive/**)"
] ]
} }
} }

View file

@ -1 +1 @@
1.1.54 1.1.55

View file

@ -81,6 +81,7 @@ def as_object:
.permissions = ((.permissions // {}) | as_object) .permissions = ((.permissions // {}) | as_object)
| .permissions.deny = ( | .permissions.deny = (
(.permissions.deny | as_array) (.permissions.deny | as_array)
| map(select(. != "Read(./agent-ops/roadmap/archive/**)"))
| append_unique("Read(./agent-task/archive/**)") | append_unique("Read(./agent-task/archive/**)")
) )
' '
@ -88,7 +89,7 @@ def as_object:
agent_ops_merge_json_with_jq \ agent_ops_merge_json_with_jq \
"$file" \ "$file" \
"$filter" \ "$filter" \
"Note: .claude/settings.json exists; add Read(./agent-task/archive/**) manually." "Note: .claude/settings.json exists; add Read(./agent-task/archive/**) and remove Read(./agent-ops/roadmap/archive/**) manually."
} }
agent_ops_claude_settings_complete() { agent_ops_claude_settings_complete() {
@ -98,7 +99,9 @@ def as_array:
if type == "array" then . elif . == null then [] else [.] end; if type == "array" then . elif . == null then [] else [.] end;
(.permissions.deny | as_array) (.permissions.deny | as_array)
| index("Read(./agent-task/archive/**)") as $deny
| (($deny | index("Read(./agent-task/archive/**)")) != null)
and (($deny | index("Read(./agent-ops/roadmap/archive/**)")) == null)
' '
if command -v jq >/dev/null 2>&1; then if command -v jq >/dev/null 2>&1; then
@ -121,8 +124,10 @@ def as_object:
.permission = ((.permission // {}) | as_object) .permission = ((.permission // {}) | as_object)
| .permission.read = ((.permission.read // {}) | as_object) | .permission.read = ((.permission.read // {}) | as_object)
| .permission.read["agent-task/archive/**"] = "deny" | .permission.read["agent-task/archive/**"] = "deny"
| del(.permission.read["agent-ops/roadmap/archive/**"])
| .permission.glob = ((.permission.glob // {}) | as_object) | .permission.glob = ((.permission.glob // {}) | as_object)
| .permission.glob["agent-task/archive/**"] = "deny" | .permission.glob["agent-task/archive/**"] = "deny"
| del(.permission.glob["agent-ops/roadmap/archive/**"])
| .watcher = ((.watcher // {}) | as_object) | .watcher = ((.watcher // {}) | as_object)
| .watcher.ignore = ( | .watcher.ignore = (
(.watcher.ignore | as_array) (.watcher.ignore | as_array)
@ -134,7 +139,7 @@ def as_object:
agent_ops_merge_json_with_jq \ agent_ops_merge_json_with_jq \
"$file" \ "$file" \
"$filter" \ "$filter" \
"Note: opencode.json exists; add agent-task/archive/** read/glob deny and agent-task/archive/** plus agent-ops/roadmap/archive/** watcher ignore manually." "Note: opencode.json exists; add agent-task/archive/** read/glob deny, remove agent-ops/roadmap/archive/** read/glob hard deny, and add agent-task/archive/** plus agent-ops/roadmap/archive/** watcher ignore manually."
} }
agent_ops_opencode_config_complete() { agent_ops_opencode_config_complete() {
@ -145,7 +150,9 @@ def as_array:
(.permission.read["agent-task/archive/**"] == "deny") (.permission.read["agent-task/archive/**"] == "deny")
and (.permission.glob["agent-task/archive/**"] == "deny") and (.permission.glob["agent-task/archive/**"] == "deny")
and ((.watcher.ignore | as_array) | index("agent-task/archive/**") and index("agent-ops/roadmap/archive/**")) and (.permission.read["agent-ops/roadmap/archive/**"] != "deny")
and (.permission.glob["agent-ops/roadmap/archive/**"] != "deny")
and ((.watcher.ignore | as_array) as $ignore | (($ignore | index("agent-task/archive/**")) != null) and (($ignore | index("agent-ops/roadmap/archive/**")) != null))
' '
if command -v jq >/dev/null 2>&1; then if command -v jq >/dev/null 2>&1; then
@ -155,46 +162,6 @@ and ((.watcher.ignore | as_array) | index("agent-task/archive/**") and index("ag
fi fi
} }
agent_ops_warn_existing_roadmap_hard_deny() {
local target_dir="$1"
local found="0"
local file
file="$target_dir/.claude/settings.json"
if [[ -f "$file" ]]; then
if command -v jq >/dev/null 2>&1; then
if jq -e '
def as_array:
if type == "array" then . elif . == null then [] else [.] end;
(.permissions.deny | as_array)
| index("Read(./agent-ops/roadmap/archive/**)")
' "$file" >/dev/null 2>&1; then
found="1"
fi
elif grep -q "Read(./agent-ops/roadmap/archive/**)" "$file"; then
found="1"
fi
fi
file="$target_dir/opencode.json"
if [[ -f "$file" ]]; then
if command -v jq >/dev/null 2>&1; then
if jq -e '
(.permission.read["agent-ops/roadmap/archive/**"] == "deny")
or (.permission.glob["agent-ops/roadmap/archive/**"] == "deny")
' "$file" >/dev/null 2>&1; then
found="1"
fi
elif grep -Eq '"agent-ops/roadmap/archive/\*\*"[[:space:]]*:[[:space:]]*"deny"' "$file"; then
found="1"
fi
fi
if [[ "$found" == "1" ]]; then
echo " Warning: 기존 roadmap archive hard deny는 사용자 설정으로 보고 보존했습니다. 링크 기반 archive 읽기가 필요하면 수동 확인하세요."
fi
}
ensure_agent_ops_ai_ignore_config() { ensure_agent_ops_ai_ignore_config() {
local target_dir="$1" local target_dir="$1"
local ignore_file local ignore_file
@ -248,5 +215,5 @@ EOF
agent_ops_merge_opencode_config "$target_dir/opencode.json" agent_ops_merge_opencode_config "$target_dir/opencode.json"
fi fi
agent_ops_warn_existing_roadmap_hard_deny "$target_dir" echo " AI permission 표준 적용: roadmap archive hard deny 제거"
} }

View file

@ -1,6 +1,6 @@
--- ---
name: init-agent-ops name: init-agent-ops
version: 1.1.3 version: 1.1.4
description: 프로젝트 상태를 판별하고 agent-ops 기본 스캐폴드를 생성하기 위한 초기 규칙 description: 프로젝트 상태를 판별하고 agent-ops 기본 스캐폴드를 생성하기 위한 초기 규칙
--- ---
@ -72,7 +72,7 @@ description: 프로젝트 상태를 판별하고 agent-ops 기본 스캐폴드
| `agent-ops/rules/private/` | 폴더만 생성 (내용은 개인이 작성) | | `agent-ops/rules/private/` | 폴더만 생성 (내용은 개인이 작성) |
| `.gitignore``agent-ops/rules/private/` 추가 | git 추적 제외 | | `.gitignore``agent-ops/rules/private/` 추가 | git 추적 제외 |
| `.geminiignore`, `.aiexclude`, `.cursorignore`, `.clineignore` | 사용자 항목은 보존하고 Agent-Ops 관리 block에 `agent-task/archive/**`, `agent-ops/roadmap/archive/**` 추가 | | `.geminiignore`, `.aiexclude`, `.cursorignore`, `.clineignore` | 사용자 항목은 보존하고 Agent-Ops 관리 block에 `agent-task/archive/**`, `agent-ops/roadmap/archive/**` 추가 |
| `.claude/settings.json`, `opencode.json` | 파일이 없으면 `agent-task/archive/**` 읽기/검색 제외 설정만 생성한다. `agent-ops/roadmap/archive/**`는 필요 시 링크로 읽을 수 있어야 하므로 hard read deny로 추가하지 않는다 | | `.claude/settings.json`, `opencode.json` | `agent-task/archive/**` 읽기/검색 제외 설정을 생성 또는 병합한다. `agent-ops/roadmap/archive/**`는 필요 시 링크로 읽을 수 있어야 하므로 hard read/glob deny에서 제거한다 |
에이전트별 파일명: 에이전트별 파일명:
@ -180,8 +180,8 @@ common/rules.md와 내용이 중복되지 않도록 한다.
- `.geminiignore`, `.aiexclude`, `.cursorignore`, `.clineignore`에는 사용자 항목을 건드리지 않고 Agent-Ops 관리 block만 추가하거나 교체한다 - `.geminiignore`, `.aiexclude`, `.cursorignore`, `.clineignore`에는 사용자 항목을 건드리지 않고 Agent-Ops 관리 block만 추가하거나 교체한다
- Agent-Ops 관리 block에는 `agent-task/archive/**``agent-ops/roadmap/archive/**`를 넣는다 - Agent-Ops 관리 block에는 `agent-task/archive/**``agent-ops/roadmap/archive/**`를 넣는다
- `.claude/settings.json`, `opencode.json`이 없으면 `agent-task/archive/**` 읽기/검색 제외 설정을 생성하고, 있으면 가능한 경우 기존 설정을 보존하며 필요한 제외 설정만 병합한다 - `.claude/settings.json`, `opencode.json`이 없으면 `agent-task/archive/**` 읽기/검색 제외 설정을 생성하고, 있으면 가능한 경우 기존 설정을 보존하며 필요한 제외 설정만 병합한다
- `agent-ops/roadmap/archive/**`는 일반 작업에서 읽지 않도록 AI ignore와 로드맵 규칙으로 제한하되, `.claude/settings.json`이나 `opencode.json`의 hard read deny에는 추가하지 않는다 - `agent-ops/roadmap/archive/**`는 일반 작업에서 읽지 않도록 AI ignore와 로드맵 규칙으로 제한하되, `.claude/settings.json`이나 `opencode.json`의 hard read/glob deny에는 두지 않는다
- 기존 `.claude/settings.json`이나 `opencode.json``agent-ops/roadmap/archive/**` hard read/glob deny가 있으면 사용자 설정으로 보고 자동 삭제하지 않고 경고만 남긴 - 기존 `.claude/settings.json`이나 `opencode.json``agent-ops/roadmap/archive/**` hard read/glob deny가 있으면 init-agent-ops 표준에 맞게 제거한
- 대상 루트에 `.agent-ops-source`가 있으면 AI ignore / permission 파일은 보강하지 않는다 - 대상 루트에 `.agent-ops-source`가 있으면 AI ignore / permission 파일은 보강하지 않는다
- `agent-task/archive/**``agent-ops/roadmap/archive/**` 제외는 `.gitignore`에 추가하지 않는다 - `agent-task/archive/**``agent-ops/roadmap/archive/**` 제외는 `.gitignore`에 추가하지 않는다
@ -239,8 +239,8 @@ common/rules.md와 내용이 중복되지 않도록 한다.
- [ ] `.gitignore``agent-ops/rules/private/` 항목이 추가되어 있는가 - [ ] `.gitignore``agent-ops/rules/private/` 항목이 추가되어 있는가
- [ ] `.geminiignore`, `.aiexclude`, `.cursorignore`, `.clineignore`에 Agent-Ops 관리 block이 있고 그 안에 `agent-task/archive/**``agent-ops/roadmap/archive/**`가 포함되어 있는가 - [ ] `.geminiignore`, `.aiexclude`, `.cursorignore`, `.clineignore`에 Agent-Ops 관리 block이 있고 그 안에 `agent-task/archive/**``agent-ops/roadmap/archive/**`가 포함되어 있는가
- [ ] `.claude/settings.json`, `opencode.json``agent-task/archive/**` 제외 설정이 있거나, 병합 불가 시 수동 병합 안내를 출력했는가 - [ ] `.claude/settings.json`, `opencode.json``agent-task/archive/**` 제외 설정이 있거나, 병합 불가 시 수동 병합 안내를 출력했는가
- [ ] `.claude/settings.json`, `opencode.json``agent-ops/roadmap/archive/**` hard read deny를 새로 추가하지 않았는 - [ ] `.claude/settings.json`, `opencode.json``agent-ops/roadmap/archive/**` hard read/glob deny가 남아 있지 않은
- [ ] 기존 `agent-ops/roadmap/archive/**` hard deny가 있으면 자동 삭제하지 않고 사용자 확인 대상으로 보고했는가 - [ ] 기존 `agent-ops/roadmap/archive/**` hard deny가 있으면 init-agent-ops 표준에 맞게 제거했는가
- [ ] `.gitignore``agent-task/archive/**` 또는 `agent-ops/roadmap/archive/**`를 추가하지 않았는가 - [ ] `.gitignore``agent-task/archive/**` 또는 `agent-ops/roadmap/archive/**`를 추가하지 않았는가
- 검증 실패 시: 누락된 파일/항목을 사용자에게 알리고 해당 부분만 보완한다 - 검증 실패 시: 누락된 파일/항목을 사용자에게 알리고 해당 부분만 보완한다

View file

@ -31,8 +31,8 @@ agent-ops/bin/sync.sh --pull <target>
- [ ] 현재 프로젝트 버전이 framework 버전과 일치하는가 - [ ] 현재 프로젝트 버전이 framework 버전과 일치하는가
- [ ] `agent-ops/bin/entry-files.sh`의 모든 진입 파일이 갱신됐고, 내용이 framework의 `agent-ops/rules/common/rules.md`와 일치하는가 - [ ] `agent-ops/bin/entry-files.sh`의 모든 진입 파일이 갱신됐고, 내용이 framework의 `agent-ops/rules/common/rules.md`와 일치하는가
- [ ] `.geminiignore`, `.aiexclude`, `.cursorignore`, `.clineignore`에 Agent-Ops 관리 block이 있고 그 안에 `agent-task/archive/**``agent-ops/roadmap/archive/**`가 포함되어 있는가 - [ ] `.geminiignore`, `.aiexclude`, `.cursorignore`, `.clineignore`에 Agent-Ops 관리 block이 있고 그 안에 `agent-task/archive/**``agent-ops/roadmap/archive/**`가 포함되어 있는가
- [ ] `.claude/settings.json`, `opencode.json``agent-task/archive/**` hard deny가 있고 `agent-ops/roadmap/archive/**` hard read deny를 새로 추가하지 않았는 - [ ] `.claude/settings.json`, `opencode.json``agent-task/archive/**` hard deny가 있고 `agent-ops/roadmap/archive/**` hard read/glob deny가 남아 있지 않은
- [ ] 현재 프로젝트에 기존 `agent-ops/roadmap/archive/**` hard deny가 있으면 자동 삭제하지 않고 사용자 확인 대상으로 보고했는가 - [ ] 현재 프로젝트에 기존 `agent-ops/roadmap/archive/**` hard deny가 있으면 init-agent-ops 표준에 맞게 제거했는가
- [ ] agentic-framework의 AI ignore / permission 파일은 수정되거나 stage되지 않았는가 - [ ] agentic-framework의 AI ignore / permission 파일은 수정되거나 stage되지 않았는가
## 금지 사항 ## 금지 사항

View file

@ -74,8 +74,8 @@ agent-ops/roadmap/archive/**
- 관리 block 밖의 기존 ignore 항목은 사용자 소유로 보고 삭제, 정렬, 중복 제거하지 않는다. - 관리 block 밖의 기존 ignore 항목은 사용자 소유로 보고 삭제, 정렬, 중복 제거하지 않는다.
- `.claude/settings.json``opencode.json`은 기존 사용자 설정을 보존하고 `agent-task/archive/**` hard read/glob deny만 보강한다. - `.claude/settings.json``opencode.json`은 기존 사용자 설정을 보존하고 `agent-task/archive/**` hard read/glob deny만 보강한다.
- `agent-ops/roadmap/archive/**`는 필요한 경우 링크로 읽을 수 있어야 하므로 `.claude/settings.json`이나 `opencode.json`의 hard read deny로 새로 추가하지 않는다. - `agent-ops/roadmap/archive/**`는 필요한 경우 링크로 읽을 수 있어야 하므로 `.claude/settings.json`이나 `opencode.json`의 hard read/glob deny로 두지 않는다.
- 대상 프로젝트에 기존 `agent-ops/roadmap/archive/**` hard read/glob deny가 있으면 사용자 설정으로 보고 자동 삭제하지 않고 경고만 남긴다. - 대상 프로젝트에 기존 `agent-ops/roadmap/archive/**` hard read/glob deny가 있으면 init-agent-ops 표준에 맞게 제거한다.
- `opencode.json`의 watcher ignore에는 `agent-task/archive/**``agent-ops/roadmap/archive/**`를 둘 수 있다. - `opencode.json`의 watcher ignore에는 `agent-task/archive/**``agent-ops/roadmap/archive/**`를 둘 수 있다.
```bash ```bash
@ -91,8 +91,8 @@ agent-ops/bin/sync.sh [target]
- [ ] 대상 repo의 `agent-ops/rules/common/rules.md`가 현재 agentic-framework의 `agent-ops/rules/common/rules.md`와 일치하는가 - [ ] 대상 repo의 `agent-ops/rules/common/rules.md`가 현재 agentic-framework의 `agent-ops/rules/common/rules.md`와 일치하는가
- [ ] agentic-framework에서 대상 프로젝트로 push한 경우, `agent-ops/bin/entry-files.sh`의 모든 진입 파일 내용이 현재 agentic-framework의 `agent-ops/rules/common/rules.md`와 일치하는가 - [ ] agentic-framework에서 대상 프로젝트로 push한 경우, `agent-ops/bin/entry-files.sh`의 모든 진입 파일 내용이 현재 agentic-framework의 `agent-ops/rules/common/rules.md`와 일치하는가
- [ ] framework에서 대상 프로젝트로 push한 경우, `.geminiignore`, `.aiexclude`, `.cursorignore`, `.clineignore`에 Agent-Ops 관리 block이 있고 그 안에 `agent-task/archive/**``agent-ops/roadmap/archive/**`가 포함되어 있는가 - [ ] framework에서 대상 프로젝트로 push한 경우, `.geminiignore`, `.aiexclude`, `.cursorignore`, `.clineignore`에 Agent-Ops 관리 block이 있고 그 안에 `agent-task/archive/**``agent-ops/roadmap/archive/**`가 포함되어 있는가
- [ ] framework에서 대상 프로젝트로 push한 경우, `.claude/settings.json``opencode.json``agent-task/archive/**` hard deny가 있고 `agent-ops/roadmap/archive/**` hard read deny를 새로 추가하지 않았는 - [ ] framework에서 대상 프로젝트로 push한 경우, `.claude/settings.json``opencode.json``agent-task/archive/**` hard deny가 있고 `agent-ops/roadmap/archive/**` hard read/glob deny가 남아 있지 않은
- [ ] 대상 프로젝트에 기존 `agent-ops/roadmap/archive/**` hard deny가 있으면 자동 삭제하지 않고 사용자 확인 대상으로 보고했는가 - [ ] 대상 프로젝트에 기존 `agent-ops/roadmap/archive/**` hard deny가 있으면 init-agent-ops 표준에 맞게 제거했는가
- [ ] 일반 프로젝트에서 agentic-framework로 push한 경우, AI ignore / permission 파일이 agentic-framework에 유입되지 않았는가 - [ ] 일반 프로젝트에서 agentic-framework로 push한 경우, AI ignore / permission 파일이 agentic-framework에 유입되지 않았는가
- [ ] 대상 repo에 commit/push 된 path가 방향별 허용 범위로 제한되었는가 - [ ] 대상 repo에 commit/push 된 path가 방향별 허용 범위로 제한되었는가

View file

@ -2,12 +2,10 @@
"$schema": "https://opencode.ai/config.json", "$schema": "https://opencode.ai/config.json",
"permission": { "permission": {
"read": { "read": {
"agent-task/archive/**": "deny", "agent-task/archive/**": "deny"
"agent-ops/roadmap/archive/**": "deny"
}, },
"glob": { "glob": {
"agent-task/archive/**": "deny", "agent-task/archive/**": "deny"
"agent-ops/roadmap/archive/**": "deny"
} }
}, },
"watcher": { "watcher": {