Agent Please는 이슈 트래커의 작업을 격리된 자율 구현 실행으로 전환합니다 — 코딩 에이전트를 감독하는 대신 작업을 관리합니다.
경고: Agent Please는 신뢰할 수 있는 환경에서 사용하기 위한 엔지니어링 프리뷰입니다.
Agent Please는 다음을 수행하는 장기 실행 TypeScript 서비스입니다:
- 이슈 트래커(GitHub Projects v2 또는 Asana)에서 설정된 활성 상태의 작업을 폴링합니다.
- 적격한 각 이슈에 대해 격리된 워크스페이스 디렉토리를 생성합니다.
- 해당 워크스페이스에서 렌더링된 프롬프트와 함께 Claude Code 에이전트 세션을 실행합니다.
- 세션을 모니터링하고, 재시도를 처리하며, 각 폴링 주기마다 이슈 상태를 조정합니다.
Symphony 명세의 TypeScript 구현체로, GitHub Projects v2 / Asana 및 Claude Code에 맞게 적용되었습니다 (Linear와 Codex 대신).
전체 기술 세부사항은 SPEC.md를 참조하세요.
| Symphony (레퍼런스) | Agent Please | |
|---|---|---|
| 이슈 트래커 | Linear | GitHub Projects v2 & Asana (개발 중) |
| 코딩 에이전트 | Codex (app-server 모드) | Claude Code CLI |
| 언어 | Elixir/OTP | TypeScript + Bun |
| 트래커 인증 | LINEAR_API_KEY |
GITHUB_TOKEN, GitHub App 자격 증명, 또는 ASANA_ACCESS_TOKEN |
| 프로젝트 설정 | project_slug |
owner + project_number (GitHub Projects v2) 또는 project_gid (Asana) |
| 이슈 상태 | Linear 워크플로우 상태 | GitHub Projects v2 Status 필드 / Asana 섹션 |
| 에이전트 프로토콜 | JSON-RPC over stdio | @anthropic-ai/claude-agent-sdk |
| 권한 모델 | Codex 승인/샌드박스 정책 | Claude Code --permission-mode |
- 멀티 트래커 지원 — GitHub Projects v2 항목 또는 Asana 작업(개발 중)에서 고정 주기로 작업을 디스패치합니다.
- GitHub App 인증 — PAT 대신 GitHub App 설치 토큰(
app_id+private_key+installation_id)으로 GitHub 트래커를 인증하여, 세밀한 권한과 높은 API 속도 제한을 활용합니다. - 담당자 & 라벨 필터 — 담당자 및/또는 라벨로 적격한 이슈를 필터링합니다. 각 필터 내 여러 값은
OR 로직을 사용하고, 담당자와 라벨 필터가 모두 지정되면 AND로 결합됩니다. 디스패치 시에만
적용되며 이미 실행 중인 이슈에는 영향을 주지 않습니다.
WORKFLOW.md에서 트래커별로 설정합니다. - 격리된 워크스페이스 — 각 이슈별 전용 디렉토리를 사용하며, 워크스페이스는 실행 간 유지됩니다.
WORKFLOW.md설정 — 에이전트 프롬프트와 런타임 설정을 코드와 함께 버전 관리합니다.- 제한된 동시 실행 — 전역 및 상태별 동시 에이전트 제한을 지원합니다.
- 백오프 재시도 — 실패 시 지수 백오프를 적용하고, 정상 종료 시 짧은 연속 재시도를 수행합니다.
- 동적 설정 리로드 —
WORKFLOW.md를 편집하면 서비스 재시작 없이 변경사항이 적용됩니다. - 워크스페이스 훅 —
after_create,before_run,after_run,before_remove라이프사이클 이벤트에서 셸 스크립트를 실행합니다. - 구조화된 로깅 — 안정적인
key=value형식의 운영자 가시 로그를 제공합니다. - Slack 알림 — Slack에서 봇을 @멘션하여 오케스트레이터 상태를 확인할 수 있습니다. Chat SDK Slack 어댑터를 사용합니다.
- 선택적 HTTP 대시보드 —
--port로 활성화하여 런타임 상태와 JSON API를 확인할 수 있습니다.
WORKFLOW.md
|
v
Config Layer ──> Orchestrator ──> Workspace Manager ──> Agent Runner (Claude Code)
| |
v v
Issue Tracker Client Isolated workspace/
(GitHub GraphQL API or per-issue directory
Asana REST API,
polling + reconciliation)
|
v
Status Surface (선택적 HTTP 대시보드 / 구조화된 로그)
컴포넌트:
- Workflow Loader —
WORKFLOW.mdYAML front matter와 프롬프트 템플릿 본문을 파싱합니다. - Config Layer — 환경 변수 간접 참조와 기본값을 가진 타입 안전 getter를 제공합니다.
- Issue Tracker Client — 후보 이슈를 가져오고, 실행 중인 이슈 상태를 조정합니다. GitHub Projects v2 (GraphQL API)와 Asana (REST API) 어댑터를 지원합니다.
- Orchestrator — 인메모리 상태를 소유하고, 폴링/디스패치/재시도 루프를 구동합니다.
- Workspace Manager — 이슈별 워크스페이스를 생성, 재사용, 정리하고 훅을 실행합니다.
- Agent Runner — Claude Code를 실행하고, 이벤트를 Orchestrator로 스트리밍합니다.
- Status Surface — 운영자 가시성을 위한 선택적 터미널 뷰와 HTTP API를 제공합니다.
전체 명세는 SPEC.md를 참조하세요.
- Bun (설치: bun.sh)
- Claude Code CLI (공식 설치 가이드 참조)
- GitHub 토큰 (
GITHUB_TOKEN) — 대상 프로젝트에 접근 가능해야 함, 또는 GitHub App 자격 증명 (GITHUB_APP_ID,GITHUB_APP_PRIVATE_KEY,GITHUB_APP_INSTALLATION_ID) — GitHub App 인증 참조, 또는 Asana 액세스 토큰 (ASANA_ACCESS_TOKEN) (개발 중)
git clone https://github.com/pleaseai/agent-please.git
cd agent-please
bun install
bun run build대상 저장소에 WORKFLOW.md를 생성합니다. 아래에 두 가지 예시가 있습니다.
실제 사용 예시는 예제 WORKFLOW.md를 참조하세요.
실제 사용 예시는 예제 GitHub Project를 참조하세요.
---
platforms:
github:
api_key: $GITHUB_TOKEN
owner: your-org
bot_username: agent-please
projects:
- platform: github
project_number: 42
active_statuses:
- Todo
- In Progress
- Merging
- Rework
terminal_statuses:
- Closed
- Cancelled
- Canceled
- Duplicate
- Done
watched_statuses:
- Human Review
polling:
interval_ms: 30000
workspace:
root: ~/agent-please_workspaces
hooks:
after_create: |
git clone https://github.com/your-org/your-repo.git .
bun install
agent:
max_concurrent_agents: 3
max_turns: 20
claude:
permission_mode: acceptEdits
# setting_sources: [] # 기본값: [project, local, user]; SDK 격리 모드에서는 []로 설정
turn_timeout_ms: 3600000
---
GitHub 이슈에 대해 `your-org/your-repo` 저장소에서 작업하고 있습니다.
Issue {{ issue.identifier }}: {{ issue.title }}
{{ issue.description }}
{% if issue.blocked_by.size > 0 %}
차단 사항:
{% for blocker in issue.blocked_by %}
- {{ blocker.identifier }} ({{ blocker.state }})
{% endfor %}
{% endif %}
{% if attempt %}
이번은 #{{ attempt }}번째 시도입니다. 계속하기 전에 워크스페이스의 기존 작업을 검토하세요.
{% endif %}
할 일:
1. 이슈 요구사항을 파악합니다.
2. 요청된 변경사항을 구현합니다.
3. 필요에 따라 테스트를 작성하거나 업데이트합니다.
4. Pull Request를 열고 이 이슈를 `Human Review`로 이동합니다.세밀한 권한과 높은 API 속도 제한을 위해 PAT 대신 GitHub App 자격 증명을 사용합니다:
---
platforms:
github:
app_id: $GITHUB_APP_ID
private_key: $GITHUB_APP_PRIVATE_KEY
installation_id: $GITHUB_APP_INSTALLATION_ID
owner: your-org
bot_username: agent-please
projects:
- platform: github
project_number: 42
active_statuses:
- Todo
- In Progress
- Merging
- Rework
terminal_statuses:
- Closed
- Cancelled
- Canceled
- Duplicate
- Done
watched_statuses:
- Human Review
polling:
interval_ms: 30000
workspace:
root: ~/agent-please_workspaces
hooks:
after_create: |
git clone https://github.com/your-org/your-repo.git .
bun install
agent:
max_concurrent_agents: 3
max_turns: 20
claude:
permission_mode: acceptEdits
# setting_sources: [] # 기본값: [project, local, user]; SDK 격리 모드에서는 []로 설정
turn_timeout_ms: 3600000
---
GitHub 이슈에 대해 `your-org/your-repo` 저장소에서 작업하고 있습니다.
Issue {{ issue.identifier }}: {{ issue.title }}
{{ issue.description }}
{% if issue.blocked_by.size > 0 %}
차단 사항:
{% for blocker in issue.blocked_by %}
- {{ blocker.identifier }} ({{ blocker.state }})
{% endfor %}
{% endif %}
{% if attempt %}
이번은 #{{ attempt }}번째 시도입니다. 계속하기 전에 워크스페이스의 기존 작업을 검토하세요.
{% endif %}
할 일:
1. 이슈 요구사항을 파악합니다.
2. 요청된 변경사항을 구현합니다.
3. 필요에 따라 테스트를 작성하거나 업데이트합니다.
4. Pull Request를 열고 이 이슈를 `Human Review`로 이동합니다.참고: Asana 지원은 개발 중입니다. 아래 설정은 프리뷰이며 변경될 수 있습니다.
---
platforms:
asana:
api_key: $ASANA_ACCESS_TOKEN
projects:
- platform: asana
project_gid: "1234567890123456"
active_sections:
- In Progress
terminal_sections:
- Done
- Cancelled
polling:
interval_ms: 30000
workspace:
root: ~/agent-please_workspaces
hooks:
after_create: |
git clone https://github.com/your-org/your-repo.git .
bun install
agent:
max_concurrent_agents: 3
max_turns: 20
claude:
permission_mode: acceptEdits
# setting_sources: [] # 기본값: [project, local, user]; SDK 격리 모드에서는 []로 설정
turn_timeout_ms: 3600000
---
프로젝트의 Asana 작업을 처리하고 있습니다.
작업: {{ issue.title }}
{{ issue.description }}
{% if issue.blocked_by.size > 0 %}
차단 사항:
{% for blocker in issue.blocked_by %}
- {{ blocker.identifier }} ({{ blocker.state }})
{% endfor %}
{% endif %}
{% if attempt %}
이번은 #{{ attempt }}번째 시도입니다. 계속하기 전에 워크스페이스의 기존 작업을 검토하세요.
{% endif %}
할 일:
1. 작업 요구사항을 파악합니다.
2. 요청된 변경사항을 구현합니다.
3. 필요에 따라 테스트를 작성하거나 업데이트합니다.
4. Pull Request를 열고 이 작업을 리뷰 섹션(예: `Human Review`)으로 이동합니다.# 트래커 토큰 설정 (GitHub PAT)
export GITHUB_TOKEN=ghp_your_token_here
# 또는 (GitHub App)
export GITHUB_APP_ID=12345
export GITHUB_APP_PRIVATE_KEY="$(cat path/to/private-key.pem)"
export GITHUB_APP_INSTALLATION_ID=67890
# 또는 (Asana — 개발 중)
export ASANA_ACCESS_TOKEN=your_token_here
# 현재 디렉토리의 WORKFLOW.md를 사용하여 Agent Please 실행
bunx agent-please
# 또는 WORKFLOW.md 경로 지정
bunx agent-please /path/to/WORKFLOW.md
# 포트 3000에서 선택적 HTTP 대시보드 활성화
bunx agent-please --port 3000WORKFLOW.md는 Agent Please의 런타임 동작에 대한 단일 진실 공급원입니다. YAML front matter
설정 블록과 Markdown 프롬프트 템플릿 본문을 결합합니다.
---
platforms:
github: # projects[].platform 및 channels[].platform에서 참조하는 플랫폼 이름
api_key: $GITHUB_TOKEN # 필수: 토큰 또는 $ENV_VAR (또는 아래 GitHub App 필드 사용)
owner: your-org # 필수: GitHub 조직 또는 사용자 로그인
bot_username: agent-please # 선택: 채팅 채널용 봇 표시 이름
endpoint: https://api.github.com # 선택: GitHub API 기본 URL 재정의
# GitHub App 인증 (api_key 대안 — 세 필드 모두 함께 필요):
# app_id: $GITHUB_APP_ID # 선택: GitHub App ID (정수 또는 $ENV_VAR)
# private_key: $GITHUB_APP_PRIVATE_KEY # 선택: GitHub App 개인키 PEM 또는 $ENV_VAR
# installation_id: $GITHUB_APP_INSTALLATION_ID # 선택: 설치 ID (정수 또는 $ENV_VAR)
# asana: # 개발 중
# api_key: $ASANA_ACCESS_TOKEN # 필수: 토큰 또는 $ENV_VAR
# endpoint: https://app.asana.com/api/1.0 # 선택: Asana API 기본 URL 재정의
# slack:
# bot_token: $SLACK_BOT_TOKEN
# signing_secret: $SLACK_SIGNING_SECRET
projects:
- platform: github # 필수: platforms의 키와 일치해야 함
project_number: 42 # 선택: GitHub Projects v2 프로젝트 번호 (project_id가 없을 때 owner와 함께 필요)
project_id: PVT_kwDOxxxxx # 선택: 프로젝트 노드 ID (owner+project_number 조회 생략)
active_statuses: # 선택: 기본값 ["Todo", "In Progress", "Merging", "Rework"]
- Todo
- In Progress
- Merging
- Rework
terminal_statuses: # 선택: 기본값 ["Closed", "Cancelled", "Canceled", "Duplicate", "Done"]
- Closed
- Cancelled
- Canceled
- Duplicate
- Done
watched_statuses: # 선택: 리뷰 활동 시 에이전트를 디스패치할 상태. 기본값 ["Human Review"]
- Human Review
# filter:
# assignee: user1, user2 # 선택: CSV 또는 YAML 배열; 대소문자 무관 OR 매칭
# # (이 필터 설정 시 미할당 이슈는 제외)
# label: bug, feature # 선택: CSV 또는 YAML 배열; 대소문자 무관 OR 매칭
# 양쪽 필터 모두 지정 시 AND로 결합. 디스패치 시에만 적용.
# - platform: asana # 개발 중
# project_gid: "1234567890123456" # 필수: Asana 프로젝트 GID
# active_sections: # 선택: 기본값 ["To Do", "In Progress"]
# - In Progress
# terminal_sections: # 선택: 기본값 ["Done", "Cancelled"]
# - Done
# - Cancelled
channels:
- platform: github # 필수: platforms의 키와 일치해야 함
allowed_associations: # 선택: 디스패치를 트리거할 수 있는 GitHub 코멘트 작성자 연관 관계
- OWNER
- MEMBER
- COLLABORATOR
# - platform: slack
polling:
interval_ms: 30000 # 선택: 폴링 주기 (ms), 기본값 30000
workspace:
root: ~/agent-please_workspaces # 선택: 기본값 <tmpdir>/agent-please_workspaces
hooks:
after_create: | # 선택: 워크스페이스 최초 생성 시 한 번 실행
git clone https://github.com/your-org/your-repo.git .
before_run: | # 선택: 각 에이전트 시도 전 실행
git pull --rebase
after_run: | # 선택: 각 에이전트 시도 후 실행
echo "Run completed"
before_remove: | # 선택: 워크스페이스 삭제 전 실행
echo "Cleaning up"
timeout_ms: 60000 # 선택: 훅 타임아웃 (ms), 기본값 60000
agent:
max_concurrent_agents: 10 # 선택: 전역 동시 실행 제한, 기본값 10
max_retry_backoff_ms: 300000 # 선택: 최대 재시도 지연 (ms), 기본값 300000
max_concurrent_agents_by_state: # 선택: 상태별 동시 실행 제한
in progress: 5
claude:
command: claude # 선택: Claude Code CLI 명령, 기본값 "claude"
effort: high # 선택: 추론 깊이 — 'low', 'medium', 'high', 또는 'max'. 기본값 'high'.
permission_mode: acceptEdits # 선택: 'default', 'acceptEdits', 'bypassPermissions' 중 하나. 기본값 'bypassPermissions'.
allowed_tools: # 선택: 사용 가능한 도구 제한
- Read
- Write
- Bash
setting_sources: # 선택: 로드할 파일시스템 설정. 기본값: [project, local, user]
- project # 워크스페이스 디렉토리에서 .claude/settings.json + CLAUDE.md 로드
- local # 워크스페이스 디렉토리에서 .claude/settings.local.json 로드
- user # ~/.claude/settings.json + 전역 CLAUDE.md 로드
# "project", "local", "user"만 유효 — 다른 값은 무시됨
turn_timeout_ms: 3600000 # 선택: 턴별 타임아웃 (ms), 기본값 3600000
read_timeout_ms: 5000 # 선택: 초기 서브프로세스 읽기 타임아웃 (ms), 기본값 5000
stall_timeout_ms: 300000 # 선택: 정체 감지 타임아웃, 기본값 300000
settings:
attribution:
commit: "🙏 Generated with [Agent Please](https://github.com/pleaseai/agent-please)" # 선택: git 커밋 메시지에 추가. 기본값은 Agent Please 링크.
pr: "🙏 Generated with [Agent Please](https://github.com/pleaseai/agent-please)" # 선택: PR 설명에 추가. 기본값은 Agent Please 링크.
server:
port: 3000 # 선택: 이 포트에서 HTTP 대시보드 활성화
# 웹훅 엔드포인트:
# GitHub: POST /api/webhooks/github (server.webhook.secret 필요)
# Slack: POST /api/webhooks/slack (SLACK_BOT_TOKEN + SLACK_SIGNING_SECRET 환경변수 필요)
---
프롬프트 템플릿을 여기에 작성합니다. 사용 가능한 변수:
- {{ issue.id }} — 트래커 내부 이슈 ID
- {{ issue.identifier }} — 사람이 읽을 수 있는 식별자 (예: "#42" 또는 작업 GID)
- {{ issue.title }} — 이슈 제목
- {{ issue.description }} — 이슈 본문/설명
- {{ issue.state }} — 현재 트래커 상태명
- {{ issue.url }} — 이슈 URL
- {{ issue.assignees }} — 담당자 로그인(GitHub) 또는 이메일(Asana) 배열
- {{ issue.labels }} — 라벨 문자열 배열 (소문자로 정규화됨)
- {{ issue.blocked_by }} — 차단 참조 배열 (각각 id, identifier, state 포함)
- {{ issue.branch_name }} — PR 헤드 브랜치명 (PullRequest 항목) 또는 null
- {{ issue.pull_requests }} — 연결된 PR 배열 (각각 number, title, url, state, branch_name 포함)
- {{ issue.review_decision }} — PR 리뷰 결정: "approved", "changes_requested", "commented", "review_required", 또는 null
- {{ issue.priority }} — 숫자 우선순위 또는 null
- {{ issue.created_at }} — ISO-8601 생성 타임스탬프
- {{ issue.updated_at }} — ISO-8601 최종 업데이트 타임스탬프
- {{ attempt }} — 재시도 횟수 (첫 실행 시 null)프롬프트 템플릿은 Liquid 호환 구문을 사용합니다. 모든 issue 필드를 사용할 수 있습니다:
{{ issue.identifier }}: {{ issue.title }}
{{ issue.description }}
상태: {{ issue.state }}
{% if issue.blocked_by.size > 0 %}
차단 사항:
{% for blocker in issue.blocked_by %}
- {{ blocker.identifier }} ({{ blocker.state }})
{% endfor %}
{% endif %}
{% if issue.pull_requests.size > 0 %}
연결된 Pull Request:
{% for pr in issue.pull_requests %}
- PR #{{ pr.number }}: {{ pr.title }} ({{ pr.state }}){% if pr.branch_name %} — 브랜치: {{ pr.branch_name }}{% endif %}{% if pr.url %} — {{ pr.url }}{% endif %}
{% endfor %}
{% endif %}
{% if attempt %}
재시도 횟수: {{ attempt }}
{% endif %}# 기본 사용법 (현재 디렉토리에서 WORKFLOW.md 읽기)
agent-please
# WORKFLOW.md 경로 지정 (위치 인수)
agent-please ./WORKFLOW.md
# HTTP 대시보드 활성화
agent-please --port 3000
# 새 GitHub Projects v2 프로젝트 초기화 및 WORKFLOW.md 스캐폴딩
# (GITHUB_TOKEN 환경 변수 설정 필요)
agent-please init --owner <org-or-user> --title "My Project"
# 또는 플래그로 토큰 제공:
agent-please init --owner <org-or-user> --title "My Project" --token <your-github-token>
# 도움말 표시
agent-please --helpgithub_projects 트래커는 두 가지 인증 방법을 지원합니다:
| 방법 | 설정 필드 | 사용 시점 |
|---|---|---|
| PAT | api_key |
개인 액세스 토큰 — 빠른 설정 |
| GitHub App | app_id, private_key, installation_id |
조직 — 세밀한 권한, 높은 속도 제한 |
둘 다 있으면 api_key (PAT)가 우선합니다.
- 다음 권한으로 GitHub App을 생성합니다:
- 저장소 권한:
Contents: 읽기 전용Issues: 읽기 & 쓰기Pull requests: 읽기 & 쓰기
- 조직 권한:
Projects: 읽기 & 쓰기
- 저장소 권한:
- 조직에 앱을 설치하고 설치 ID를 확인합니다 (앱의 설치 설정 URL에서 확인 가능).
- 앱의 설정 페이지에서 개인키 (
.pem파일)를 생성합니다. - 환경 변수를 설정합니다:
export GITHUB_APP_ID=12345
export GITHUB_APP_PRIVATE_KEY="$(cat /path/to/private-key.pem)"
export GITHUB_APP_INSTALLATION_ID=67890WORKFLOW.md에서 참조합니다:
platforms:
github:
app_id: $GITHUB_APP_ID
private_key: $GITHUB_APP_PRIVATE_KEY
installation_id: $GITHUB_APP_INSTALLATION_ID
owner: your-org
projects:
- platform: github
project_number: 42값을 직접 인라인할 수도 있습니다 (시크릿에는 권장하지 않음):
app_id: 12345
private_key: "-----BEGIN RSA PRIVATE KEY-----\n..."
installation_id: 67890Agent Please는 시작 시 GitHub App 설정을 검증합니다:
| 시나리오 | 결과 |
|---|---|
api_key 설정됨 |
PAT 인증 — app 필드 무시 |
세 필드 모두 설정됨 (app_id, private_key, installation_id) |
App 인증 |
| 일부 app 필드만 설정됨 | incomplete_github_app_config 오류 |
| 인증 미설정 | missing_tracker_api_key 오류 |
Agent Please는 Chat SDK Slack 어댑터를 통해 Slack을 알림 채널로 지원합니다. 설정하면 Slack 채널에서 봇을 @멘션하여 실시간 오케스트레이터 상태(실행 중인 이슈, 재시도 큐, 토큰 사용량)를 확인할 수 있습니다.
SLACK_BOT_TOKEN=xoxb-... # Bot User OAuth Token
SLACK_SIGNING_SECRET=... # 웹훅 검증을 위한 서명 시크릿두 환경 변수가 모두 설정되면, 설정된 트래커(GitHub Projects v2 또는 Asana)와 함께 Slack 어댑터가 자동으로 활성화됩니다.
Slack 앱의 Event Subscriptions 및 Interactivity 요청 URL을 다음으로 설정하세요:
https://your-domain.com/api/webhooks/slack
- api.slack.com/apps에서 Create New App > From an app manifest를 클릭합니다.
- 워크스페이스를 선택하고 다음 매니페스트를 붙여넣습니다:
display_information:
name: Agent Please
description: 오케스트레이터 상태 봇
features:
bot_user:
display_name: Agent Please
always_online: true
oauth_config:
scopes:
bot:
- app_mentions:read
- channels:history
- channels:read
- chat:write
- groups:history
- groups:read
- im:history
- im:read
- reactions:read
- reactions:write
- users:read
settings:
event_subscriptions:
request_url: https://your-domain.com/api/webhooks/slack
bot_events:
- app_mention
- message.channels
- message.groups
- message.im
interactivity:
is_enabled: true
request_url: https://your-domain.com/api/webhooks/slack
org_deploy_enabled: false
socket_mode_enabled: false
token_rotation_enabled: falsehttps://your-domain.com/api/webhooks/slack를 배포된 웹훅 URL로 교체합니다.- Create를 클릭한 후 Basic Information > App Credentials에서 Signing Secret을
SLACK_SIGNING_SECRET으로 복사합니다. - OAuth & Permissions에서 Install to Workspace를 클릭하고 Bot User OAuth Token (
xoxb-...)을SLACK_BOT_TOKEN으로 복사합니다. - 채널에 봇을 초대하고 @멘션하여 오케스트레이터 상태를 확인합니다.
Agent Please는 Claude Code를 자율적으로 실행합니다. 배포 전에 신뢰 관련 영향을 이해하세요.
| 모드 | 동작 | 권장 대상 |
|---|---|---|
default |
민감한 작업에 대해 대화형 승인 | 개발 환경, 알 수 없는 저장소 |
acceptEdits |
파일 편집 자동 승인; 셸 명령은 프롬프트 | 신뢰할 수 있는 코드베이스 |
bypassPermissions |
모든 작업 자동 승인 | 샌드박스 CI 환경 |
완전히 격리된 환경에서 실행하는 경우가 아니라면 default 또는 acceptEdits로 시작하세요.
- 각 이슈는
workspace.root하위의 전용 디렉토리에서 실행됩니다. - Claude Code의 작업 디렉토리는 실행 전에 워크스페이스 경로에 대해 검증됩니다.
- 워크스페이스 경로는 경로 탐색 공격을 방지하기 위해 정규화됩니다.
- 대부분의 배포에서
acceptEdits권한 모드를 기본으로 사용하세요. bypassPermissions는 네트워크가 격리된 CI 러너 또는 Docker 컨테이너에서만 사용하세요.- 처음 테스트할 때는
agent.max_concurrent_agents를 보수적으로 설정하세요. - HTTP 대시보드(
--port) 또는 구조화된 로그를 통해 에이전트 실행을 모니터링하세요. - API 토큰의 권한을 최소한으로 설정하세요.
Functional Source License 1.1, MIT Future License (FSL-1.1-MIT). 자세한 내용은 LICENSE를 참조하세요.
- Agent Please는 OpenAI의 Symphony 명세 (Apache 2.0)를 기반으로 한 TypeScript 구현체입니다.
- 이 프로젝트는 Claude Agent SDK를 사용하며, Anthropic의 상업적 서비스 약관이 적용됩니다.