Codex
Codex CLI는 터미널에서 실행되는 오픈소스 경량 코딩 에이전트 인터페이스다. 기본적으로 OpenAI의 구독을 이용하여 codex 모델을 사용하도록 세팅되어 있지만, 백엔드 모델은 얼마든지 자유롭게 바꿀 수 있다.
npm install -g @openai/codex
codex
Markdown
복사
Claude의 구독을 Claude Code와만 엮어 사용할 수 있도록 강력하게 제한하는 Anthropic과는 달리 OpenAI는 유연한 정책을 채택했다(ref1). 잠시 후 OpenClaw에서 Codex Auth를 이용해 openai-codex 모델을 연결하여 추가적인 API 과금 없이 기존의 Chat GPT 구독으로 OpenClaw를 구동할 것이다.
OpenClaw
WhatsApp, Slack, Telegram은 길게는 수십년간 유지보수되어온 굉장히 훌륭한 채팅 서비스이자 인터페이스이다. OpenClaw는 이미 잘 만들어져 있는 채팅 인터페이스를 오픈소스 에이전트 미니멀 엔진 pi-mono(ref4)에 연결하는 표준화 레이어를 만들었다. 그것이 바로 OpenClaw Gateway의 가장 기본적인 의의다.
curl -fsSL https://openclaw.ai/install.sh | bash
Markdown
복사
디스코드 인터페이스 생성과 기본 도구 설정
이 과정에서 실수로 창을 닫아 버리더라도 너무 걱정하지 않아도 된다. openclaw config 명령어로 누락된 설정들을 다시 채워넣어줄 수 있다.
OpenClaw의 사용자 입장에서 일반적인 인터페이스는 상용 메신저다. 나는 디스코드를 주로 사용하기 때문에 디스코드에 봇을 만들기로 했다.
공개 설치 링크를 비활성화해 주어야 비공개 봇을 만들 수 있다.
public 봇을 비활성화하고, 나머지 intent를 활성화시켜 준다.
원래 전체 권한을 주면 위험하지만, 어차피 로컬에서 돌리고 관제를 하면서 사용하기 때문에 봇에게 모든 권한을 부여했다.
비공개 봇 설치 링크를 만들기 위해 bot에 체크하고 관리자 권한을 승인받는 URL을 만든다.
내가 원하는 채널에 봇을 설치한 후, Bot 탭으로 넘어가서 토큰을 복사해 OpenClaw에 붙여 넣는다.
나는 위와 같은 스킬들을 등록했다. 스킬을 등록하게 되면 API 키를 요구하곤 하는데, 나는 스킬을 설치만 했고 API 키를 등록하지 않았다. 딱 하나, 지금 당장 사용할 노션만 키를 바로 등록한다.
그리고 채널에 추가된 봇에게 디스코드 개인 메시지를 보내게 되면, 이렇게 승인 명령어를 보내준다. 승인 명령어를 터미널에 입력하여 내 계정이 오픈클로에 접근할 수 있도록 한다.
openclaw pairing approve discord
Markdown
복사
Codex Key → openai-codex 모델 연결
openclaw config
Markdown
복사
기본적으로 Codex의 Auth는 openai-codex/* 모델에 대한 접근 권한만 가진다.
모델을 모두 선택한 다음 엔터, Continue를 눌러 종료한다. ~/.openclaw/openclaw.json 을 열어 보면 아래와 같이 설정되어 있는 것을 확인할 수 있다.
"agents": {
"defaults": {
"model": {
"primary": "openai-codex/gpt-5.3-codex",
"fallbacks": [
"openai/gpt-5.2",
"openai-codex/gpt-5.3-codex",
"openai-codex/gpt-5.3-codex-spark"
]
},
"models": {
"openai-codex/gpt-5.2": {},
"openai-codex/gpt-5.3-codex": {},
"openai-codex/gpt-5.3-codex-spark": {}
},
"workspace": "/Users/janghoo/.openclaw/workspace",
"compaction": {
"mode": "safeguard"
},
"maxConcurrent": 4,
"subagents": {
"maxConcurrent": 8
}
}
}
JSON
복사
처리할 대부분의 작업은 당연히 범용 지식이 중요하므로 code모델 대신 일반모델을 사용하도록 변경했다. 그리고 "thinkingDefault": "high"로 설정해서 기본 추론 정도를 높였다.
"agents": {
"defaults": {
"model": {
"primary": "openai/gpt-5.2",
"fallbacks": [
]
},
"models": {
"openai-codex/gpt-5.2": {},
"openai-codex/gpt-5.3-codex": {},
"openai-codex/gpt-5.3-codex-spark": {}
},
"workspace": "/Users/janghoo/.openclaw/workspace",
"compaction": {
"mode": "safeguard"
},
"thinkingDefault": "high",
"maxConcurrent": 4,
"subagents": {
"maxConcurrent": 8
}
}
}
JSON
복사
그리고 변경사항을 적용한다.
openclaw gateway restart
JSON
복사
비교
사용했던 프롬프트
OpenAI Agent Mode
가장 큰 한계는 자신만의 컴퓨터를 프로비저닝해서 사용하는 방식이라 접근할 수 없는 페이지가 많았다. 노션 페이지 조회를 브라우저로 직접 시도하다 막혔고, 인스타그램 데이터 수집도 브라우저로 직접 시도하다 로그인 도중 계속 막혔다.
OpenAI Atlas
그렇다면 나의 브라우저를 들고 한다면? 만약 이 영업 작업을 사람이 직접 한다면 페이지를 하나하나 방문하면서 정보를 수집하고, 그 결과를 조합하여 메모하는 작업을 반복할 것이다. 과연 Chat GPT의 에이전트가 통합된 브라우저를 얼마나 잘 활용하여 성능을 끌어낼 수 있을지 궁금했다.
하지만 금방 실망하게 됐다.
1.
우선 미스클릭이 정말 많았다. 잘못 클릭해서 이상한 동작을 마주하면 원인을 다른 곳에서 찾고, 그 결과 또다른 길로 새어나가는 문제들이 있었다. 노션에서 ‘티켓’을 눌러야 하는데 ‘relation property’를 눌러놓고, 뭔가 마음대로 동작하지 않으니 아랫쪽 팝업이 떠 있는 것이 문제구나! 하면서 작은 버튼을 누르려고 한다.
2.
짧은 작업 범위도 아쉬운 부분 중 하나였다. 일을 끝까지 마무리하지 않고 ‘이제부터 너가 해’라며 사용자에게 떠넘긴다.
3.
전반적으로 설계 의도 자체가 효율성보다는 어떤 화면에서도 상호작용할 수 있는 generality를 중심으로 설계됐고(아직까지는 moon shot), 사용자에게 AI가 제어를 하는 것을 ‘잘 보여주고’, 즉각 피드백을 줄 수 있는 경험을 만들고자 하는 프로덕트라는 점을 알게 되었다.
Claude Cowork
상당히 일을 잘 해냈지만, safety를 위해 사람이 일일히 클릭해 주어야 하는 일들이 있어 완전 자동 업무 처리에는 불편함이 있을 수 있겠다는 생각이 들었다. 생각보다 노션 mcp 등을 잘 사용하지 못하고 오류를 뱉는 등 중간 인터럽트도 많았다. 내가 사용한 mcp가 관리가 잘 안되는 것일수도 있지만, 좋지 않은 사용자 경험이었다.
호흡이 엄청나게 짧은 편은 아니었으나, ‘뭐가 다 끝날 때까지 처리해’를 책임지는 GRIT도 상대적으로 부족했다. 자꾸 중간에 보고를 하려는 경향이 있었다.
Manus
Genspark가 오피스 도구와의 통합을 강조하는 에이전트라면, Manus는 범용 작업 에이전트를 추구한다는 느낌이 들어, 부담없는 가격에 접근이 가능한 Manus lite과 300 크레딧으로 동일한 명령을 주문했다.
결과는 굉장히 만족스러웠다. 사실 노션 DB 조회 작업이나 인스타그램에서 데이터를 수집하는 작업의 경우 브라우저를 직접 핸들링하는 것이 좋을지, 아니면 웹 서칭 등 API를 사용하는 것이 좋을지 등을 현명하게 결정하는 것이 중요한데, 이럴 때마다 Manus는 노션 DB의 스키마를 파악하는 데에는 API를 사용하고, 티켓을 골라내기 위해서는 브라우저를 여는 모습을 보여주었다. 인스타그램의 정보 수집을 전적으로 브라우저 도구를 사용했다. 노션 DB에 값을 다시 써넣을 때에는 다시 API를 사용했다. 3개 동아리의 연락처를 찾아내는 데 300크레딧 정도가 소비됐고, 요구한 내용을 실수 없이 정확히 수행했다.
Manus도 브라우저 작업이 필요한 경우 본인만의 컴퓨터를 프로비저닝하여 브라우저를 켜서 사용한다. 하지만 노션 페이지 접근이나 인스타그램 페이지 접근에 실패하자, 코드를 통한 접근이나 API를 이용한 접근으로 빠르게 우회하여 작업을 수행해냈다.
OpenClaw
Manus의 만족도가 매우 높았고, 전체 작업을 모두 위임하고 싶었으나, 요즘 OpenClaw의 성능과 효용이 많이 회자되면서 이것이 실제로 나의 삶을 개선해줄 수 있을지에 대한 관심이 생겼다. 그리고 카카오가 때마침 Chat GPT Pro를 3만원에 풀어버렸는데 이 남아도는 토큰을 어떻게 잘 활용할 수 있을까 생각해 보다가 Manus를 또 구매하기보다 이것을 기존 구독에 연결하여 세팅을 해 보는 것이 좋겠다는 생각이 들었다.
“아쉬움과 부족함이 있지만, 높은 자유도와 일을 끝까지 처리하는 에이전트의 야마가 충분히 있다”
모든 도구까지 ‘알잘딱’ 하는 Manus에 비해 약간의 아쉬움도 있었다. 자기가 사용자의 의도를 추론해서 서브 에이전트도 나누고, openclaw cron job도 만들고, 혼자 python 스크립트를 만들어 도구로 쓰고, 자동으로 프롬프팅하는 모든 전반의 과정에 비해 observability가 굉장히 부족하기도 했다. 그러다 보니, 일단 이것이 잘 작동하고 있는 것인지 지속적으로 확인하는 것이 불편했다.
불편함
1.
도구들이 잘 연결되었는지, 어떤 상황에서 무슨 도구를 사용할 수 있는지 확인해 보는 것은 사용자의 몫이다. 중간중간 ‘너 뭐 기억하고 있냐’, ‘이거 쓸 수 있냐’, ‘이건 왜 이렇게 하는거냐’ 같은 것을 피드백해주고 확인해보아야 한다. 에이전트가 복잡한 작업을 정확하게 하도록 만들기까지는 몇 번의 교정과 메모리 확인이 필요하다.
2.
임무를 상당히 오래 잡고 있긴 하지만, 종종 중간 보고를 하면서 하던 작업을 중단해 버리거나, 아예 말도 없이 멈춰 버리는 상황이 나온다. Manus같은 플랫폼에서는 에이전트가 무슨 생각을 가지고 무엇을 하는지 바로바로 보이지만, OpenClaw의 경우 기본적으로 observability가 떨어지기 때문에 이런 상황은 아닌지 계속 관제가 필요했다.
10분마다 중단되는 에이전트
a.
여러 가지 이유들 중 하나는 timeout(ref2)이다. 아무리 프롬프팅을 잘 해도 자꾸 에이전트가 오류 등을 뱉으며 중간에 꺼졌는데, 또 다시 시키면 군말 없이 진행됐다. 왜 이런건지 문제를 못 찾다가 이것을 1시간으로 변경하고, restart하는 작업처럼 몇 번의 이터레이션이 있었다. 실제로 중단되는 간격을 보면 10분 정도인 것을 알 수 있다.
openclaw config set agents.defaults.timeoutSeconds 3600 --json
JSON
복사
실행 시간을 늘렸다고 문제가 해결된 것도 아니었다. 중간에 브라우저 사용 과정에서 알 수 없는 오류가 발생해서 죽어 버리는 경우도 많았고, 10분을 넘겨 작업을 하는 경우도 있었지만 자꾸 모델이 중간에 작업을 멈추고 사람에게 확인을 받았다.
3.
메인 에이전트는 주체적으로 서브 에이전트를 만들고 작업을 위임한다. 굉장히 강력한 기능인 것은 사실이나, 종종 작업 분배 실수나 컨텍스트 미스가 생긴다. 마치 20층짜리 건물에서 엘리베이터가 고장난지 모르고 윗사람이 스타벅스 커피 좀 사오라고 시켰는데, 아랫사람이 꿩 대신 닭이다 싶어서 같은 층 다과실에서 맥심 커피를 타오고, 윗사람은 그것을 그냥 곧이곧대로 쓰거나 뒤늦게 잘못되었음을 발견하는 것이다.
메인 에이전트가 마음대로 만든 cron job과 subagent들을 정리하는 과정
a.
메인 에이전트가 서브에이전트에게 모든 맥락이 포함된 페이지를 주면서 ‘여기서 연락처를 추출하세요’라고 하면, 그냥 연락처만 띡 뽑아버림. 그런데 그 페이지에서 추가로 추출해야 하는 정보가 있었는데, 메인 에이전트가 뒤늦게 해당 문제를 깨달아 버리는 경우?
b.
메인 에이전트는 브라우저를 직접 제어할 수 있지만, 서브 에이전트는 별도의 세팅을 하지 않는 한 브라우저를 직접 제어할 수 없다. 이 과정에서 서브 에이전트는 자신이 쓸 수 있는 도구들을 동원해서 문제를 해결하려고 하는데, 그 작업 결과물 또한 메인 에이전트가 보기에는 결과물이기 때문에 그냥 받아들였다.
강력함
나는 어떻게 데이터를 바라볼 것인가에 집중하는 동안, 실제 태스크는 AI가 처리
•
알아서 Subagent를 만들어버리는 것
◦
subagent 최대 몇개까지 돌릴지 지정할 수 있음.
•
subagent의 처리 결과는 main agent의 바쁜 일이 어느정도 끝나면 위로 올라옴
•
main agent는 쉬고 있지만 subagent가 처리 중일 때에는 디스코드에 뭐라고 뜨지 않음
워크플로
•
컨텍스트 오링나기 전에 메모리를 직접 수정하고, 메모리에 어떤 값을 썼는지 계속 추적해야 함
parse me : 언젠가 이 메모에 쓰이면 좋을 것 같은 재료들입니다.
1.
None
from : 이 메모에 쓰인 생각을 만든 과거의 생각들과 연관관계를 설명합니다.
1.
None
•
연결이유
supplementary : 이 메모에 작성된 생각을 뒷받침하는 새로운 메모입니다.
1.
None
opposite : 이 메모에 작성된 생각과 대조되는 새로운 메모입니다.
1.
None
to : 이 메모에 작성된 생각으로부터 발전된 생각의 메모입니다.
1.
None
ref : 생각에 참고한 자료입니다.
1.
anthropic이 claude max를 서드파티 하네스(roo code, opencode 등)를 통해 사용하는 계정을 금지했어. "스푸핑"이랑 "남용 필터"라고 불렀지. openai 는 바로 codex가 오픈 소스고 생태계를 지원한다고 글을 올렸어. tibo의 트윗은 이틀 만에 645k 뷰를 기록했지. 남용에 대한 우려는 이해해. 속도 제한이 있는 데는 이유가 있으니까. 근데 "스푸핑"은 좀 심한 표현이지. 대부분의 사람들은 그냥 claude를 vim이나 자기 편집기에서 쓰고 싶어 했을 뿐인데. 딱히 악의적인 건 아니잖아.
a.
Reddit - The heart of the internet
2.
agentCommand runs the agent: resolves model + thinking/verbose defaults
loads skills snapshot calls runEmbeddedPiAgent (pi-agent-core runtime)
a.
Agent Loop - OpenClaw
3.
Timeouts … agent.wait default: 30s (just the wait). timeoutMs param overrides.
Agent runtime: agents.defaults.timeoutSeconds default 600s; enforced in runEmbeddedPiAgent abort timer.
a.
Agent Loop - OpenClaw
4.
Pi is interesting to me because of two main reasons: First of all, it has a tiny core. It has the shortest system prompt of any agent that I’m aware of and it only has four tools: Read, Write, Edit, Bash. The second thing is that it makes up for its tiny core by providing an extension system that also allows extensions to persist state into sessions, which is incredibly powerful.
a.
Pi: The Minimal Agent Within OpenClaw
프로젝트메모 템플릿 버전 2025.11.16
















