Agnostic AI: 모든 클라이언트를 위한 하나의 AI 코딩 하네스
요약
Agnostic AI는 모든 클라이언트 환경을 위한 통합 AI 코딩 하네스(harness)를 제공하는 운영 체제입니다. 이 시스템은 가드 후크, 서브 에이전트, 워크플로우 등 다양한 기능을 포함하며, 사용자가 사용하는 Claude Code에 링크 형태로 설치되어 Codex, Gemini CLI 등 다수의 클라이언트 방언에 맞춰 포팅됩니다. 이를 통해 사용자 개인의 규칙과 메모리를 유지하면서도 일관된 AI 개발 환경을 구축할 수 있습니다.
핵심 포인트
- 모든 클라이언트를 위한 통합 코딩 하네스 제공
- 가드 후크, 서브 에이전트 등 복잡한 기능 포함
- Claude Code를 중심으로 Codex, Gemini CLI 등에 포팅 가능
- 사용자 개인 정보는 사설 오버레이에 유지
하나의 하네스로, 모든 클라이언트에게.
Agnostic AI는 AI 코딩 하네스를 위한 운영 체제입니다. 여기에는 비밀 정보와 파괴적인 명령을 차단하는 가드 후크(guard hooks), 작동 규칙(working agreement/rules), 온디맨드 컨텍스트 모듈, 서브 에이전트(subagents), 저장된 워크플로우, Mods (함수-후크 플러그인), 운영자 도구(operator tools), 예약 작업(scheduled jobs), 그리고 사건을 규칙으로 전환하는 학습 루프가 포함됩니다. 이 시스템은 사용자가 사용하는 클라이언트(Claude Code)에 링크 형태로 설치되고, 그곳에서 기기상의 다른 모든 클라이언트(Codex, Gemini CLI, Cursor 및 16개 이상의 클라이언트)의 방언에 맞춰 포팅됩니다. 사용자의 신원 정보, 개인 규칙, 메모리, 그리고 기기 설정은 사용자만의 작은 사설 오버레이(private overlay)에 유지됩니다.
이것은 오후 만에 설계된 스타터 키트가 아닙니다. 일상적인 사용을 통해 규칙 하나하나씩 성장해 왔으며, 대부분의 기능은 무언가가 먼저 고장 났기 때문에 존재합니다. 모든 가드 뒤에는 사건(incident)이 있고, 모든 문서는 단어 제한(word ceiling)이 있으며, 모든 검사는 처리한 개수를 보고하고, 한 번도 발생하지 않은 실패하는 검사는 '검증됨'으로 간주되지 않습니다.
이 저장소는 처음 공유되었던 이름인 ucsandman/claude-harness로도 게시되었습니다. 둘 다 푸시되는 내용이 같으며, 동일한 커밋을 공유합니다.
- 설치(Install)
- 내부 구성 요소(What is inside)
- 작동 방식(How it fits together)
- 가드(Guards)
- 규칙 및 컨텍스트 모듈(Rules and context modules)
- Mods
- 서브 에이전트 및 워크플로우(Subagents and workflows)
- 도구(Tools)
- 예약 작업 및 학습 루프(Scheduled jobs and the learning loop)
- 20개 클라이언트로 포팅하기(Porting to twenty clients)
- 상태 검사(Health checks)
- 공유되는 것과 사적인 것(What is shared, what stays private)
- 명령어(Commands)
- 문서화(Documentation)
- 저장소 레이아웃(Repository layout)
- 개발(Development)
- 보안(Security)
- 관련 자료(Related)
- 라이선스(License)
git clone https://github.com/ucsandman/Agnostic-AI.git && cd Agnostic-AI
npm run setup # 핵심 가드 연결, 표면 링크, CLAUDE.md 조립, 포팅, 진단(doctor)
Node 18+와 git만 있으면 됩니다. setup은 다음을 수행합니다:
core/rules를
~/.claude/agnostic-rules.md로 컴파일하고,- 이를 가져오는
CLAUDE.md를 생성하며, - 핵심 가드를
settings.json에 연결하고, ~/.claude/{hooks,tools,mods,agents,workflows}를 링크합니다.
이 체크아웃 디렉토리로 이동합니다 (실제 디렉토리는 옆으로 옮겨지며 절대 삭제되지 않음). 이 하네스를 다른 모든 설치된 클라이언트로 포팅하고 doctor를 실행합니다 (CLAUDE_CONFIG_DIR
(홈을 이동시킴). 계속 사용하는 세 가지 명령어:
npm run sync # 규칙이 변경되었거나 링크가 누락된 경우: recompile, relink, reassemble CLAUDE.md
npm run port # 하네스를 다른 모든 설치된 클라이언트로 푸시
npm run doctor # 드리프트(drift), 두 번째 작성자, 깨진 링크, 오래된 경로, 공개 코드 내의 비공개 경로
템플릿으로 사용하려면: 이 템플릿 사용을 클릭하고, 클론한 다음, npm run setup을 실행합니다.
.
core/port.json
소스 클라이언트를 선택하거나, 대상을 제한하거나, 이유와 함께 후크(hook), 스킬(skill) 또는 MCP 서버를 제외합니다.
| 디렉토리 | 내용물 | 크기 |
|---|---|---|
core/ | 진실의 원천: rules/global-rules.md 및 온디맨드 모듈, templates/targets.json (클라이언트 레지스트리), safety/guards.json (단일 안전 정책), traits/, port.json, 인시던트 examples/ | 7개 모듈, 20개 클라이언트 |
engine/ | 포팅 엔진 및 실행되는 모든 것: harness/ (캡처, 적용, 상태), sync/ (규칙 컴파일러, 링크 바인더, CLAUDE.md 어셈블리), setup/ (첫 실행, 링크), doctor/, context/ (모듈 그래프), hooks/ (가드, 프로브, 클라이언트 앳션(shim)), mods/, harvest/ 및 distill/ (학습 루프), ingest/, skills/, audit/, docs/ (생성기), tests/ | 14개 서브시스템, 39개 후크 |
agents/ | 모델, 도구 및 범위를 가진 서브에이전트 정의 | 6 |
workflows/ | 다중 에이전트 작업을 위한 저장된 워크플로우 스크립트 | 4 |
tools/ | 운영자 CLI 및 페이지: measure, search, prove, render | 25 |
jobs/ | 예약 작업 및 작업 스케줄러가 이를 가리키는 설치 프로그램 | 6 |
skills/ | 통합된 스킬 라이브러리로, 각 클라이언트에 링크됨 (복사되지 않음) | 216 |
packages/ | markdown-agent-memory, 게시된 메모리 정책, 템플릿 및 린터 | 1 |
docs/ | 문서화. 파일들은 커밋 전 후크가 강제하는 단어 제한을 따름 | 29 |
labs/ |
연구: Mods 스프린트 레코드, 분리된 빌더, 프로세스 원장, 토큰 흐름 감사. engine/의 어떤 것도 이것에 의존하지 않습니다 |
4 |
examples/ |
참고용으로 설치된 하네스 | 1 |
harness/, storage/ |
캡처된 번들 및 런타임 상태가 모두 gitignore 됩니다.
의존성 방향은 한 가지입니다: core
→ engine
→ 설치된 서피스(surfaces)
→ 클라이언트 홈. 오버레이는 세 개의 이름 붙은 파일을 통해 읽힙니다. 생성되는 파일은 작성자가 하나이며, 두 번째 작성자를 가진 경우 도커(doctor)가 실패합니다.
flowchart LR
core["core/<br/>rules, modules, targets.json,<br/>guards.json, port.json"] --> engine["engine/<br/>sync, setup, doctor, context graph,<br/>hooks, Mods, harness port"]
overlay["overlay/ (private)<br/>profile.md, context-graph.json, gates.json"] -. read by sync .-> engine
...
**캡처(Capture)**는 사용자가 사용하는 클라이언트를 클라이언트 중립적인 번들로 읽어 들입니다: 모든 @import 규칙이 인라인 처리되고, 훅은 하나의 방언에 포함되며, 스킬, 에이전트, 명령어, MCP 서버, 권한 등이 포함됩니다. 토큰처럼 보이는 값은 ${NAME}으로 바뀌며 무엇을 내보내야 하는지 알려줍니다.**적용(Apply)**은 이 번들을 다른 클라이언트의 방언으로 렌더링합니다. 훅은 복사되지 않습니다: 모든 클라이언트는 심(shim)을 통해 동일한 스크립트를 가리킵니다. 스킬들은 연결됩니다.아무것도 파괴되지 않습니다. 생성된 파일에는 포트의 헤더가 포함되며, 사용자가 소유한 파일은 표시된 영역이 생기고 그 외는 보존됩니다. 모든 덮어쓰기는 백업됩니다.--check
드리프트(drift) 시 1로 종료됩니다.모든 변화는 설명됩니다 (npm run explain)를 통해, core/port.json으로부터.
전체 구조와 저장소 레이아웃 및 어댑터 계약을 포함한 세 곳은 docs/architecture.md입니다.
engine/hooks/
에는 41개의 훅이 있습니다: Node 38개, Python 2개, PowerShell 1개. 이들은 Claude Code의 이벤트(PreToolUse, PostToolUse, UserPromptSubmit, Stop, SessionStart, SubagentStart, PreCompact)에서 실행되며, engine/hooks/shim.cjs를 통해 다른 모든 클라이언트에서도 실행됩니다. 하나의 파일인 core/safety/guards.json
,은 모든 가드(guard)가 읽는 정책입니다: 비밀 경로는 항상 차단되고, 하드 스톱 명령어에는 인간의 개입이 필요하며, 누락된 정책은 닫힘(fail closed)으로 작동합니다.
| 그룹 | 후크 (Hooks) | 기능 설명 |
|---|---|---|
| Secrets | secret-guard , secret-path-guard , tool-output-secret-watch , output-secret-watch | 비밀 파일의 읽기 및 쓰기를 거부하고, 도구 출력과 표시되는 내용에서 비밀처럼 보이는 값을 마스킹합니다. |
| Destructive commands | rm-guard , process-kill-guard , git-tree-guard , dev-server-guard , slow-command-guard , slopsquat-guard , security-tier-check | 스크래치(scratch) 외부의 재귀적 삭제에는 마커가 필요하며, 종료는 이름이 아닌 PID로 이루어지고, 드라이브 루트로부터의 재귀 검색은 불가하며, 환각처럼 보이는 패키지 이름은 거부됩니다. |
| Model routing and cost | agent-model-guard , capability-graph-guard , subagent-budget-guard , fable-delegate-guard , batch-guard , repeat-tool-guard | 모든 생성(spawn)은 모델 이름을 지정하고 역량 그래프(capability graph)를 따라 흐릅니다. 팬아웃(fan-out)은 상한선을 선언하며, 단일 문장 호출이나 동일하게 반복된 호출이 실행되면 거부됩니다. |
| Scope and integrity | scope-lock , gate-freeze , guard-canary.ps1 , mods-liveness , forced-verify-stop-gate | 수정 사항은 주장된 범위(claimed scope) 내에 머무르며, 동결된 가드 파일은 해당 잠금과 일치하고, 가드는 세션 시작 시 살아있음이 증명되며, Mods의 심장 박동(heartbeat)을 확인하고, 검증 없이는 턴이 끝날 수 없습니다. |
| Prompt chain | prompt-dispatch , wakeup-guard | 유일한 UserPromptSubmit 프로세스: 모든 프롬프트 후크를 인프로세스(in-process)에서 실행하고 그 답변들을 병합합니다 (로드된 기기에서 프롬프트당 8개의 생성에 시간 초과 발생). 모니터나 작업 알림에 의해 연속으로 세 번 깨어난 세션은 |
| 세션 상태 | session-count, creds-resolve, correction-tracker, precompact-extract, compaction-ledger, post-edit-diagnostics, skill-telemetry.py, sync-main-checkout.py |
라이브 세션 수 계산, 로컬 볼트에서 .env 채우기, 수정 기록, 압축 전 상태 유지, 구문 검사된 파일, 기술 사용 기록 |
| 거버넌스 | dashclaw-guard, dashclaw-setup |
선택 사항: DashClaw에서 원격 승인을 위해 위험한 호출 보류 |
| 클라이언트 어댑터 | adapters/codex-rewrite, adapters/codex-delegate-guard, universal-adapter |
Codex 페이로드를 Claude 방언으로 변환하고 다시 되돌리기; 각 클라이언트 런타임이 무엇을 할 수 있는지 선언함 |
모든 가드에는 자신이 작성되지 않은 경우를 위한 재정의 마커가 있으며, engine/hooks/tests/ 아래에 의도적으로 실패하게 만드는 프로브가 있습니다. 마커가 있는 명단은 docs/guards.md입니다. 이벤트당 측정 비용은 docs/hook-latency.md입니다.
core/rules/global-rules.md는 모든 클라이언트가 받는 작업 합의서입니다: 협상 불가 사항(비밀, 하드 스톱), 작동 방식, 통신, 완료 정의, 메모리. npm run sync는 이를 (core/traits/traits.md와 함께) 기본 클라이언트 규칙 파일로 컴파일하고; npm run port는 이를 모든 곳으로 가져갑니다.
상황별 텍스트(Situational text)는 독립적인 프롬프트가 아니라 모듈입니다. 모듈은 context: 블록(키워드, 경로 및 명령어 트리거; requires와 suggests 간선)이 있는 마크다운 파일로, 해당 프롬프트, 수정된 파일 또는 명령어가 적용된다고 말할 때, 의존성 순서에 따라 예산 내에서 이유가 첨부되어 로드됩니다.
| 모듈 | 로드 시점 |
|---|---|
delegation-and-model-routing | 에이전트가 생성되려 할 때: 모델 계층, 에스컬레이션, 팬아웃 산술 |
memory-writing-rules | 프롬프트나 쓰기가 메모리에 닿을 때: 출처 태그(provenance tags), 순환 게이트(recurrence gate), 대체(supersession) |
secrets-non-negotiable | 명령어 또는 편집이 환경 파일, 키 또는 토큰을 명시할 때 |
harness-integrity | 후크나 settings.json이 변경될 때: 프로브(probe), 동결(freeze), 문서화(docs), 닥터 그린(doctor green) |
parallel-agents-inbox | 다른 에이전트가 리포지토리를 공유하거나 인박스가 클레임을 보유할 때 |
harness-push-destinations | 커밋이 떠나려 할 때: 어떤 리포지토리, 어떤 미러 |
seo-floor | 공개 웹 표면(public web surface)이 생성될 때 |
그래프가 선택하고, 해결하며, 패킹하는 방법: docs/context-graph.md.
당신 자신의 섹션의 CLAUDE.md
은 overlay/profile.md로부터 오며,
절대로 이 리포지토리 안으로 들어오지 않습니다.
engine/mods/는 Claude Code의 후크 엔진 내부에서 프로세스 생성 없이 실행되는 함수-후크 플러그인들을 담고 있습니다: claude-runtime (런타임 어댑터: 이벤트, 판단(judgments), 스냅샷)과 harness-mods (라우팅, 컨텍스트 너지(context nudges), 비밀 마스킹(secret redaction), 서브에이전트 회계(subagent accounting), 읽기 캐시). canary.cjs와 shadow-report.cjs는 클래식 후크로부터 이들을 검증하며, universal-adapter.cjs는 이러한 기능들 중 각 클라이언트가 어떤 것을 가지고 있는지 기록하여, 포트가 사칭하는 대신 Mods 전용 아티팩트를 이유와 함께 떨어뜨리게 합니다. 그 배경 연구 기록은 labs/claude-mods/에 있습니다.
| Agent | Model | Role |
|---|---|---|
haiku-scout | haiku | 메커니즘적 조회: 파일 및 심볼 탐색, 인벤토리, git 히스토리; 파일과 라인을 인용 |
sonnet-implementer | sonnet | 주어진 범위 내의 기능 슬라이스 또는 리팩터; 테스트 파일을 절대 수정하지 않음 |
opus-owner | opus | 대규모 또는 위험한 종단 간(end to end) 작업; 위의 두 가지에 위임할 수 있음 |
e2e-verifier | sonnet | 다른 사람이 만든 변경 사항에 대해 verify 명령을 실행; 보고만 하고 수정하지 않음 |
security-reviewer | opus | 인증(auth), 청구(billing), 비밀(secrets), 웹훅 및 데이터베이스 변경에 대한 읽기 전용 검토 |
advisor | one rung above the caller | 아키텍처 선택이나 두 번째 실패한 수정이 더 강력한 모델을 필요로 할 때 초점을 맞춘 결정 하나 |
| Workflow | Shape |
|---|---|
adversarial-review | 각 차원에 대한 읽기 전용 탐지기, 그런 다음 발견 사항에 대해 기본적으로 반박되는 회의론자 |
fix-findings | 분리된 소유 그룹에서 확인된 발견 사항 적용, 각 수정 검토, 재수정 한 번, 검증, 수렴 |
tournament | N개의 각진 후보, 5가지 기준을 점수 매기는 심사위원단, 승자로부터의 합성 사양 및 접합부 |
understand | 명명된 하위 시스템에 대한 병렬 리더, 질문에 답하는 하나의 합성 지도 |
모든 스폰(spawn)은 모델 이름을 지정하고 모든 팬아웃(fan-out)은 그 한계를 선언하며, 가드들이 이를 강제합니다. 계약: core/rules/modules/delegation-and-model-routing.md
.
의존성 없는 Node 및 PowerShell로 구성되며, 각각 자체 디렉터리에 README 또는 자신이 무엇을 하는지 설명하는 헤더가 있습니다.
AI 자동 생성 콘텐츠
본 콘텐츠는 GitHub AI Tools의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기