만약 AI 에이전트에게 소셜 계정에 게시하도록 맡긴다면, 무서운 부분은 글쓰기가 아닙니다. 재시도(retry)입니다. 모델이 도구를 호출하고 네트워크가 시간 초과되면, 에이전트는 다시 시도하고, 이제 같은 공지사항이 두 번 올라갑니다. 또는 에이전트가 340자 분량의 글을 작성했는데, 해당 네트워크는 300자를 허용하고, 당신은 월요일 오전 9시에 보내는 과정에서 이를 알게 됩니다.
저희는 소규모 팀을 위한 소셜 미디어 스케줄러 GPTpost를 구축했고, 여기에 REST API와 원격 MCP 서버를 연결하여 Claude, ChatGPT 및 일반 스크립트가 게시물을 초안 작성하고 예약할 수 있게 했습니다. 이 글은 저희 제품을 사용하지 않더라도 유용한 패턴인 에이전트 앞에 설치한 가드레일(guard rails)에 관한 것입니다.
1. 에이전트도 사람과 같은 규칙을 따른다
에이전트는 단지 또 다른 작성자일 뿐입니다. 이 에이전트가 만든 게시물은 앱에서 작성된 게시물과 동일한 검사를 거칩니다:
- 게시물은 전송 시점이 아니라 큐(queue)에 추가될 때 길이가 검사됩니다. Bluesky는 300자, Mastodon은 500자, X는 280자입니다. 규격에 맞지 않는 게시물은 HTTP 422 오류와 함께 거부되므로, 에이전트는 여전히 컨텍스트를 가지고 글을 줄일 수 있습니다.
- 승인 절차도 여전히 적용됩니다. 워크스페이스에서 승인이 필요하다면, 에이전트는 초안 작성 및 예약을 할 수 있지만, 아무것도 무단으로 게시되지 않습니다 (건너뛰려고 하면 409 오류 발생).
- 플랜 제한(Plan limits)도 여전히 적용됩니다 (402), 따라서 통제 불능의 루프가 워크스페이스가 지불하는 금액 이상으로 게시물을 올릴 수 없습니다.
핵심은 이겁니다. 자동화를 위해 별도의, 더 느슨한 경로를 만들지 마십시오. 에이전트를 이미 신뢰하는 규칙 뒤에 두세요.
2. 재시도는 안전해야 한다: Idempotency-Key
모든 쓰기 작업(write)은 Idempotency-Key 헤더를 받습니다. 같은 키를 두 번 보내면, 두 번째 게시물이 올라가는 대신 첫 번째 결과를 돌려받게 됩니다.
curl -X POST https://app.oraglegpt.org/api/v1/agent/posts \
-H
- 게시하는 **무엇** (캠페인, 슬롯, 계정)에서 키를 파생해야 하며, 시도마다 무작위로 생성된 값에서 가져와서는 안 됩니다. 시도당 무작위 키는 목적을 상쇄합니다.
- 이미 전송한 내용을 담은 작은 로컬 상태 파일을 유지하세요. 이는 재실행을 지루하게 만들고, 이것이 바로 원하는 것입니다.
## 3. '게시됨(Published)'은 확인된 것을 의미해야 합니다
스케줄러는 두 가지 방향으로 틀릴 수 있습니다. 네트워크가 조용히 거부했음에도 게시물이 나간 것처럼 말하거나, 실제로 이미 올라갔던 내용을 재전송할 수 있습니다. 우리는 네트워크가 이를 확인한 후에만 게시물을 '게시됨'으로 표시하며, 답변이 불분명할 때는 맹목적으로 재시도하는 대신 보류합니다. 브랜드 계정에서 중복 발행 한 번은 지연된 게시물 하나보다 더 많은 신뢰를 잃게 만듭니다.
## 4. 키의 범위를 지정하고, 만료될 것을 예상하세요
키는 워크스페이스별로 발급되며, 한 번 표시되고 해시되어 저장되며, 범위(scope)를 가집니다 (`accounts:read`, `posts:read`, `posts:write`, `media:write`). 키는 생성한 사람이 가진 권리보다 더 많은 권리를 절대 가지지 않습니다. 에이전트에게 필요한 최소한의 세트를 주고 만료 기한을 설정하세요.
## Claude Code로 시도해 보기
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
claude mcp add --transport http gptpost https://app.oraglegpt.org/mcp
--header "Authorization: Bearer <YOUR_API_KEY>"
MCP 도구로는 `whoami`, `list_accounts`, `create_post`, `schedule_post`, `publish_post`, `upload_media`, `get_post_status` 및 `list_posts`가 있습니다. [https://app.oraglegpt.org/openapi.json](https://app.oraglegpt.org/openapi.json)의 OpenAPI 파일은 ChatGPT 사용자 지정 액션과 OpenAPI 인식 에이전트 프레임워크에서 작동합니다.
솔직한 제한 사항: GPTpost는 오늘 Mastodon, Bluesky, Lemmy, DEV, WordPress, Telegram, Discord, Slack 및 기타 몇 곳에 게시하며, 각 네트워크가 앱 검토를 완료함에 따라 Facebook, Instagram, LinkedIn 등이 열릴 예정입니다. 소셜 인박스나 청취 기능은 없습니다.
문서: [https://app.oraglegpt.org/developers](https://app.oraglegpt.org/developers). 에이전트를 실제 워크스페이스에 연결하고 싶다면 [https://oraglegpt.org](https://oraglegpt.org)에서 카드 없이 14일 체험을 할 수 있습니다.
공개 계정에 접근하는 에이전트들 앞에 어떤 안전장치(guard rails)를 설치해야 할까요?