---
title: "에이전트-어젠다-reverse-datetree-멀티디바이스-설계 에이전트-어젠다"
url: "https://notes.junghanacs.com/botlog/20260227T115447"
author: "Junghan Kim"
date: "2026-02-27T11:54:00+09:00"
lastmod: "2026-02-27T11:54:00+09:00"
tags: ["agent","bib","botlog","denote","orchestration","agenda"]
description: "에이전트 활동을 org-agenda에서 함께 보기 위해 reverse datetree 기반 멀티디바이스 어젠다 설계를 제안한다."
---

> [!abstract] 이 노트에 대하여
> 
> 에이전트도 시간축 위에 살아야 한다는 생각에서 출발한 어젠다 설계다. DB 없이 파일만으로, 멀티디바이스 환경에서도 최신 기록을 앞에 쌓고 org-agenda로 함께 읽는 구조를 만든다. 인간과 봇의 하루가 같은 화면에 놓이기 위한 토대다.

## 히스토리

-   [2026-02-27 Fri 14:30] emacsclient 접근법 + xenodium emacs-skills 연결 추가
-   [2026-02-27 Fri 11:54] 생성 (“Akirak/Org-Reverse-Datetree” 2026) 이거 넣는다.

## 에이전트 어젠다 — reverse datetree 멀티디바이스 설계

### 발단

[봇-활동-기록-아키텍처와-힣노트-역사성-고찰](https://notes.junghanacs.com/botlog/20260224T164035)에서 멀티에이전트 쓰기 문제를 다뤘다. 거기서 "파일 분리 + 쓰기 규약"이 현실적 답이라 했는데, 여기서 한 발 더 나간다: **에이전트 활동을 org-agenda로 보자.**

GitHub에서 발견한 패턴 — 에이전트가 TODO + CLOCK 엔트리를 org 파일에 쓰고, org-agenda로 통합 조회 — 이 아이디어를 힣 체계에 맞게 재설계한다.

### 설계 원칙

1.  **DB 없이** — 파일 기반 철학 유지
2.  **Denote 파일명 규약** — 태그로 디바이스·에이전트 구분
3.  **Reverse datetree** — 최신이 위, 에이전트는 앞에만 읽고 앞에 추가
4.  **org-agenda 네이티브** — CLOCK, TODO, 태그 → agenda view 한 번에
5.  **최소 파일** — agenda-files에 폴더 1개만 등록, 로딩 부담 최소화

### 핵심 구조

#### 폴더

```text
~/org/botlog/agenda/
```

`org-agenda-files` 에 이 폴더만 추가하면 됨.

#### 파일 네이밍 — Denote 규약

```text
YYYYMMDDTHHMMSS--에이전트-어젠다__<device>_agenda.org
```

디바이스별 1파일이 기본. `~/.current-device` 값이 태그로 들어감:

| 파일                                                    | 대상                  |
|-------------------------------------------------------|---------------------|
| `20260227T120000--에이전트-어젠다__thinkpad_agenda.org` | ThinkPad (회사)       |
| `20260227T120100--에이전트-어젠다__nuc_agenda.org`      | NUC (개인)            |
| `20260227T120200--에이전트-어젠다__laptop_agenda.org`   | 노트북 (개인)         |
| `20260227T120300--에이전트-어젠다__termux_agenda.org`   | Galaxy Fold4          |
| `20260227T120400--에이전트-어젠다__oracle_openclaw_agenda.org` | Oracle 서버, OpenClaw 봇 |
| `20260227T120500--에이전트-어젠다__oracle_heebot_agenda.org` | Oracle 서버, 힣봇     |

#### 분기 규칙

-   **로컬 워킹 에이전트** (Pi, Claude Code 등): 디바이스별 1파일 공유
    -   같은 머신의 에이전트들은 동시 실행이 드물고, 실행되더라도 reverse datetree 끝(앞)에 추가하므로 충돌 가능성 낮음
    -   충돌이 잦아지면 `__tags` 로 파일 분기 (예: `__thinkpad_claude_agenda.org`)
    -   분기한 파일은 나중에 상위 파일로 머지 가능 (datetree 포맷이니까)

-   **서버 상주 에이전트** (봇): 에이전트별 독립 파일
    -   stateful 존재이므로 독자 타임라인 관리가 맞음
    -   각자 workspace에서 컨텍스트를 유지

#### 파일 내부 — reverse datetree 포맷

\#+begin_example

## 2026

### 2026-02 February

#### 2026-02-27 Friday

##### 21:30 punchout

에이전트 CLOCK 합계: 2h 15m

##### fxf-uho-mvt #91 디버깅

-   DS Bind 로직 수정
-   QA 체크리스트 DS2-6 통과

##### elfeed 번역 벤치마크

-   6개 모델 비교, Gemini 3 Flash 기본값 선정

#### 2026-02-26 Thursday

##### pi-skills 일원화

-   SKILL.md 제거, pi-skills로 통합

\#+end_example

##### 왜 reverse인가

1.  **에이전트가 읽을 때**: 파일 앞부분만 읽으면 최근 컨텍스트 파악
2.  **에이전트가 쓸 때**: 오늘 날짜 섹션 앞에 추가 (append at front)
3.  **Emacs에서**: org-reverse-datetree 패키지가 이 포맷을 네이티브 지원
4.  **200자 이슈**: Claude Code의 CLAUDE.md 같은 메모리 파일은 용량 제한이 있음. reverse라면 최신 N줄만 읽어도 충분한 컨텍스트

##### org-reverse-datetree 연동

```emacs-lisp
;; https://github.com/akirak/org-reverse-datetree
(use-package org-reverse-datetree
  :config
  ;; botlog/agenda 파일에서 reverse datetree 사용
  (setq org-reverse-datetree-level-formats
        '("%Y"                    ; 연도
          "%Y-%m %B"              ; 월
          "%Y-%m-%d %A")))        ; 일
```

### org-agenda 통합

#### 최소 설정

```emacs-lisp
;; botlog/agenda 폴더를 agenda-files에 추가
(add-to-list 'org-agenda-files "~/org/botlog/agenda/")

;; 에이전트 활동만 보기 (커스텀 뷰)
(add-to-list 'org-agenda-custom-commands
             '("A" "Agent Activity"
               ((tags-todo "ai"
                 ((org-agenda-overriding-header "에이전트 진행 중")))
                (tags "PUNCHOUT"
                 ((org-agenda-overriding-header "퇴근 도장"))))))
```

#### agenda에서 볼 수 있는 것

| 뷰         | 필터            | 보이는 것               |
|-----------|---------------|---------------------|
| 일간       | 날짜            | 오늘 에이전트 활동 + 인간 TODO 통합 |
| 주간       | 주간            | 이번 주 CLOCK 합계      |
| 태그       | `:ai:pi:`       | Pi 에이전트만           |
| 태그       | `:ai:claude:`   | Claude Code만           |
| 태그       | `:PUNCHOUT:`    | 퇴근 도장 목록          |
| clocktable | `:scope agenda` | 디바이스별·에이전트별 시간 리포트 |

#### clocktable 예시

```text
#+BEGIN: clocktable :scope agenda :maxlevel 4 :block thisweek

#+END:
```

### punchout 진화

#### 현재 punchout

gitcli 커밋 시간으로 시간대 추정, 저널에 텍스트 삽입.

#### 진화된 punchout

1.  agenda 파일의 CLOCK 데이터를 수집
2.  clocktable 스타일 리포트 생성
3.  디바이스별·프로젝트별·에이전트별 슬라이싱

\#+begin_example

### 21:30 퇴근

**18커밋 · 8리포 · 03:52~20:16**

에이전트 CLOCK: 3h 26m

-   Pi: 2h 16m (fxf-uho-mvt 1:30, pi-skills 0:46)
-   Claude: 1h 10m (elfeed 벤치마크)

타임라인: ... \#+end_example

#### 세션 시작/종료 시 CLOCK 관리

에이전트 세션 흐름:

```text
1. 세션 시작
   → ~/.current-device 읽기
   → ~/org/botlog/agenda/{device}_agenda.org 열기
   → 오늘 날짜 reverse datetree 엔트리 찾기/생성
   → CLOCK open: [2026-02-27 Fri 14:00]

2. 작업 수행
   → 할 일 설명 기록

3. 세션 종료 (또는 punchout)
   → CLOCK close: [2026-02-27 Fri 14:00]--[2026-02-27 Fri 15:30] =>  1:30
   → TODO 상태 업데이트 (DONE 등)
```

### 충돌 관리

#### 왜 안전한가

| 상황                    | 위험도 | 이유                                |
|-----------------------|-----|-----------------------------------|
| 에이전트 A + 에이전트 B (같은 머신) | 낮음 | reverse datetree 앞에 추가, 같은 위치 수정 드묾 |
| 에이전트 + 인간 (같은 파일) | 없음 | 인간은 이 파일 안 건드림 (저널은 별도) |
| 에이전트 A + 에이전트 B (다른 머신) | 없음 | 파일이 다름                         |

#### 충돌 발생 시 대응

1.  `__tags` 로 파일 분기 (예: `__thinkpad_claude_agenda.org`)
2.  각자 쓰다가 안정화되면 상위 파일로 머지
3.  머지는 datetree 포맷이므로 날짜순 정렬만 하면 됨

### 전체 그림

```text
~/org/
├── journal/          ← 인간 위클리 저널 (인간 RW, 에이전트 surgical insert)
├── botlog/
│   ├── agenda/       ← 에이전트 어젠다 (에이전트 RW, 인간 RO view)
│   │   ├── ...--에이전트-어젠다__thinkpad_agenda.org
│   │   ├── ...--에이전트-어젠다__nuc_agenda.org
│   │   ├── ...--에이전트-어젠다__oracle_openclaw_agenda.org
│   │   └── ...--에이전트-어젠다__oracle_heebot_agenda.org
│   └── (기존 botlog 노트들)
├── llmlog/           ← LLM 세션 기록 (에이전트 RW)
└── notes/            ← 지식 노트 (인간 RW)
```

읽기/쓰기 권한 정리:

| 영역           | 인간             | 로컬 에이전트            | 서버 봇    |
|--------------|----------------|--------------------|---------|
| journal/       | RW               | insert only (NEWNOTES 앞) | RO         |
| botlog/agenda/ | RO (agenda view) | RW (자기 디바이스 파일)  | RW (자기 파일) |
| llmlog/        | RO               | RW                       | RW         |
| notes/         | RW               | RO                       | RO         |

### CLI 스킬 확장 방향

에이전트가 agenda 파일을 다루려면 CLI가 필요:

```text
agendacli clock-in  --device thinkpad --task "fxf-uho-mvt 디버깅" --tags "ai,pi,sks"
agendacli clock-out --device thinkpad
agendacli today     --device thinkpad        # 오늘 활동 조회
agendacli report    --device all --week       # 주간 리포트
agendacli punchout  --device thinkpad         # CLOCK 기반 punchout
```

또는 denotecli에 agenda 서브커맨드로 통합:

```text
denotecli agenda clock-in  ...
denotecli agenda clock-out ...
denotecli agenda today     ...
```

### emacsclient 접근법 — 파일 수정의 두 가지 길

[에이전트를 이맥서로 만드는 방향](https://notes.junghanacs.com/botlog/20260227T141200)에서 핵심 통찰이 나왔다. xenodium(Alvaro Ramirez)의 [emacs-skills](https://github.com/xenodium/emacs-skills)가 열어준 "세 번째 인터페이스".

#### 텍스트 조작 vs emacsclient

| 방식       | 텍스트 조작 (edit/sed) | emacsclient --eval                     |
|----------|-------------------|----------------------------------------|
| 이맥스 인지 | 모름 → revert 필요 | 안다 → 자동 반영                       |
| org 구문 안전성 | 깨질 수 있음      | org 파서가 보장                        |
| conflict   | 열린 버퍼와 디스크 불일치 | 버퍼 레벨에서 처리                     |
| 위치 정확성 | regex 매칭 의존   | org-reverse-datetree-goto-date-in-file |
| agenda 갱신 | 수동 redo         | 자동 redo 가능                         |
| 적용 범위  | 어디서나 (서버 봇 포함) | 로컬만 (Emacs 세션 필요)               |

#### agenda 파일 수정의 두 경로

```text
[로컬 에이전트: Pi, Claude Code]
  → emacsclient --eval
  → (org-reverse-datetree-goto-date-in-file "~/org/botlog/agenda/...agenda.org")
  → (org-insert-heading)
  → (org-clock-in) / (org-clock-out)
  → agenda 뷰 자동 갱신

[서버 봇: 힣봇, OpenClaw]
  → 텍스트 조작 (CLI)
  → denotecli agenda clock-in ...
  → 파일 직접 수정 (reverse datetree 포맷 준수)
  → 인간이 Emacs에서 revert하면 반영
```

#### 실제 emacsclient 호출 예시

```bash
# 에이전트가 agenda 파일에 CLOCK 엔트리 삽입
emacsclient --eval '
(with-current-buffer
    (find-file-noselect "~/org/botlog/agenda/...--에이전트-어젠다__thinkpad_agenda.org")
  (org-reverse-datetree-goto-date-in-file)
  (org-insert-heading-after-current)
  (insert "DONE fxf-uho-mvt 디버깅 :ai:pi:sks:")
  (org-clock-in)
  (save-buffer))'
```

```bash
# CLOCK 종료
emacsclient --eval '
(with-current-buffer
    (find-file-noselect "~/org/botlog/agenda/...--에이전트-어젠다__thinkpad_agenda.org")
  (goto-char (point-min))
  (re-search-forward "CLOCK: \\[.*\\]$")
  (org-clock-out)
  (save-buffer))'
```

#### 스킬 관점에서의 계층

```text
pi-skills/
├── emacs/          ← emacsclient 컨텍스트 (기존, 현재 버퍼 읽기)
│   확장 →  org-agenda 읽기/쓰기
│   확장 →  org-reverse-datetree 삽입
│   확장 →  org-clock-in / clock-out
│
├── punchout/       ← 퇴근 도장 (기존)
│   확장 →  agenda CLOCK 데이터 수집
│   확장 →  clocktable 기반 리포트
│
└── (신규) agenda/  ← 또는 emacs 스킬에 통합
    clock-in, clock-out, today, report
```

로컬 에이전트는 emacs 스킬 경유 (emacsclient), 서버 봇은 agenda CLI 직접 호출. 두 경로 모두 같은 파일·같은 포맷에 쓰므로 agenda 뷰에서 통합.

### GitHub 패턴과의 비교

원본 패턴 (GitHub):

-   프로젝트 파일 1개에 에이전트가 TODO + CLOCK 기록
-   인간과 에이전트가 같은 파일 수정 → 충돌 위험
-   단일 디바이스 가정

힣 설계:

-   디바이스별·에이전트별 파일 분리 → 충돌 구조적 제거
-   reverse datetree → 에이전트 읽기/쓰기 최적화
-   Denote 파일명 → denotecli 생태계 호환
-   멀티디바이스·멀티에이전트 네이티브 지원

### 관련 노트

-   [봇-활동-기록-아키텍처와-힣노트-역사성-고찰](https://notes.junghanacs.com/botlog/20260224T164035) — 이 문서의 전편
-   [데이터베이스 vs 파일 노트 개인지식관리 규칙](https://notes.junghanacs.com/notes/20230223T054600) — 왜 DB 없이 하는가
-   [diary] — datetree 실전 사용 (2022~, 18,000줄+)
-   [이맥스-에이전트-오케스트레이션-진화] — Pi extension, gptel 통합
-   [† 에이전틱코딩 라이브코딩 에이전트코딩](https://notes.junghanacs.com/meta/20250209T203153) — 에이전트 코딩 메타
-   [에이전트를 이맥서로 만드는 방향](https://notes.junghanacs.com/botlog/20260227T141200) — emacsclient 접근법, xenodium emacs-skills
