블로그4분 읽기

AI 워크플로우 장인 Cordis와 트라제토리

DeepSeek Harness의 'Everything is a Plugin'이 실제로 동작하는 방식을 보여주는 게 Cordis예요. 하네스의 심장인 플러그인 커널과, 에이전트가 한 모든 일을 시간 순서로 보여주는 트라제토리(Trajectory)를 정리했어요.

DeepSeek Harness를 처음 봤을 때 다들 한 가지가 궁금했어요.

"Everything is a Plugin"이라는 말, 실제로는 어떻게 동작하는 걸까.

그 답이 Cordis입니다. 그리고 그 위에서 일어나는 모든 일을 보여주는 게 트라제토리(Trajectory)예요.

하네스의 심장, Cordis

Cordis는 DeepSeek Harness를 움직이는 플러그인 커널이에요.

하네스가 몸이라면, Cordis는 그 몸의 심장이자 신경계입니다. 모델 어댑터, 도구, 세션, 샌드박스, 저장소, 에이전트 루프, UI까지. 전부 Cordis 커널 위에서 도는 플러그인이에요.

중요한 건 이게 은유가 아니라 실제 구현이라는 점입니다. 하네스 자체조차 커널 위의 플러그인이고, 특권 계층(privileged core)이 없어요. 전부 교체 가능합니다.

핫스와프의 비밀

Cordis가 강력한 이유는 두 가지 설계 덕분이에요.

Reversible effects. 플러그인이 등록한 모든 부수효과는 제거 시 깔끔하게 되감깁니다. 플러그인을 뺐다 꽂아도 시스템에 흔적이 안 남아요.

Reactive dependency injection. 플러그인 로드/언로드 시 의존하는 다른 플러그인들이 자동으로 반응합니다.

이 둘이 합쳐지면, 실행 중에 모델을 바꾸고, 도구를 바꾸고, 에이전트 루프를 통째로 갈아끼우는 핫스와프가 가능해져요. 소스 코드를 건드릴 필요 없이 설정만으로요.

툴 호출도 파이프라인이다

Cordis의 또 다른 재미난 관점은 툴 호출 처리예요.

Hooks → approval → sandbox → timeout

툴 호출 하나가 이 단계들을 거치는데, 각 단계가 전부 플러그인으로 확장 가능합니다. 승인 정책을 바꾸고 싶으면 approval 플러그인을 교체하면 되고, 샌드박스 규칙을 바꾸고 싶으면 sandbox 플러그인을 교체하면 돼요.

워크플로우 자체가 조립식입니다.

세션은 로그다

Cordis 위의 모든 세션은 append-only 이벤트 로그로 기록됩니다.

타입이 있는 이벤트가 순서대로 쌓이고, 모델이 보는 히스토리는 이 로그에서 파생돼요. 모델이 본 모든 것은 세션 기록에서 재구성 가능해야 하죠. "로그가 기억한다"는 원칙입니다.

이 로그가 있기 때문에 아래 트라제토리가 가능합니다.

트라제토리: 에이전트의 모든 흔적을 보는 눈

dsh 데스크톱(웹 UI)에서 세션을 열면, 채팅 탭 옆에 Trajectory 탭이 있어요. 이건 에이전트가 한 모든 일을 시간 순서로 보여주는 **이벤트 원장(ledger)**입니다.

화면 구성은 이래요.

  • User / Assistant / Tool / 중첩 Subtool 레코드가 구분되어 표시됩니다
  • 두꺼운 규칙 = 턴 경계, 얇은 인라인 마커 = 스텝
  • 원장은 인덱스·이벤트·내용만 담고, 선택하면 로컬 인스펙터가 열려요

인스펙터가 보여주는 건 토큰 사용량, 소요 시간, Input, Output, Timing까지. 에이전트가 각 스텝에서 뭘 보내고 뭘 받았는지, 얼마나 걸렸는지, 토큰을 얼마나 썼는지 전부 까볼 수 있어요.

Overview: 시간을 보는 법

트라제토리의 가장 멋진 부분은 Overview예요.

원장 위에 고정된 Overview가 실제 레코드의 시작/지속 시간을 왼쪽에서 오른쪽으로 투영합니다. 마치 타임라인처럼요.

  • 구간을 드래그하면 그 시간대에 활성화된 레코드만 원장에 포커스
  • 휠 제스처로 시간 축을 줌
  • 우클릭 드래그로 줌된 뷰를 팬
  • 에이전트가 어느 순간 뭘 하고 있었는지, 병렬로 뭐가 돌았는지 한눈에 보여요

어시스턴트 응답은 TTFT(첫 토큰까지의 시간)와 디코딩 시간을 분리해서 표시하고, 500ms 호버로 정확한 시각·소요시간이 나옵니다.

채팅과 분리된 원장

여기서 설계 철학이 드러나요.

트라제토리는 채팅 스냅샷을 건드리지 않습니다. 완성된 답변의 블록·타이밍·사용량은 트라제토리 상태에 보존하고, 세션 창은 원시 이벤트를 그대로 유지해요.

대화는 대화대로, 기록은 기록대로. 그리고 이 뷰는 순수 소비자 플러그인이라 모델 요청을 하나도 안 보냅니다. 그냥 로컬에서 렌더링만 해요.

컴팩션(컨텍스트 압축)이 일어나도 원장에 "Between turns" 섹션으로 흔적이 남습니다. 무엇이 압축됐는지도 투명하게 보여주는 거죠.

장인의 손

이 모든 걸 한 줄로 요약하면 이래요.

AI 워크플로우 장인은 모델을 고르지 않고, 커널을 다룹니다.

모델은 뇌일 뿐이에요. 뇌가 일하는 환경, 도구, 흐름, 규칙을 설계하는 게 진짜 실력입니다. Cordis는 그걸 조립식으로 만들었고, 트라제토리는 그 결과물을 낱낱이 보여줍니다.

아직 개발자 프리뷰라 파격적인 변경이 예상되지만, 방향성은 분명해요. 에이전트 워크플로우는 더 이상 코드로 고정된 게 아니라, 플러그인으로 조립되고, 로그로 검증되는 시대가 오고 있습니다.

원문과 참고 자료

FAQ

자주 묻는 질문

Cordis가 뭔가요?
DeepSeek Harness를 움직이는 플러그인 커널이에요. 모델 어댑터, 도구, 세션, 샌드박스, 저장소, 에이전트 루프, UI까지 전부 이 커널 위에서 도는 플러그인이고, 특권 계층이 없어 전부 교체 가능해요.
트라제토리 탭은 뭘 보여주나요?
에이전트가 한 모든 일을 시간 순서로 보여주는 이벤트 원장이에요. 각 스텝의 토큰 사용량, 소요 시간, Input/Output까지 까볼 수 있고, Overview에서 시간대별로 드래그·줌해서 볼 수 있어요.
핫스와프가 가능하다는 게 사실인가요?
네. 플러그인의 모든 부수효과는 되돌릴 수 있고(reversible effects), 의존성도 자동 반응이라 실행 중에 모델이나 도구, 에이전트 루프를 통째로 갈아끼울 수 있어요. 소스 코드를 건드릴 필요 없이 설정만으로요.