<p align="center">
<img src="https://raw.githubusercontent.com/Cyrax321/CONTINUUM/HEAD/docs/assets/readme-img.png" alt="CONTINUUM 배너" width="100%" />
</p>
<p align="center">
<strong>CONTINUUM: 장기 실행 AI 에이전트를 위한 검증 가능한 의미론적 복구(Verifiable semantic recovery for long-running AI agents).</strong>
의미론적 체크포인트(Semantic checkpoints, 대화 덤프가 아님), 중복 부작용을 거부하는 항등원(idempotent) 액션 원장(action ledger), 그리고 해시 체인으로 연결된 변조 방지 이벤트 로그(hash-chained tamper-evident event log)가 기본적으로 거부하는(deny-by-default) MCP 서버로 노출됩니다. 프레임워크에 구애받지 않으며, Python 3.11 이상을 지원합니다.
</p>
<p align="center">
<a href="https://www.python.org/downloads/"><img src="https://img.shields.io/badge/python-3.11+-3776AB?style=flat-square&logo=python&logoColor=white" alt="Python 3.11+" /></a>
<a href="https://pypi.org/project/continuum-agent/"><img src="https://img.shields.io/pypi/v/continuum-agent?style=flat-square&label=PyPI" alt="PyPI" /></a>
<a href="LICENSE"><img src="https://img.shields.io/badge/license-Apache_2.0-blue?style=flat-square" alt="라이선스" /></a>
<a href="https://pydantic.dev"><img src="https://img.shields.io/badge/pydantic-v2-E92063?style=flat-square&logo=pydantic&logoColor=white" alt="Pydantic v2" /></a>
<a href="https://continuum-nu-six.vercel.app/"><img src="https://img.shields.io/badge/website-live_demo-E06D53?style=flat-square" alt="웹사이트 데모" /></a>
<a href="https://github.com/Cyrax321/CONTINUUM/actions/workflows/ci.yml"><img src="https://github.com/Cyrax321/CONTINUUM/actions/workflows/ci.yml/badge.svg" alt="CI 상태" /></a>
<a href="https://app.codecov.io/gh/Cyrax321/CONTINUUM"><img src="https://img.shields.io/codecov/c/github/Cyrax321/CONTINUUM?style=flat-square&logo=codecov" alt="커버리지" /></a>
<a href="https://github.com/Cyrax321/CONTINUUM"><img src="https://img.shields.io/github/stars/Cyrax321/CONTINUUM?style=flat-square" alt="스타"] /></a>
</p>
<p align="center" style="margin-bottom: 6px;">
<a href="https://continuum-nu-six.vercel.app/"><strong>CONTINUUM 웹사이트 방문하기</strong></a>
</p>
<p align="center" style="margin-top: 6px;">
<a href="https://app.ona.com/#https://github.com/Cyrax321/CONTINUUM"><img src="https://ona.com/build-with-ona.svg" alt="Ona로 구축하기" /></a>
</p>
<p align="center">
<sub style="font-size: 0.9em">만약 CONTINUUM이 에이전트의 복구에 도움이 되었다면, 레포지토리에 별점을 눌러주세요. 이는 다른 사람들이 이 기능을 발견하는 데 도움을 주고 좋은 첫 이슈가 계속 올라오게 합니다.</sub>
</p>
<p align="center">
<sub style="font-size: 0.9em"><strong style="color: #333">English</strong> | <a href="README.zh-CN.md">简体中文 (간체 중국어)</a> | <a href="README.es.md">Español (스페인어)</a> | <a href="README.ja.md">日本語 (일본어)</a> | <a href="README.pt-BR.md">Português (포르투갈어)</a> | <a href="README.ko.md">한국어</a></sub>
</p>
목차 (Contents)
Why · 빠른 시작 (Quick Start) · 작동 방식 (How it works) · CONTINUUM의 위치 (Where CONTINUUM sits) · 기능 (Features) · 보안 확장 (Security Extension) · 경험적 검증 (Empirical Verification) · MCP 통합 (MCP Integration) · 프레임워크 통합 (Framework Integration) · 핵심 개념 (Core Concepts) · 아키텍처 (Architecture) · API 및 CLI (API and CLI) · 로드맵 (Roadmap) · CONTINUUM이 아닌 것 (What CONTINUUM Is Not) · 관련 연구 (Related work) · 상태 및 한계점 (Status and limitations) · 기여 방법 (Contributing) · 라이선스 (License)
왜 필요한가 (Why)
현대의 AI 에이전트는 장시간 작업을 수행합니다 (수백 개의 LLM 호출, 도구 호출(tool invocations), 파일 및 데이터베이스 쓰기). 이들이 충돌하면 일반적인 대응 방식은 처음부터 모든 것을 재실행하는 것입니다. 이는 작업의 중복을 초래하고, 부작용(side effects)을 중복하며, 토큰을 낭비하고, 의사결정을 상실하게 만듭니다.
CONTINUUM은 더 좁고 어려운 질문을 던집니다: 에이전트가 자신의 작업 상태에 대한 압축된 의미론적 표현(semantic representation)으로부터 작업을 재개할 수 있으면서도, 그 상태가 현재 환경에서도 여전히 유효한지 독립적으로 검증할 수 있는가? 이 기능의 차별점은 세 부분으로 나뉩니다:
- 의미론적 체크포인트(Semantic checkpoints): 에이전트가 계속 진행하는 데 필요한 것을 담은 간결하고 버전 관리되는 표현이며, 대화 기록을 덤프한 것이 아닙니다.
- 독립적인 환경 재검증(Independent environment revalidation): 모든 체크포인트 구성 요소는 재개 전에 현재 환경과 검증되며, 오래된 정보(staleness)가 의존성 그래프를 통해 전파됩니다.
- 출처 인식 상태(Provenance-aware state): 모든 사실이 그 기원(출처)을 추적할 수 있으므로, 에이전트가 보고하는 진행 상황은 결코 자체적으로 인증되지 않습니다.
빠른 시작 (Quick Start)
continuum-agent 0.1.2 버전으로 PyPI에 게시되었습니다: pip install continuum-agent (pip install continuum-agent==0.1.2로 버전을 고정할 수 있습니다). 릴리스 태그에는 추가적으로 GitHub Releases에 빌드된 휠(built wheels)이 첨부됩니다.
클론하거나 로컬 설치가 필요 없는 경로:
| 경로 | 방법 |
|---|
| PyPI에서 설치 | pip install continuum-agent==0.1.2 후, continuum --help 실행 |
| ... | |
Docker 이미지는 main 브랜치에 푸시되거나 모든 릴리스 태그(.github/workflows/docker-publish.yml)가 발생할 때 CI를 통해 GHCR(GitHub Container Registry)에 게시됩니다. Codespace는 .devcontainer/에 정의되어 있습니다. 노트북은 examples/demo.ipynb이며, 첫 번째 셀에서 CONTINUUM을 가져오기(import) 할 때만 설치가 이루어지므로 Colab, Binder, 클론된 환경 모두에서 이 파일이 실행될 수 있습니다.
git clone https://github.com/Cyrax321/CONTINUUM.git
cd CONTINUUM
...
pip 대체 방법: 위의 모든 명령어에서 uv pip install을 pip install로 대체하십시오.
선택적 환경 어댑터(Optional environment adapters):
uv pip install -e ". [browser]": BrowserAdapter를 활성화합니다. 브라우저 바이너리를 설치하려면 별도로 playwright install chromium을 실행해야 합니다.
uv pip install -e ". [kubernetes]": KubernetesAdapter를 활성화합니다. 이 경우 kubectl과 구성된 클러스터는 외부 전제 조건으로 남아 있습니다.
만약 uv 대신 pip를 사용한다면, 동일한 외부 전제 조건 하에 pip install -e ". [browser]" 또는 pip install -e ". [kubernetes]"을 실행하십시오.
검증:
The core library는 하나의 런타임 의존성(pydantic>=2.7)만 가지고 있으며, 나머지 모든 기능은 선택적(opt-in)입니다. 전체 패키지 맵, 추가 기능 매트릭스(extras matrix), Postgres 테스트 설정 및 명령어별 검증 사항은 references/install.md에서 확인할 수 있습니다.
코딩 에이전트를 2분 만에 연결하기 (Wire a coding agent in two minutes)
Claude Code, Gemini CLI 또는 Codex의 경우, 사용자는 Python을 작성할 필요가 없으며 프롬프트 파일도 필요하지 않습니다:
continuum start my-task --goal "Agent가 수행해야 할 작업"
continuum hooks install claude-code --with-gate
이후 에이전트가 작성하는 모든 파일은 해시 체인(hash-chained) 증거로 기록되며, 세션은 자동 상태 브리핑으로 시작하고, 주장되지 않은 부작용 효과(unclaimed side effects)는 .continuum/gate.json에 등록된 후 발생하기 전에 거부되며, 충돌이 발생한 후에도 실행 가능한 다음 단계와 함께 새로운 세션을 재개합니다. CLAUDE.md 파일은 필요하지 않습니다.
최소 라이브러리 예시: 기록 및 복구(record and recover):
from continuum import EventType, Run, SQLiteStorage, project
store = SQLiteStorage("agent.db")
...
직접 증명 실행하기 (Run the proof yourself):
python examples/crash_recovery_agent.py
python examples/context_compaction.py
python examples/model_switch.py
...
e2e-autonomy-test/ 키트는 실제 인보이스 배치 작업을 시나리오화하고, 실행 도중 강제 종료(hard-kill)를 일으킨 후, 새로운 재개 세션을 통해 아웃박스(outbox), 원장(ledger), 이벤트 체인(event chain)을 외부에서 점수화합니다. Run 1은 실제 Claude Code 세션에 대해 7/7 메커니즘의 점수를 받았습니다. 전체 워크스루는 references/e2e.md를 참조하십시오.
작동 방식 (How it works)
CONTINUUM은 LLM 컨텍스트(임시)를 내구성 있는 작업 상태(durable task state)(영구적)와 분리합니다. 대화 기록을 저장하는 대신, 계속 진행하는 데 필요한 최소한의 검증된 정보인 의미론적 체크포인트(semantic checkpoint)를 구성합니다.
CONTINUUM how it works
상세 설명, 투영 모델(projection model), 그리고 복구 컨텍스트는 references/architecture.md에 있습니다.
CONTINUUM의 위치
모든 장기 실행 에이전트에는 네 가지 관심사 영역이 중첩됩니다. CONTINUUM은 그중 마지막 하나만을 소유하며, 나머지 세 가지 영역과는 명시적인 연결 고리(seams)를 통해 접점을 만듭니다. 경쟁사를 언급하거나 주장을 할 때는 이미 배포된 모듈이나 이를 출력하는 공개된 스위트가 없다면 아무런 주장도 하지 않습니다.
| 레이어 | 답변 내용 | 연결 방식 (배포된 모듈 또는 공개된 결과물) |
|---|
| Harness | 에이전트는 도구를 호출하고 목표를 향해 진행하는 방법은 무엇인가? | CONTINUUM 외부. 배선 지점(Wiring points)은 src/continuum/adapters/generic.py (GenericAgentAdapter), src/continuum/adapters/thin.py (CrewAI, AutoGen, Pydantic AI hooks), src/continuum/mcp/server.py (MCP stdio), src/continuum/hooks.py 및 src/continuum/clienthooks.py (코딩-CLI 라이프사이클 후크), src/continuum/gateway.py (모든 언어에 대한 HTTP 프록시 강제 적용), 그리고 src/continuum/otel.py (OpenTelemetry 브릿지)에서 배포됩니다. 레시피는 docs/recipes/와 references/adapters.md에 있습니다. |
| ... | | |
모든 위 행은 태그가 지정된 커밋의 main에 존재하는 경로로 추적 가능합니다. 이 표에는 벤치마크 수치가 재진술된 것은 아무것도 없습니다. 벤치마크는 이미 출력하는 스위트 결과물 내에만 존재합니다. 공개된 스위트와 설계 문서는 전체 목록을 보려면 docs/research.md를 참조하십시오. | | |
실제 크래시 복구(Crash recovery, for real)
아래 이미지는 모의(mock)가 아닙니다. 이는 python demo-run/generate_crash_visual.py를 실행한 결과물입니다. 이 스크립트는 문서 399에서 os._exit(9)로 종료될 때까지 demo-run/worker.py를 실행하고, continuum resume --env dataset=v4를 호출하며 거부 경로(REQUEST_HUMAN, safe:false, exit 21)를 보여준 후, 탐침(probe)을 통해 불확실한 부작용(side effect)을 조정하고, 동일한 데이터베이스에서 재개하여 중복 작업 없이 완료합니다. 또한 감사(audit) 목적으로 전체 기록은 docs/assets/crash-recovery.txt로 저장됩니다.
재생성하기:
python demo-run/generate_crash_visual.py
Crash recovery: hard kill mid-batch, refusal, reconcile, resume
코드와 함께 전체 워크스루는 docs/recovery_walkthrough.md (examples/recovery_walkthrough.py)에 있습니다. 최소 벤치마크 하네스는 references/bench.md (continuum benchmark)에 있습니다.
기능 (Features)
| 역량 (Capability) | 제공하는 것 (What it gives you) |
|---|
| 의미론적 체크포인트 (Semantic checkpoints) | 간결하고, 버전 관리되며, 검사 가능한 상태로, 단순한 기록(transcript dump)이 아닙니다. |
| ... | |
보안 확장 (Security Extension)
두 가지 추가적인 보안 확장이 복구 및 체크포인트 기저층(substrate) 위에 자리 잡고 있습니다. 이들은 재개(resume), 재생(replay), 또는 기존의 충돌 시 재검증 경로를 변경하지 않습니다.
상태: 명시되고 테스트되었으나, 아직 배포되지 않음 (issue #1030). 아래의 모듈들은 완성되었고 테스트를 통과하지만, 엔진이나 어떤 부분에서도 아직 호출되지 않습니다 (CONTINUUM은 충돌/재개 시에만 재검증합니다). 이들을 연결하는 것은 로드맵 결정 사항입니다. 따라서 아래의 현재형(present tense) 내용은 배포된 동작이 아닌 설계로 읽어주십시오.
- 안전 계획 루프 (Secure Planning Loop): 관찰(observations)은 출처(provenance)를 지니며 두 개의 독립적인 신호('검증됨'(verified) / '미검증'(unverified) / '논쟁 중'(contested))에 의해 검증됩니다. 미검증되거나 논쟁 중인 관찰을 기반으로 제한된 계획 분기는
REQUIRES_REVIEW로 격상됩니다. 결정 사항은 레저(ledger)에 PERCEPTION_OBSERVED 및 BRANCH_RESOLVED 이벤트로 추가됩니다.
- 주기적 재검증 (Periodic Revalidation): 단계 간격(기본값 25)마다 그리고 앱 전환 시에도 복구 엔진을 재사용하여, 실행 도중 환경 변화(environment drift)가 다음 충돌 시점뿐만 아니라 한 사이클 내에서 포착되도록 합니다.
docs/PROBLEM.md, docs/RESULTS.md, 및 STATUS.md를 참조하십시오.
경험적 검증 (Empirical Verification)
CONTINUUM은 단순한 목업 단위 테스트(mock unit tests)가 아닌, 실제 LLM 에이전트, 라이브 프로토콜 경계, 그리고 하드 프로세스 충돌을 대상으로 검증됩니다.