skills/emacs/SKILL.md
Emacs daemon — org manipulation, denote notes, citar bibliography, org-agenda, arbitrary elisp. Two sockets: server (agent work), user (show file to user). Core: agent-denote-add-history(ID,CONTENT), agent-denote-add-heading(ID,TITLE,BODY) or (ID,TITLE,TAG,BODY) — no tag? body as 3rd arg. Never pass nil. agent-denote-add-link(ID,TARGET-ID,DESC). DESC required — hang if omitted.
npx skillsauth add junghan0611/agent-config emacsInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
ec() { emacsclient -s "${PI_EMACS_AGENT_SOCKET:-server}" --eval "$1"; } # agent work
eu() { emacsclient -s user --no-wait "$@"; } # show file to user
Define ec/eu in EVERY bash call (subshell resets).
PI_EMACS_AGENT_SOCKET is injected by pi-shell-acp when launched with
--emacs-agent-socket <name> (e.g. server, /run/emacs/server for Docker).
Falls back to server when unset.
| Function | Args | Example |
|----------|------|---------|
| agent-denote-add-history | ID, CONTENT | ec '(agent-denote-add-history "ID" "@pi — msg")' |
| agent-denote-add-heading | ID, TITLE, BODY | ec '(agent-denote-add-heading "ID" "Title" "body")' |
| | ID, TITLE, TAG, BODY | ec '(agent-denote-add-heading "ID" "Title" "LLMLOG" "body")' |
| agent-denote-add-link | ID, TARGET-ID, DESC | ec '(agent-denote-add-link "ID1" "ID2" "desc")' ⚠️ DESC required — hang if omitted |
| agent-denote-set-front-matter | ID, &rest PLIST | ec '(agent-denote-set-front-matter "ID" :title "새 제목" :filetags (quote ("meta" "reasoning")) :rename t)' |
| agent-denote-search | QUERY, ?TYPE(title/tag/fulltext) | ec '(agent-denote-search "term" (quote tag))' |
| agent-denote-keywords | — | ec '(agent-denote-keywords)' → all tags list |
| agent-denote-rename-by-front-matter | FILE | ec '(agent-denote-rename-by-front-matter "/path")' |
| agent-denote-rename-bulk | DIRECTORY | ec '(agent-denote-rename-bulk "/path/")' |
| agent-org-read-file | FILE | ec '(agent-org-read-file "/path")' → content string (guarded paths only) |
| agent-org-get-headings | FILE, ?MAX-LEVEL | ec '(agent-org-get-headings "/path" 2)' |
| agent-org-get-properties | FILE | ec '(agent-org-get-properties "/path")' → alist |
| agent-org-dblock-update | FILE | ec '(agent-org-dblock-update "/path")' — ~/org/ all |
| agent-org-agenda-day | ?DATE | ec '(agent-org-agenda-day "-1")' — nil=today |
| agent-org-agenda-week | ?DATE | ec '(agent-org-agenda-week)' |
| agent-org-agenda-tags | MATCH | ec '(agent-org-agenda-tags "commit")' |
| agent-org-agenda-todos | ?PROJECT, ?PRIORITY | ec '(agent-org-agenda-todos "andenken")' |
| agent-citar-lookup | QUERY, ?MAX | ec '(agent-citar-lookup "karpathy" 5)' |
| agent-server-status | — | ec '(agent-server-status)' → version, uptime |
| agent-being-data | ?AS-JSON | ec '(agent-being-data)' → notes/journal/garden counts |
agent-org-agenda-todos: PROJECT is level-2 heading name in Entwurf agenda (e.g. "andenken", "blog", "agent-config"). PRIORITY is "A"/"B"/"C". Both optional — nil returns all TODOs grouped by project.
For agenda/task-hub work, prefer agent-org-agenda-day/week/todos over agent-org-read-file.
If the target file lives under ~/sync/org/..., agent-org-read-file may be blocked by path guards even when the file is conceptually part of the workflow. In that case:
agent-org-agenda-todos firstagent-org-agenda-day/week for schedule contextrg) instead of repeatedly calling blocked Emacs read APIsadd-heading: 3rd arg is TAG if UPPERCASE (e.g. "LLMLOG"), BODY otherwise. ⚠️ Never pass nil — body silently drops. No tag? Put body as 3rd arg directly.
set-front-matter: touches only front matter / pre-heading region.
:title, :filetags, :description, :reference, :date, :hugo_lastmod. Missing keys are created, existing keys replaced. Unknown FM lines preserved.:rename t → FM 갱신 후 denote 규칙대로 파일명까지 재생성. 분리 호출 불필요. rename 실패해도 FM 는 이미 저장됨 → OK: ...; WARN: rename failed — ... 로 분리 보고."meta reasoning"·"meta,reasoning"·":meta:reasoning:" / 리스트 ("meta" "reasoning") 모두 허용. lowercase + alnum 검증 + sort + dedup 자동.";" 또는 "," 구분 문자열 / 리스트 둘 다 허용. 결과는 ; 구분.# no tag — body as 3rd arg
ec '(agent-denote-add-heading "ID" "New Section" "body text here")'
# with tag — TAG then body
ec '(agent-denote-add-heading "ID" "New Section" "LLMLOG" "body text here")'
# insert after a specific heading
ec '(agent-denote-add-heading "ID" "New Section" "body" "After This Heading")'
# set front matter — FM only
ec '(agent-denote-set-front-matter "ID" :title "새 제목" :description "요약")'
ec '(agent-denote-set-front-matter "ID" :filetags (quote ("meta" "reasoning")) :reference "key1;key2")'
# set front matter + auto rename (원샷)
ec '(agent-denote-set-front-matter "ID" :title "정제된 제목" :filetags (quote ("ethics" "information")) :rename t)'
ec accepts any elisp expression. Use for one-off org parsing or runtime extensions.
ec '(emacs-version)'
ec '(mapcar #'\''buffer-name (buffer-list))'
~/org/, ~/repos/gh/, ~/repos/work/, ~/repos/3rd/ (guarded allowlist)~/org/botlog/, ~/repos/gh/self-tracking-data/~/org/ (all org files)~/org/ (all denote files, append-only)~/sync/org/... may be part of the real workflow but still blocked for agent-org-read-file; treat that as a known interface boundarycd ~/repos/gh/doomemacs-config && ./run.sh agent start|stop|restart~/openclaw/emacs-agent.sh start|stop|restartDATE format: nil=today, "-1"=yesterday, "+3"=3days, "2026-03-01"=specific date.
Returns plain text: "Monday 1 April 2026\n Agent: 9:20...... commit :pi:\n Human: 13:40...... 작업 시작"
Recommended order for Entwurf/COS operation:
agent-org-agenda-day — today's integrated working surfaceagent-org-agenda-todos — Entwurf task hub view by project/priorityagent-org-agenda-week — weekly framingagent-org-read-file — only for allowed raw org files when truly neededtesting
Cut an OpenClaw-style CalVer snapshot tag. Tag loop = collect commits + closed NEXT.md items, move them to CHANGELOG.md, remove only those closed items from NEXT.md, then pre-flight/tag/push/stamp when explicitly requested. Not SemVer/deploy; doc/ops repos tag too. ROADMAP.md is optional/manual. Triggers: 태그 박자, 릴리즈 컷, changelog 정리, NEXT 비우자/갈무리, cut a release/tag, vYYYY.M.D[-suffix].
development
멀티하네스용 /recall 래퍼. native custom command surface가 없는 하네스(예: Antigravity, Codex)에서도 /recall에 해당하는 다축 맥락 복원을 skill로 호출한다. session-recap, NEXT.md·ROADMAP.md, git status/log, semantic-memory를 조합해 어제/오늘의 작업축을 되살린다.
tools
포지(forge) — 셀프호스팅 Forgejo 이슈/PR/라벨/코멘트 작업면. 힣 에이전트가 코드 면에서 일하는 공유 손. botment의 자식 패턴(가든 댓글면 → 코드 댓글면 endpoint swap). 'forge', 'forgejo', '포지', 'issue', 'pull request', '이슈', '풀리퀘', '코드 댓글', '라벨'.
tools
sync entwurf 자식을 들여다보는 손. 호출자가 'Mattering...'에 묶여있을 때 자식 분신이 무엇을 하는지 확인. entwurf_peers는 control socket 있는 세션만 보여주는데, 이 스킬은 자식 entwurf 세션(이름 태그 entwurf)까지 합쳐서 본다. 트리거: 'entwurf-peek', '분신 들여다보기', '진행 중 세션', 'sync entwurf 안에서', 'peek session', 'live session map', '분신 추적'.