ํฌ๋ก ์ watcher/builder/maintainer๋ก ๋ถ์ฐํ๋ฉด ํ ํฐ ๋ณ๋ชฉ์ ์ค๊ณ , ํ์ง์ ๊ณตํต ์ง์นจ(quality contract)์ผ๋ก ๊ฐ์ ์์ค์ ์ ์งํ ์ ์์ต๋๋ค.
โ์์ฆ ์ ์ด๋ ๊ฒ ๋ฐ์๋ฐ๋ ์ฒด๊ฐ์ด ์ ๋์ง?โ๋ผ๋ ์ง๋ฌธ์ด ์๊ธฐ๋ฉด, ๋๋ถ๋ถ์ ์ฌ๋ ๋ฌธ์ ๊ฐ ์๋๋ผ ํฌ๋ก ๊ตฌ์กฐ ๋ฌธ์ ์ ๋๋ค. ์ต๊ทผ ์ด์ ๋ก๊ทธ๋ฅผ ๋ณด๋ฉด, ๊ณ ๋น๋ ์ก 1๊ฐ(๊ต์ก์์ฒญ ๋ฉ์ผ ์๋ฆผ)๊ฐ 24์๊ฐ 48ํ ์คํ + ์ฝ 97๋ง ํ ํฐ์ ์ฌ์ฉํ๊ณ , ๋ฉ์ธ ์์ด์ ํธ ์ง์ค ๊ตฌ์กฐ์์๋ ์ด ๋ถํ๊ฐ ๊ทธ๋๋ก ๋์ ๋์ต๋๋ค.
20ํธ์ด โ์ด์ ์์นโ์ ์ค๋ช ํ๋ค๋ฉด, ์ด ๋ฌธ์๋ ๊ทธ ์์น์ ์ค์ ํฌ๋ก ์ด์์ ์ ์ฉํ ์งํํ ์คํ ๊ฐ์ด๋์ ๋๋ค.
์๋ด: ๋ณธ๋ฌธ์ ์์ฑํ AI๋ฅผ ํ์ฉํด ์์ฑยท์ ๋ฆฌํ์ผ๋ฉฐ, ์ค์ ์ ์ฉ ๋ก๊ทธ๋ฅผ ๋ฐํ์ผ๋ก ๊ตฌ์ฑํ์ต๋๋ค.
๋ฌธ์ ์ธ์: ์ 25ํธ์ด ํ์ํ๋
- ๋ฉ์ธ ์์ด์ ํธ์ ํฌ๋ก ์ด ๋ชฐ๋ฆฌ๋ฉด, ์ฌ์ฉ์ ์ง์ ์์ฒญ๊ณผ ์ ๊ธฐ ์ก์ด ๊ฐ์ ์์์ ๊ฒฝ์ํฉ๋๋ค.
- ๊ณ ๋น๋ ๊ฐ์ ์ก์ no-op ์๋ต๋ง์ผ๋ก๋ ํ ํฐ์ด ํฌ๊ฒ ์๊ณ , ์ค์ํ ์์ ์๋ต ์ฒด๊ฐ์ด ๋จ์ด์ง๋๋ค.
- ๋ถ์ฐ๋ง ํ๋ฉด ํด๊ฒฐ๋ ๊ฒ ๊ฐ์ง๋ง, ํ์ง ์ง์นจ์ด ์์ผ๋ฉด ์์ด์ ํธ๋ง๋ค ๊ฒฐ๊ณผ๋ฌผ์ด ํ๋ค๋ฆฝ๋๋ค.
flowchart LR A[๋ฉ์ธ ์์ด์ ํธ ๊ณผ๋ถํ] --> B[์์ ์ฑ๊ฒฉ ๋ถํด] B --> C[Watcher ๋ถ์ฐ] B --> D[Builder ๋ถ์ฐ] B --> E[Maintainer ๋ถ์ฐ] C --> F[๊ณตํต ํ์ง์ง์นจ] D --> F E --> F F --> G[ํ ํฐ ๋ณ๋ชฉ ์ํ + ํ์ง ๋๋ฑ์ฑ]
ํต์ฌ ์์ฝ
- ๋ถ์ฐ ํฌ์ธํธ๋ โ์ฌ๋ ์โ๊ฐ ์๋๋ผ ์ ๋ฌด ์ฑ๊ฒฉ ๋ถ๋ฆฌ๋ค.
- ํ์ง์ ์ ์งํ๋ ค๋ฉด ์์ด์ ํธ๋ง๋ค ๋ฌธ์ฒด๊ฐ ์๋๋ผ ๋์ผ ํ์ง ๊ณ์ฝ์๋ฅผ ๊น์์ผ ํ๋ค.
- ์ด์ ์ฑ๊ณต ๊ธฐ์ค์ โ์ก์ด ๋ง์ด ๋๋คโ๊ฐ ์๋๋ผ ์คํจ์จ/ํ ํฐ/ํ์ง 3์ถ์ผ๋ก ๋ด์ผ ํ๋ค.
๐ง ์น ํ ์นํธ์ํธ
- ๋ฉ์ธ์ ์ต์ข ์์ฌ๊ฒฐ์ , ํฌ๋ก ์ ์ญํ ๋ณ ์๋ธ์์ด์ ํธ๋ก ๋ถ์ฐ
- watcher: ๊ฐ์/์์ง, builder: ์์ฑ/์ด์, maintainer: ์ ๋ฆฌ/์ ๊ฒ
- ํ์ง์ AGENTS/SOUL/USER/TOOLS/MEMORY ๊ณตํต ๊ตฌ์กฐ๋ก ๊ณ ์
- ์ฑ๋ฅ ํ๊ฐ๋ ํ ํฐยท์คํจ์จยทํ์ง๋๋ฑ์ฑ 3๊ฐ๋ก ๊ด๋ฆฌ
์ฉ์ด/๋น์ ์ค๋ช
- Watcher: ์ผ์(์ด์ ๊ฐ์ง/์ ๊ท ์ด๋ฒคํธ ๊ฐ์)
- Builder: ์ ์ํ(์ฝํ ์ธ /์ด์ ์์ฑ)
- Maintainer: ์ด์ํ(์ ๋ฆฌ/๊ฒ์ฆ/๋ฃจํด ์ ์ง)
๋น์ ํ๋ฉด, ํ ๋ช ์ด ๊ฐ์ยท์ ์ยท์ฒญ์๋ฅผ ๋์์ ํ๋ ๊ตฌ์กฐ๋ฅผ ๊ด์ ์ค + ์ ์์ค + ์ด์์ค๋ก ๋๋ ๊ฒ๋๋ค.
์ค์ ์ ์ฉ 5๋จ๊ณ
1) ์ก์ ์ ๋ฌด ์ฑ๊ฒฉ์ผ๋ก ๋ถ๋ฅ
- ์ ํ์ํ๊ฐ: ๋น๋ ๊ธฐ์ค์ผ๋ก๋ง ๋๋๋ฉด ๋ณ๋ชฉ์ด ๊ทธ๋๋ก ๋จ์ต๋๋ค.
- ์ค์ ์ ์ฉ:
- ๊ฐ์์ฑ(๊ณ ๋น๋): watcher
- ์์ฑ์ฑ(์ค~๊ณ ํ ํฐ): builder
- ์ ๊ฒ์ฑ(์ ๊ธฐ): maintainer
- ์คํจ ์ ํธ: ๋ถ์ฐํ๋๋ฐ๋ ๋ฉ์ธ ํ ํฐ์ด ๊ณ์ ๊ธ์ฆ
- 10์ด ์ฒดํฌ: โ์ด ์ก์ ๊ฐ์/์์ฑ/์ ๊ฒ ์ค ๋ฌด์์ธ๊ฐ?โ
- ์ฐธ๊ณ : https://docs.openclaw.ai/cli/cron
2) ํ์ง ๋๋ฑ์ฑ ๊ณ์ฝ์(๊ณตํต ์ง์นจ) ๋ฐฐํฌ
- ์ ํ์ํ๊ฐ: ๋ถ์ฐํ๋ฉด ์คํ์ผ/์์ฑ๋ ํธ์ฐจ๊ฐ ์๊ธฐ๊ธฐ ์ฝ์ต๋๋ค.
- ์ค์ ์ ์ฉ:
- ๊ฐ ์ํฌ์คํ์ด์ค์
AGENTS.md,SOUL.md,USER.md,TOOLS.md,MEMORY.md๊ณตํต ๋ฐฐ์น AGENTS.md์ Quality Contract(๋ชฉํ ์ ๊ธ/๊ทผ๊ฑฐ/์ฌํ์ฑ/์์ /ํ์ง๊ฒ์ดํธ/์ข ๊ฒฐ) ๋ช ์
- ๊ฐ ์ํฌ์คํ์ด์ค์
- ์คํจ ์ ํธ: ์์ด์ ํธ๋ณ ๊ฒฐ๊ณผ ํค/๊ตฌ์กฐ๊ฐ ๋ค์ญ๋ ์ญํจ
- 10์ด ์ฒดํฌ: โ์ธ ์์ด์ ํธ ๋ชจ๋ ๊ฐ์ ํ์ง ๊ท์น ํ์ผ์ ๊ฐ๊ณ ์๋๊ฐ?โ
- ์ฐธ๊ณ : https://docs.openclaw.ai/cli/agents
3) cron job์ agent ๋จ์๋ก ์ฌ๋ฐฐ์
- ์ ํ์ํ๊ฐ: session=isolated๋ง์ผ๋ก๋ ๋ฉ์ธ ์์ฌ๊ฒฐ์ ๊ฒฝํฉ์ด ๋จ์ ์ ์์ต๋๋ค.
- ์ค์ ์ ์ฉ:
openclaw cron edit <id> --agent cron-watcheropenclaw cron edit <id> --agent cron-builderopenclaw cron edit <id> --agent cron-maintainer
- ์คํจ ์ ํธ: ์ก์ ๋ถ์ฐ๋๋๋ฐ ํน์ ์์ด์ ํธ์ ๋ค์ ๊ณผ๋ถํ ์ง์ค
- 10์ด ์ฒดํฌ:
jobs.json์์ ์ก๋ณagentId๊ฐ ์ญํ ๊ณผ ๋ง๋๊ฐ? - ์ฐธ๊ณ : https://docs.openclaw.ai/cli/cron
4) ๊ณ ๋น๋ ์ก์ NO_REPLY + ๋ณํ๊ธฐ๋ฐ ๋ณด๊ณ ๋ก ์ถ์
- ์ ํ์ํ๊ฐ: ๊ณ ๋น๋ ์ก์ โ๋ณํ ์์โ ์๋ต์ด ๋์ ๋๋ฉด ํ ํฐ์ด ์์ด ๋๊ฐ๋๋ค.
- ์ค์ ์ ์ฉ:
- no-op์
NO_REPLY๊ณ ์ - ์ ๊ท ์ด๋ฒคํธ/์๋ฌ/์๊ณ์น ์ด๊ณผ์๋ง ๋ณด๊ณ
- no-op์
- ์คํจ ์ ํธ: ์๋ฆผ์ ๋ง์๋ฐ ์ค์ง ์ก์ ์ ๊ฑฐ์ ์์
- 10์ด ์ฒดํฌ: ์ต๊ทผ 24h ๋ณด๊ณ ์ค โ์์ฌ๊ฒฐ์ ์ด ํ์ํ ๋ณด๊ณ โ ๋น์จ์ด ๋์๊ฐ?
5) D+1 ๋น๊ต ๋ฆฌํฌํธ๋ก ๊ณ ์
- ์ ํ์ํ๊ฐ: ๋ถ์ฐ ์งํ ์ฒด๊ฐ๋ง์ผ๋ก๋ ๊ฐ์ ํ๋จ์ด ์ด๋ ต์ต๋๋ค.
- ์ค์ ์ ์ฉ:
- ๋ถ์ฐ ์ /ํ ๋น๊ต: ํ ํฐ ์ด๋, ์๋ฌ์จ, ์ฐ์ถ๋ฌผ ํ์ง(์ฒดํฌ๋ฆฌ์คํธ ํต๊ณผ์จ)
- ๋ณ๋ชฉ ์ก 1๊ฐ๋ฅผ ์ฐ์ ์ฌํ๋
- ์คํจ ์ ํธ: ๋ถ์ฐํ์ง๋ง ๊ฐ์ ์์น๊ฐ ์์
- 10์ด ์ฒดํฌ: โ์ /ํ ํ 1์ฅโ์ด ์๋๊ฐ?
์ด ๊ตฌ์กฐ๊ฐ 20ํธ์ ์งํํ์ธ ์ด์
- 20ํธ: ์์น(์ด์ ์์คํ ์ผ๋ก ์จ๋ผ)
- 25ํธ: ์คํ(์ก์ ์ญํ ๋ณ๋ก ์ชผ๊ฐ๊ณ ํ์ง ๊ณ์ฝ์๊น์ง ๋๊ธฐํ)
์ฆ, โ์ข์ ์ฒ ํโ์์ ๋๋๋ ๊ฒ ์๋๋ผ ์ด์ ์ํคํ ์ฒ๋ฅผ ์ค์ ๋ก ๋ฐ๊พผ ๋จ๊ณ์ ๋๋ค.
์ด์ ์ฒดํฌ๋ฆฌ์คํธ (๋ณต๋ถ์ฉ)
- watcher / builder / maintainer ์ญํ ์ ์ ์๋ฃ
- ๊ฐ ์์ด์ ํธ ๊ณตํต ํ์ง ์ง์นจ ํ์ผ ๋ฐฐํฌ ์๋ฃ
- ํ์ฑ ํฌ๋ก ์ agentId ์ฌ๋ฐฐ์ ์๋ฃ
- ๊ณ ๋น๋ ์ก ๋ณํ๊ธฐ๋ฐ ๋ณด๊ณ ๊ท์น ์ ์ฉ
- D+1 ์ฑ๋ฅยทํ์ง ๋น๊ต ๋ฆฌํฌํธ ์์ฑ
2026-03 ์ด์ ์ ๋ฐ์ดํธ: ๋๋ฝ ์ฌ๋ฐ ๋ฐฉ์ง ๋ฐ์
์ต๊ทผ ์ค์ ์ฅ์ ๋ฅผ ํตํด, โํฌ๋ก ์ด ๋ ๊ฒ์ฒ๋ผ ๋ณด์ด๋๋ฐ ์ค์ ํต์ฌ ์คํฌ๋ฆฝํธ๊ฐ ์ ๋๋คโ๋ ์ ํ์ ์ด์ ๋ฆฌ์คํฌ 1์์๋ก ์ฌ๋ถ๋ฅํ์ต๋๋ค. ๋ถ์ฐ ์ด์ ์์ฒด๋ ๋ง์์ง๋ง, ๊ฒฝ๋ก ๋๋ฆฌํํธ์ ์ธ๋ถ crontab ๋ฆฌ๋ค์ด๋ ์ ์คํจ๋ฅผ ๊ฐ์ด ์ก์์ผ ๋๋ฝ์ ๋ง์ ์ ์์์ต๋๋ค.
1) ์ด์ ์ค๋๋ฅผ cron-maintainer๋ก ๊ณ ์
๊ธฐ์กด์๋ watcher/builder/maintainer๊ฐ ๊ฐ์ ์ ๋๋ฉด ๋๋ค๋ ๊ด์ ์ด ๊ฐํ์ต๋๋ค. ์ง๊ธ์ cron-maintainer๋ฅผ ์ด์ ์ค๋๋ก ๋๊ณ , ์ํ๋ฅผ ์ ๊ธฐ์ ์ผ๋ก ํ ๋ฒ ๋ ๋ชจ์ ๊ณต์ ํ๋ ๊ตฌ์กฐ๋ก ๋ฐ๊ฟจ์ต๋๋ค.
- ๋ฐ์ผ๋ฆฌ ๋ธ๋ฆฌํ:
๐งญ ์ด์์ค๋ ๋ฐ์ผ๋ฆฌ ๋ธ๋ฆฌํ(09:30/14:30/20:30) - ์ฃผ๊ฐ ์
๊ทธ๋ ์ด๋:
๐ ์ด์์ค๋ ์ฃผ๊ฐ ์ ๊ทธ๋ ์ด๋(์ 09:40)
์ด๋ ๊ฒ ํ๋ฉด โ๊ฐ๋ณ ์ก ์ ์โ์ด ์๋๋ผ โ์ ์ฒด ์ด์ ์ ์โ์ ๊ธฐ์ค์ผ๋ก ์์ฌ๊ฒฐ์ ํ ์ ์์ต๋๋ค.
2) ๊ฒฝ๋ก ๋๋ฆฌํํธ ์ ์ฉ ๊ฐ๋ ์ถ๊ฐ
์ค์ ๋๋ฝ ์์ธ์ watcher ์ก์ด ์ ๊ฒฝ๋ก๋ฅผ ์ฐธ์กฐํ ์ํ์์, run status๋ ok๋ก ์ฐํ๋ ์ค์ธ ํจํด์ด์์ต๋๋ค. ์ด๋ฅผ ๋ง๊ธฐ ์ํด cron_payload_path_guard.py๋ฅผ ์ถ๊ฐํด, payload ๊ฒฝ๋ก ์กด์ฌ ์ฌ๋ถ์ hidden path error๋ฅผ ์ฃผ๊ธฐ์ ์ผ๋ก ์ ๊ฒํ๊ฒ ํ์ต๋๋ค.
- ๊ฐ๋ ์ก:
๐ก๏ธ Cron ๊ฒฝ๋ก ๊ฐ๋(3์๊ฐ ์ฃผ๊ธฐ) - ์ญํ : ๊ฒฝ๋ก ๋๋ฝ ๊ฐ์ง + โok์ธ๋ฐ ์ค์ ๊ฒฝ๋ก ์๋ฌโ ํจํด ํ์ง
3) YouTube watcher 3์ข ํ๋๋
Maker Evan / Science ADAM / Code Factory watcher๋ ์๋ ๊ท์น์ผ๋ก ๋ณด๊ฐํ์ต๋๋ค.
- payload ์คํ ๊ฒฝ๋ก๋ฅผ ํ๋ก์ ํธ ๊ธฐ์ค ๊ฒฝ๋ก๋ก ํต์ผ
STATE_PATH๋ฅผ ์ ๋๊ฒฝ๋ก์์Path(__file__).with_name(...)์ผ๋ก ์ ํ- ์ ์์์ด ์์ด๋
last_poll_at๊ฐฑ์ (์ ๊ฒ ์คํ ์ฌ๋ถ ์ถ์ ) - delivery๋ฅผ announce๋ก ๊ณ ์ ํด ์คํจ ์ ์ฆ์ ์๋ฆผ
๋ฏธ๋ ์ฌ๋ก:
- Before: ์คํฌ๋ฆฝํธ ํ์ผ ์ด๋ ํ ์ ๊ฒฝ๋ก๋ฅผ ๊ณ์ ์ฐธ์กฐํด ๋๋ฝ ๋ฐ์
- After: ๊ฒฝ๋ก ๊ฐ๋ + ์๋ state ๊ฒฝ๋ก + poll ํ์์คํฌํ๋ก ์คํ/๊ฐ์ง ์ ๋ขฐ์ฑ ํ๋ณด
4) ์ธ๋ถ crontab(์ ๋ถ์ง์)๊น์ง ๋์ผ ๊ธฐ์ค ์ ์ฉ
์ ๋ถ์ง์ ์์ ์ OpenClaw cron์ด ์๋๋ผ OS crontab์ผ๋ก ๋๊ณ ์์ด, ๋ฆฌ๋ค์ด๋ ์ ๋ก๊ทธ ๊ฒฝ๋ก๊ฐ ์์ผ๋ฉด ๋ช ๋ น์ด ์์๋ ๋ชป ํ๋ ๋ฌธ์ ๊ฐ ์์์ต๋๋ค.
์ ์ฉํ ๋ณด๊ฐ:
- crontab ๋ผ์ธ์
mkdir -p logs์ ํ - ์คํ ์คํฌ๋ฆฝํธ์
flock(์ค๋ณต์คํ ๋ฐฉ์ง),timeout(์ฅ๊ธฐ ๋ฉ์ถค ๋ฐฉ์ง), START/DONE/ERROR ๋ก๊ทธ ์ถ๊ฐ
๋ฏธ๋ ์ฌ๋ก:
- Before:
logs/cron.log๋๋ ํฐ๋ฆฌ ๋ถ์ฌ๋ก ๋ฆฌ๋ค์ด๋ ์ ์คํจ โ ์คํ ๋๋ฝ - After: ๋๋ ํฐ๋ฆฌ ๋ณด์ฅ + ํ์์์ + ๋ฝ์ผ๋ก ์คํ ๊ฐ์์ฑ๊ณผ ์์ ์ฑ ํ๋ณด
5) ๋ณ๊ฒฝ ์งํ 15๋ถ ๊ฒ์ฆ ๋ฃจํด(๊ณ ์ )
- 5๋ถ: ๋ณ๊ฒฝํ ์ก 1ํ ๊ฐ์ ์คํ (
openclaw cron run <id>) - 5๋ถ:
openclaw cron runs --id <id> --limit 1๋ก summary/error ํ์ธ - 5๋ถ: state ํ์ผ์
last_poll_at/last_seen_at๋๋ ๋ก๊ทธ ํ์์คํฌํ ํ์ธ
์ด ๋ฃจํด์ ํต๊ณผํ์ง ๋ชปํ๋ฉด โ๋ฐฐํฌ ์๋ฃโ๋ก ๋ณด์ง ์์ต๋๋ค.
์ฐธ๊ณ :
- OpenClaw cron CLI: https://docs.openclaw.ai/cli/cron
- Linux crontab: https://man7.org/linux/man-pages/man5/crontab.5.html
- flock: https://man7.org/linux/man-pages/man1/flock.1.html
- timeout: https://man7.org/linux/man-pages/man1/timeout.1.html