출처와 조사 기준

이 문서는 기존 PyTorchKR 소개 글의 companion note다. 기존 글이 공개 발표의 개념과 의미를 정리했다면, 이번 문서는 요청된 GitHub 저장소의 README·문서·TypeScript/Python 구현·테스트를 직접 대조한 저장소 조사다.[4][9][15]

조사 대상은 PrimeIntellect-ai/prime-agentmain 고정 커밋 a3b3e753490d0a6ed180e905200c1a6690d78608이다.[1][2][3]

GitHub API snapshot은 저장소를 public·비아카이브·MIT 라이선스·TypeScript 저장소로 보고하며, 조사 시점에는 stars 14,053, forks 1,449, open issues 530이었다.[1]

고정 커밋은 Add GitHub issue templates (#1242)이며 bug report·feature request·documentation improvement issue form과 여러 package label 선택 지원을 포함한다.[2][3]

한 문장 요약

Prime Agent는 일반 코딩과 장시간 자율 작업을 위한 오픈소스 coding/research agent로, 모델에 많은 JSON 도구를 나열하기보다 지속되는 IPython control environment 하나를 프로그래밍 표면으로 제공하고, 그 위에 RLM 재귀 위임·daemon session·Continual Harness refinement를 결합한다.[4][9][10]

핵심은 모델이 대화 이력·파일·도구·서브에이전트를 각각 고정 스키마의 객체로만 소비하는 대신, Python 변수·함수·세션으로 조합하게 하는 것이다.[4][10] 저장소의 Continual Harness는 supplemental prompt, memory, skill description, reusable subagent specification을 durable state로 두되 기본 scope는 현재 세션의 local state다.[14]

아키텍처: Python은 표면, TypeScript는 권위 있는 호스트

기본 RLM runtime이 모델에 노출하는 built-in tool은 ipython 하나다. 파일 읽기·편집, project command, 결과 변환, skill 호출, delegation은 persistent kernel에서 시작하며 %%bash 셀의 subprocess와 Python namespace의 지속성을 구분한다.[10]

구현 경계는 명확하다. provider 호출, transcript/session persistence, child lifecycle, scheduling, usage accounting, safety policy는 TypeScript host가 소유하고, Python prime-agent-runtimerlm은 host request를 보내는 model-facing shim이다.[10][11][16]

KernelManager는 Jupyter shell·IOPub·control channel과 ZeroMQ framing을 관리하고, Python의 host.request Comm target 요청을 TypeScript AgentSession의 typed handler로 dispatch한다.[11][20]

이 분리는 Python에서 credential·provider execution·transcript write·worker routing·schedule을 직접 소유하지 않게 하면서도, 모델에는 일반 도구 호출보다 조합성이 높은 programming interface를 준다.[10][11]

커널 namespace는 compaction과 session resume 뒤에도 변수·import·함수·task handle을 유지하도록 설계되어 있다. 다만 kernel과 worker는 보안 경계가 아니라 lifecycle·failure containment를 위한 process isolation이며 일반적으로 client와 같은 OS 권한을 사용한다.[9][10][11]

RLM: 답변을 기다리는 subagent API가 아니라 admission interface

IPython에서 handle = await rlm("inspect the API", name="api-reviewer")를 호출하면 Python shim이 host.request("rlm.run", ...)을 보내고 TypeScript host가 child runtime을 admission한다.[11][15][16]

rlm()의 반환값은 child의 답변이 아니라 rlm_child_id, name, session_dir, model을 담은 admission handle이다. child answer는 agent_message reply 또는 파일로 오며, 부모는 child가 끝날 때까지 blocking wait를 하지 않는다.[10][11]

각 child는 독립 context·session directory를 가진 일반 AgentSession으로 생성되며, 별도 model을 지정하지 않으면 parent의 model·provider·skills·tools·retry/resource 설정을 상속한다.[10][11]

직접 child registry는 rlm.list_subagents()로 조회하고 rlm.delete_subagent()로 정리한다. registry 항목은 running/completed/error 상태와 active session ID·session ID·이름·artifact directory를 포함하며, compaction·kernel restart·parent restore 뒤에도 복구할 수 있도록 설계되어 있다.[10][11][16]

고정 소스의 기본 최대 재귀 깊이는 1이다. 따라서 root가 child를 생성하는 것은 허용하지만 child가 grandchild를 만드는 것은 별도 max-depth 설정 없이는 허용되지 않는다.[10][11]

Child usage는 parent assistant turn에 비동기적으로 귀속되고, transcript에는 child_usage_attributed 정보가 남는다. context-tree에서는 child 자신의 usage와 root aggregate를 구분해 보도록 설계되어 있어, 병렬 위임을 비용·컨텍스트 관점에서 분리해 관찰할 수 있다.[11]

Host bridge의 안전한 역할 분리

rlm-runtime.tsrlm.run, model search, child list/delete request의 입력을 검증한다. child 이름은 최대 64자, model은 비어 있지 않은 문자열이어야 하며 model search limit은 기본 8·최대 20으로 제한된다.[15]

Python host_request는 Jupyter Comm의 host.request로 request type과 payload를 전달하고, host의 ok/error 응답을 검증해 Python exception 또는 결과로 바꾼다.[11][16]

실행 중인 IPython cell이 await rlm(...)으로 admission 응답을 기다릴 때 shell channel이 교착되지 않도록 host 응답은 control channel에서 처리한다. 이 구현은 단순 RPC보다 복잡하지만, 실행 중인 kernel과 host operation 사이의 비동기 경계를 명시한다.[11][20]

Daemon-backed 장기 실행

아키텍처는 TUI를 실행의 소유자로 두지 않는다. client는 rendering·keyboard input을 담당하고, daemon supervisor는 routing·attachment·worker health·recovery를 담당하며, worker는 하나의 root AgentSessionRuntime·scheduler·kernel·모든 RLM descendants를 소유한다.[9][13]

세션 transcript는 JSONL로 저장되고 feature-specific state는 session artifact directory에 기록된다. TUI가 닫혀도 resident worker는 계속 동작하며 prime-agent agents, prime-agent attach <agent>, prime-agent status로 다시 연결하거나 상태를 확인한다.[12][13]

Supervisor replacement·worker restart 뒤에는 durable snapshot과 artifact를 기준으로 session·schedule·retained completed child를 rehydrate한다. 이 구조는 terminal client가 사라져도 long-running work가 계속될 수 있게 하지만, 그것이 작업 성공이나 결과 정확성을 보장하지는 않는다.[12][13]

Agent-to-agent communication은 daemon이 active session과 retained subagent 사이를 라우팅한다. auto, steer, follow_up delivery mode가 있고 receipt는 delivered 또는 queued이며, all broadcast도 family roster 범위 안으로 제한된다.[12]

Continual Harness: 상태 ledger와 /refine

Continual Harness의 entry kind는 prompt, memory, skill, subagent 네 가지다. Python HarnessStateharness_state.json에 entries와 refinement events를 저장하고, 각 entry에는 scope·reference·arguments·metadata·version이 포함된다.[17]

scope는 두 층이다.[14][17]

  • local: 현재 session artifact directory의 harness/harness_state.json.[11][17]
  • global: ~/.prime/agent/harness/harness_state.json.[11][17]

기본 refinement는 local이다. global 변경은 stable cross-session lesson, durable preference, reusable skill/subagent, 명시적으로 project-qualified 된 사실처럼 다른 session에도 영향을 줘야 할 때만 요청해야 한다.[11][14][17]

Skill entry는 임의의 텍스트 메모가 아니다. Python reference의 type, import, callable/call pattern과 arguments contract를 요구하며, 실제 Python-backed skill은 kernel environment에 설치되어 import name으로 노출된다.[14][17]

/refine은 source file을 직접 다시 쓰는 self-training loop가 아니다. 현재 trajectory·harness overview·refinement history를 별도 LLM planning pass에 넣고, create/update/delete JSON proposal을 검증한 뒤, supplemental harness state에 작고 증거 기반인 변경을 적용한다.[18]

기본 system prompt는 immutable이다. 적용된 edit는 before/after snapshot·rationale·expected outcome과 함께 기록되고, 이전 refinement ID를 이용한 rollback은 변경을 역순으로 되돌린다.[18]

따라서 “세션 경험이 디스크에 남는다”와 “모든 새 세션에 자동 전파된다”는 같은 말이 아니다. 고정 소스의 기본 동작은 local persistence이며, cross-session 효과는 global scope를 명시적으로 선택한 경우다.[10][14][17]

Skills와 확장성

Prime Agent는 Agent Skills의 SKILL.md metadata/discovery 형식을 지원하고, 여기에 Python package와 kernel callable을 결합한 Python-backed skill을 확장으로 제공한다.[14]

시작 시에는 skill의 이름·설명·type·위치 같은 metadata만 prompt에 노출하고, task가 맞을 때 full SKILL.md를 progressive disclosure 방식으로 읽는다. 이 구조는 skill 수가 늘어도 초기 prompt가 모든 상세 지시문만큼 커지는 것을 피한다.[14]

내장 skill-creator는 markdown skill과 Python-backed skill의 구분, package layout, dependency, callable, kernel import 검증을 안내한다. 단, continual harness의 skill entry는 설치된 실행 package 자체를 대체하지 않으므로 /refine과 skill packaging/review를 혼동하면 안 된다.[14]

장기 작업 제어면

저장소는 서로 다른 장기 실행 표면을 같은 worker runtime에 연결한다.[4][12]

표면역할
/heartbeat사용자가 현재 session에 두는 visible recurring instruction
rlm_heartbeatagent가 kernel에서 여러 개를 만들고 관리하는 recurring instruction
prime-agent schedule특정 agent에 one-time 또는 cron prompt를 전달
/goal완료·pause·resume·clear까지 유지되는 durable objective
/autonomousquality gate와 제한 안에서 다음 continuation을 결정
/compact오래된 context를 요약하되 kernel state·goal·child를 완료 신호 없이 유지

Autonomous mode는 continuation·turn·token·wall-clock limit과 quality gate command를 둔다.[12][19]

고정 소스의 기본값은 max continuations 3, max turns 12, max tokens 80,000, wall-clock 30분이며 gate retry 3회·gate timeout 5분이다.[19]

Gate가 실패하면 제한된 출력이 다음 agent turn으로 돌아가고, workspace snapshot이 바뀌지 않은 같은 실패 gate는 무조건 반복하지 않는다. gate 통과는 gate가 검사하는 조건만 통과했다는 뜻이고, limit에 도달한 것도 task success를 뜻하지 않는다.[12][19]

저장소 구성과 실행 검증

Root workspace는 packages/*와 extension examples로 구성되며, root script는 TUI·AI·agent·coding-agent build, Biome/TypeScript/browser smoke check, workspace test를 제공한다.[5][6]

packages/coding-agent@earendil-works/pi-coding-agent 0.7.2로, IPython-backed tools와 session management를 제공한다. source package의 public-facing configuration name은 prime-agent이고 Node 요구사항은 >=22.8.0이다.[7][8]

고정 checkout에서 다음 검증을 실제 실행했다.[6][7][21]

  • JSON manifest parsing: root/package/coding-agent/package-lock 모두 통과
  • git diff --check: 통과
  • npm ci --ignore-scripts: 성공, 351 packages 추가; npm audit가 moderate severity 1건 보고
  • npm run build: 성공; TUI·AI·agent·coding-agent build와 bundle 완료
  • 관련 coding-agent 핵심 suite: 7 files passed, 1 skipped; 207 passed, 3 skipped
  • Python focused suite: harness 35 OK, subagent registry 10 OK, agent message 2 OK.[21][22]

npm run buildpackages/ai가 public model catalogs를 읽어 tool-capable models 1,177개를 생성했지만, 이는 source build 검증일 뿐 외부 provider agent session을 실행한 결과가 아니다.

전체 workspace npm test는 600초 제한 전에 최종 집계를 내지 못해 timeout됐다. 따라서 전체 test suite green으로 기록하지 않는다. timeout 직전 일부 test file failure가 있었고, 관련 핵심 suite를 재실행한 결과 recursion 96개와 refinement/autonomous/kernel messaging/RLM heartbeat/ACP RLM 테스트 범위는 통과했다.[10][18][19]

Python 전체 discovery는 64개 중 MCP dependency가 없는 환경에서 2개가 import error였고, focused harness·registry·agent-message 테스트는 모두 통과했다.[21] 실제 provider 인증, interactive TUI attach/reattach, 장시간 daemon recovery, 외부 모델 호출은 실행하지 않았다.[4][9]

강점

  • 모델-facing surface를 persistent Python control environment로 통일해 파일·셸·데이터·skill·subagent를 코드로 조합할 수 있다.[4][10]
  • child admission과 결과 전달을 분리해 parent가 여러 독립 작업을 fan-out하고 자기 context를 계속 사용할 수 있다.[10][11]
  • daemon worker·JSONL·artifact·kernel snapshot을 결합해 terminal disconnect를 session owner의 종료와 분리한다.[9][12][13]
  • /refine이 base prompt를 불변으로 두고 작은 CRUD edit·evidence·rollback을 기록해 자기개선 상태를 검토 가능한 ledger로 만든다.[17][18]
  • autonomous continuation에 gate·retry·workspace-change detection·budget을 넣어 “계속 시도”를 무제한 loop로 방치하지 않는다.[19]

주의점과 해석의 한계

  • IPython kernel은 model-generated Python과 project command를 사용자 OS 권한으로 실행하므로 security sandbox가 아니다. 신뢰하지 않는 repository·skill·instruction은 별도 sandbox 또는 제한 환경에서 실행해야 한다.[4][10][11]
  • rlm()은 child 답변을 반환하지 않으므로 parent orchestration은 agent_message·파일·registry를 명시적으로 설계해야 한다.[10][11]
  • /refine은 실행 가능한 새 Python package를 자동으로 안전하게 배포하는 기능이 아니라 supplemental state proposal/apply 계층이다.[14][18]
  • 전체 workspace test와 MCP-specific Python tests의 최종 green은 확인하지 못했다. 이번 문서의 실행 결과는 build와 명시된 focused suite의 결과로 한정한다.[6][7][21]
  • GitHub stars·forks·issue 수와 main의 HEAD는 이동하는 값이므로, 이 summary의 코드 주장은 pinned commit을 우선하고 API 수치는 조사 시각의 snapshot으로만 읽어야 한다.[1][2]

관련 위키

원문 보존 위치

선택 파일 raw capture와 고정 commit·SHA-256은 raw source: github-primeintellect-prime-agent에 저장되어 있다.

Sources

[1] https://api.github.com/repos/PrimeIntellect-ai/prime-agent [2] https://api.github.com/repos/PrimeIntellect-ai/prime-agent/commits/a3b3e753490d0a6ed180e905200c1a6690d78608 [3] https://github.com/PrimeIntellect-ai/prime-agent/commit/a3b3e753490d0a6ed180e905200c1a6690d78608 [4] https://raw.githubusercontent.com/PrimeIntellect-ai/prime-agent/a3b3e753490d0a6ed180e905200c1a6690d78608/README.md [5] https://raw.githubusercontent.com/PrimeIntellect-ai/prime-agent/a3b3e753490d0a6ed180e905200c1a6690d78608/AGENTS.md [6] https://raw.githubusercontent.com/PrimeIntellect-ai/prime-agent/a3b3e753490d0a6ed180e905200c1a6690d78608/package.json [7] https://raw.githubusercontent.com/PrimeIntellect-ai/prime-agent/a3b3e753490d0a6ed180e905200c1a6690d78608/packages/coding-agent/package.json [8] https://raw.githubusercontent.com/PrimeIntellect-ai/prime-agent/a3b3e753490d0a6ed180e905200c1a6690d78608/packages/coding-agent/docs/quickstart.md [9] https://raw.githubusercontent.com/PrimeIntellect-ai/prime-agent/a3b3e753490d0a6ed180e905200c1a6690d78608/packages/coding-agent/docs/architecture.md [10] https://raw.githubusercontent.com/PrimeIntellect-ai/prime-agent/a3b3e753490d0a6ed180e905200c1a6690d78608/packages/coding-agent/docs/rlm.md [11] https://raw.githubusercontent.com/PrimeIntellect-ai/prime-agent/a3b3e753490d0a6ed180e905200c1a6690d78608/packages/coding-agent/docs/rlm-runtime.md [12] https://raw.githubusercontent.com/PrimeIntellect-ai/prime-agent/a3b3e753490d0a6ed180e905200c1a6690d78608/packages/coding-agent/docs/long-running-agents.md [13] https://raw.githubusercontent.com/PrimeIntellect-ai/prime-agent/a3b3e753490d0a6ed180e905200c1a6690d78608/packages/coding-agent/docs/daemon.md [14] https://raw.githubusercontent.com/PrimeIntellect-ai/prime-agent/a3b3e753490d0a6ed180e905200c1a6690d78608/packages/coding-agent/docs/skills.md [15] https://raw.githubusercontent.com/PrimeIntellect-ai/prime-agent/a3b3e753490d0a6ed180e905200c1a6690d78608/packages/coding-agent/src/core/rlm-runtime.ts [16] https://raw.githubusercontent.com/PrimeIntellect-ai/prime-agent/a3b3e753490d0a6ed180e905200c1a6690d78608/prime-agent-runtime/src/rlm/__init__.py [17] https://raw.githubusercontent.com/PrimeIntellect-ai/prime-agent/a3b3e753490d0a6ed180e905200c1a6690d78608/prime-agent-runtime/src/rlm/harness.py [18] https://raw.githubusercontent.com/PrimeIntellect-ai/prime-agent/a3b3e753490d0a6ed180e905200c1a6690d78608/packages/coding-agent/src/core/refinement/refinement.ts [19] https://raw.githubusercontent.com/PrimeIntellect-ai/prime-agent/a3b3e753490d0a6ed180e905200c1a6690d78608/packages/coding-agent/src/core/autonomous.ts [20] https://raw.githubusercontent.com/PrimeIntellect-ai/prime-agent/a3b3e753490d0a6ed180e905200c1a6690d78608/packages/coding-agent/src/core/kernel/index.ts [21] https://raw.githubusercontent.com/PrimeIntellect-ai/prime-agent/a3b3e753490d0a6ed180e905200c1a6690d78608/prime-agent-runtime/test/test_harness.py [22] https://raw.githubusercontent.com/PrimeIntellect-ai/prime-agent/a3b3e753490d0a6ed180e905200c1a6690d78608/prime-agent-runtime/test/test_subagent_registry.py