해결하려는 문제
코딩 에이전트는 계획을 잘 씁니다. 못하는 것은 그 계획을 붙잡아 두는 일입니다. 기능을 하나 부탁하면 그럴듯한 작업 목록이 나오지만, 메시지 세 개만 지나도 절반은 잊히고, 다음 실행에서는 아키텍처가 슬그머니 새로 만들어집니다. 계획은 처음부터 어디에도 없었습니다. 대화 속에 있었고, 대화는 이미 흘러가 버렸습니다.
나와 에이전트가 함께 볼 수 있는 곳에 계획을 두면, 이런 일은 더 이상 생기지 않습니다.
진행 방식
에이전트가 계획을 씁니다
줄글이든, 작업 목록이든, 설계 메모든 원하는 방식대로 씁니다. 이 부분은 이미 잘 됩니다.
호출 한 번으로 그림이 됩니다
에이전트는 구조를 보내고, 노드는 서버가 모두 배치합니다. 에이전트는 무엇이 무엇에 의존하는지만 선언하고 좌표는 절대 정하지 않습니다. 모델에게 위치를 정하게 하면 아무도 읽고 싶지 않은 다이어그램이 나오기 때문입니다.
옮기고 싶은 것은 직접 옮깁니다
직접 끌어다 놓은 노드는 고정되고, 그때부터 자동 배치는 그 노드를 건드리지 않습니다. 나머지 노드는 그 주변에 맞춰 다시 배치됩니다.
파일은 그대로 가져갑니다
포함 관계는 디렉터리가 되고, 의존 순서는 파일 이름 앞의 번호가 됩니다. 이 폴더를 소스 코드 옆에 커밋해 두면 에이전트가 실행할 때마다 읽습니다.
에이전트가 보는 것
URL 하나와 키 하나로 도구 스물한 개를 쓸 수 있습니다. 설치할 것도, 서버와 버전을 맞춰 둘 것도 없습니다. 호출 한 번으로 플랜을 열고, 그 안에 그리는 모든 것은 여러 변경을 묶어 원자적으로 처리하는 단 하나의 통로를 거칩니다. 그래서 노드 마흔 개가 하나씩 느릿느릿 기어 나오는 대신 캔버스에 한꺼번에 나타납니다.
노드는 사람이 알아볼 수 있는 식별자로 가리키므로, 같은 요청을 다시 보내도 두 번째에는 아무것도 바뀌지 않습니다.
도구 레퍼런스create_plan({ title: "Billing rework" })
apply_ops({
planId: "…",
ops: [
{ op: "upsert_node",
node: { slug: "pricing-rules", title: "Pricing rules" } },
{ op: "upsert_node",
node: { slug: "render-pdf", title: "Render PDF" } },
{ op: "upsert_edge",
edge: { from: "pricing-rules", to: "render-pdf" } }
]
})내보내면 나오는 것
그래프를 frontmatter에 담은 평범한 Markdown 파일들을 묶은 zip, 그리고 Obsidian에서 배치 그대로 열리는 .canvas 파일입니다. 이 형식을 읽는 데 이 서비스는 전혀 필요 없고, 같은 플랜은 언제 내보내도 바이트 하나 다르지 않은 결과가 나옵니다.
plan-export.zip ├── README.md ├── 01-foundation/ │ ├── 01-ledger-schema.md │ └── 02-pricing-rules.md ├── 02-invoicing/ │ └── 01-render-pdf.md ├── plan.canvas └── plan.json
직접 호스팅하기
전체 스택이 AGPL-3.0이고, Node와 Postgres만 있으면 됩니다. 독점 인증 서비스도, 관리형으로만 제공되는 의존성도 없으며, 모든 설정은 환경 변수로 합니다. 소스 코드가 내 네트워크 밖으로 나갈 수 없다면, 플랜도 마찬가지로 그 안에 머뭅니다.
지금 어디까지 왔는지
프리알파 단계이며, 이 점은 분명히 말해 두겠습니다. 계획 세우기, 그리기, 실시간 공동 편집, 에이전트 연동, 공유, 내보내기, 워크스페이스와 계정 관리는 모두 동작합니다. 이메일은 한 통도 보내지 않으므로 초대는 직접 전달하는 링크이고, 소셜 로그인은 아직 없습니다. 플랜은 내보내 두세요. 내보내기는 바로 그러라고 있는 기능입니다.