작업 공간 도구
원천 · framework/evomind/web/workflow-project-evo-service기준 · 릴리스 v0.12.0커밋 · 2e32c6cc파일 · docs/operations/workspace-tools.md기준선 · 2026-11-12
웹 채팅의 모델이 대화에 묶인 GitLab 프로젝트에서 evo workflow·git·glab·파일을 쓰는 방법을 적는다.
도구는 모델에게 함수로 노출되고, 실행은 서버가 workspace-runner.md 의 /v1/* API 로 넘긴다.
토큰·인증은 workspace-token.md 를 따른다.
1. 켜는 조건
섹션 제목: “1. 켜는 조건”| 조건 | 설명 |
|---|---|
WORKSPACE_ENABLED=true |
작업 공간 기능. |
WORKSPACE_RUNNER_URL·WORKSPACE_RUNNER_TOKEN |
실행기 주소(http/https)와 서비스 토큰. |
기능 권한 workspace |
사용자의 역할(또는 그룹 역할)에 있어야 한다. 기본 역할에는 넣지 않는다(기본 꺼짐). 관리자는 항상 쓸 수 있다. |
셋 중 하나라도 없으면 도구 목록이 비어 모델에게 아무것도 노출되지 않는다(채팅은 그대로 동작한다).
| 환경 변수 | 기본값 | 설명 |
|---|---|---|
WORKSPACE_RUNNER_URL |
(비움) | 실행기 주소. http(s) 가 아니거나 토큰이 없으면 기동 때 경고만 남기고 도구를 내보내지 않는다. |
WORKSPACE_RUNNER_TOKEN |
(비움) | 실행기 서비스 토큰(Bearer). 비밀 — 문서·로그·이슈·MR 에 값을 적지 않는다. |
WORKSPACE_RUNNER_TIMEOUT |
180s |
실행기 호출 한 번의 대기 상한. |
WORKSPACE_MAX_FILE_WRITE_BYTES |
262144 |
모델이 파일 하나에 쓸 수 있는 최대 바이트(256 KiB). |
2. 대화 ↔ 프로젝트 묶기
섹션 제목: “2. 대화 ↔ 프로젝트 묶기”도구는 대화마다 하나의 프로젝트를 작업 공간으로 쓴다(conversation_workspaces, V28).
workspace_open(project, base_branch?)— 프로젝트(group/project)를 이 대화에 묶고 clone·worktree 를 준비한다. 승인이 필요하다(원격 읽기 + 로컬 쓰기). 주소는 받지 않는다 — 서버가WORKSPACE_GITLAB_HOST와 검증한 프로젝트 경로로 만든다.- 프로젝트 경로는
group/project형식만 받는다(2~10 조각). 주소·..·.git·//·공백·:·@는 거절한다. - 기본 브랜치는
main이다. 대화의 작업 브랜치는chat/<대화 id>이고 push 는 이 브랜치만 올린다. workspace_info— 묶인 프로젝트·폴더·브랜치를 승인 없이 보여 준다.- 묶인 프로젝트가 없으면 다른 도구는
no_workspace로 실패하고workspace_open을 안내한다.
3. 도구 목록
섹션 제목: “3. 도구 목록”| 도구 | 동작 | 승인 |
|---|---|---|
workspace_open |
프로젝트 묶기 + clone·worktree 준비 | 필요 |
workspace_info |
묶인 프로젝트 확인 | 없음 |
workspace_file_read |
worktree 안 파일 읽기(텍스트) | 없음 |
workspace_file_write |
worktree 안 파일 쓰기(UT, 덮어씀) | 필요 — diff 표시 |
git_workspace |
status·diff·log·branch_list / branch_create·stage·commit·push |
앞은 없음, 뒤는 필요 |
glab_workspace |
issue_list·issue_view·mr_list·mr_view / mr_create |
앞은 없음, mr_create 만 필요 |
evo_workflow |
status·list·show·search·validate·issue draft/publish/lifecycle |
issue 만 필요 |
3.1 evo workflow 허용 목록
섹션 제목: “3.1 evo workflow 허용 목록”- 실행 파일은
evo-workflow하나이고, 첫 인자(하위 명령)가status·list·show·search·validate·issue중 하나여야 한다. issue는 두 번째 인자가draft·publish·lifecycle중 하나여야 한다.--yes·--yes=…·--session-agent·--session-agent=…는 어느 위치에도 쓸 수 없다(서버가 거절).- 서버는 사용자가 등록한 에이전트 ID(
workspace_agent_ids)를issue draft·publish실행에만--session-agent로 붙인다. 다른 하위 명령에는 붙이지 않는다(evo 가 받지 않는다). issue publish를--yes없이 실행하면 확인 대기로 기록되어 사람 확인 화면에 뜬다 —workspace-human-confirm.md.init·new·upgrade·bootstrap은 첫 인자 허용 목록에 없어 거절된다. 제목·본문 같은 나머지 인자는 데이터이므로new같은 낱말을 막지 않는다.- 인자는 1~50개, 하나 2000자 이하, 전체 8000자 이하. NUL·제어문자(줄바꿈·탭 제외)는 거절한다.
3.2 git·glab
섹션 제목: “3.2 git·glab”- git 은 정해진 인자만 조립한다.
branch_create는main·chat/접두 이름을 거절하고,stage경로는 worktree 상대 경로만 받는다. push는 서버가 대화 브랜치(chat/<대화 id>)만 올린다 — 모델이 브랜치나 원격을 고르지 않는다.- glab 은 조회와 MR 생성만 있다.
glab auth status -t(토큰 노출)·glab api(임의 API 호출)는 도구에 아예 없다. mr_create는 source 를chat/<대화 id>, target 을 기본 브랜치(또는 지정 브랜치)로 고정한다.
3.3 파일
섹션 제목: “3.3 파일”- 경로는 worktree 안 상대 경로만 받는다. 절대 경로·
\·..·빈 조각·NUL 은 거절한다(runner 가 홈 기준으로 다시 검사한다). - 읽기는 바이너리·너무 큰 파일이면 내용 대신 크기와 이유(
binary·too_large)만 돌려준다. - 쓰기는
content가 UT 텍스트여야 하고 상한(WORKSPACE_MAX_FILE_WRITE_BYTES)을 넘으면 거절한다. 기존 파일이면 미리 읽어 diff 를 만들어 승인 화면에 싣는다. 파일이 없으면/dev/null기준 diff 다.
4. 승인
섹션 제목: “4. 승인”- 쓰기·네트워크 동작은 승인 흐름을 그대로 쓴다: 승인 id 발급 → 화면에 동작·인자 표시 → 사용자가 승인해야 실행. 거부되거나 120초가 지나면 실행하지 않고 모델에 거부를 알린다(모델은 사용자가 다시 요청하기 전까지 재시도하지 않는다).
- 인자 검증은 승인 전에 한다 — 잘못된 인자로 승인을 묻지 않는다.
- 파일 쓰기 승인에는
path·bytes·diff가, git·glab·evo 승인에는 조립한command가 보인다.
5. 출력 가림과 감사
섹션 제목: “5. 출력 가림과 감사”- 모델에게 돌려주는 모든 출력(파일 내용·stdout·stderr·diff·오류 메시지)에서 토큰 모양 문자열을 가린다:
glpat-·glrt-등 GitLab 토큰 접두,Authorization: Bearer|Basic,PRIVATE-TOKEN, JWT, AWS·Slack 키,token|password|secret|api-key=…형태, 그리고 설정에 있는 토큰 원문. - 감사(
mcp.tool.call)에는 도구·동작 이름·승인 여부·결과·오류 코드만 남긴다. 경로·인자·파일 내용·토큰은 넣지 않는다. - 실행기 호출이 실패하면 runner 의 오류 코드를 그대로 쓰되(
no_workspace·busy·disk_quota·timeout·unauthorized등) 주소·토큰은 메시지에 넣지 않는다.
6. 아직 없는 것
섹션 제목: “6. 아직 없는 것”- 사용자 파일 창(내 작업 공간의 사용량·파일 보기·삭제·초기화)은 으로 추가했다 —
workspace-user-window.md. - 사람 확인 화면(이슈 게시·에이전트 ID 등록·MR 머지)은 으로 추가했다 —
workspace-human-confirm.md. - 관리자 사용자 관리의 작업 공간 사용량·초기화와 계정 삭제 연동은 로 추가했다 —
workspace-admin.md. - 사용자별 GitLab 토큰(나머지)과 실행기 이미지 구성은 각 문서를 따른다.
Evo에게 묻기문서 근거 안에서만 답합니다
답변은 문서를 근거로 만들지만 틀릴 수 있습니다. 출처 문서를 함께 확인하세요.