엔진 MCP
dira mcp명령, HTTP 서버, 설정 화면의MCP절은 v1.2.19부터 들어 있습니다.dira mcp가 명령을 찾지 못한다는 오류로 끝나거나 설정 화면에MCP절이 없으면 앱이 그보다 낮은 버전입니다. 앱을 v1.2.19 이상으로 올리세요. 지금 올릴 수 없다면 아래 앱 없이 붙이기대로python3로 서버를 직접 지정하면 됩니다.
MCP를 지원하는 클라이언트(Claude Code, Claude Desktop, Cursor 등)에서 dira 큐를 다룹니다. 티켓 만들기와 읽기, 절 덧붙이기, 워커 돌리기, 도는 세션에 참견 보내기를 그 클라이언트의 대화 안에서 합니다. 앱 화면이나 셸에서 하던 엔진 작업은 MCP로도 전부 할 수 있습니다.
무엇을 할 수 있나
자주 쓰는 작업은 이름 붙은 도구로 있습니다.
| 도구 | 하는 일 |
|---|---|
projects | 앱에 등록된 프로젝트와 큐 루트를 돌려줍니다(~/.config/dira/gui-projects.json) |
queue_list | 열린 티켓 목록. <w>.sh list와 같습니다 |
dispatch | 워커를 1회 돌립니다. worker 인자에 워커 이름을 줍니다 |
dryrun | 실행 없이 선정 결과만 봅니다 |
reap | 세션이 죽은 티켓을 회수합니다 |
unassign | 티켓 할당을 풉니다. 인자는 hash, force |
ticket_find | 해시로 티켓 경로를 찾습니다(tickets.py find) |
ticket_read | 티켓 본문 전문을 읽습니다 |
ticket_create | frontmatter와 본문으로 새 <8자 해시>.md를 만듭니다. 같은 해시가 있으면 실패합니다 |
ticket_append | 그 해시의 현재 파일명을 다시 찾아 끝에 절을 더합니다. 파일이 0개거나 2개 이상이면 실패합니다 |
ticket_done | .wip을 .done으로 바꿉니다. 다른 rename은 하지 않습니다 |
interject | 진행 중인 세션에 참견 한 줄을 보냅니다. 화면의 참견과 같은 길로 갑니다 |
awaiting_list | 답변 대기 티켓과 그 질문을 모아 봅니다. root를 빼면 등록된 프로젝트 전부를 훑습니다. 아래 답변 대기를 다른 에이전트에게 맡기기 |
ticket_answer | 답변 대기 티켓에 답을 답니다. 화면의 답변 쓰기와 같은 파일을 만듭니다 |
graph_query | 온톨로지에 묻습니다(graph.py query) |
ontology_objects ontology_object ontology_search | 온톨로지 객체를 목록-하나-검색으로 읽습니다. 아래 온톨로지 읽기 |
ontology_versions ontology_version ontology_schema | 객체의 지난 판과 온톨로지 스키마를 읽습니다. 아래 온톨로지 읽기 |
env_list env_create env_replace env_delete | 프로젝트 환경변수를 다룹니다. 값은 응답에 싣지 않습니다 |
project_register | 이미 만들어 둔 큐를 앱의 프로젝트 목록에 등록합니다. 인자는 path name id이고, 화면에서 등록할 때와 같은 검사를 거칩니다. 아래 프로젝트 등록과 설정을 다른 에이전트에게 맡기기 |
project_rename | 등록된 프로젝트의 이름을 바꿉니다. 인자는 id name |
project_reorder | 프로젝트 목록의 순서를 바꿉니다. 인자는 ids |
project_unregister | 프로젝트를 목록에서만 뺍니다. 큐 파일은 지우지 않습니다 |
settings_get | 이 컴퓨터의 설정(언어, 주도성, 오토파일럿, 다중계정, 세션 상한)을 읽습니다 |
settings_set | 이 컴퓨터의 설정 중 인자로 준 것만 바꿉니다 |
project_settings_get | 큐 하나의 통합 브랜치, 쉬는 동안 작업 트리 비우기 상태, 워커 목록을 읽습니다 |
project_slim | 큐 하나의 쉬는 동안 작업 트리 비우기를 켜거나 끕니다 |
이 표에 없는 작업은 engine_exec로 합니다. program에 아래 허용목록 중 하나를, args에 인자
배열을 줍니다. 셸을 거치지 않고 실행하며 결과는 {rc, stdout, stderr}로 돌아옵니다. 시간
상한 timeout의 기본값은 600초입니다.
tickets.pygraph.pylearn.pydira_env.pyworkers/<w>.sh- 큐 루트 안에 실제로 있는 워커 파일만push.shtoken-rotate.sh-push.sh는cwd를 받는데 큐 루트worktrees/아래 실제 디렉터리만 됩니다
예를 들어 손으로 티켓을 가져가는 handclaim은 program을 tickets.py로, args를
["handclaim", "<티켓 경로>"]로 줍니다. 엔진에 서브커맨드가 늘면 이 경로로 같이 닿습니다.
온톨로지 읽기
ontology_로 시작하는 도구 여섯은 온톨로지 위치의 objects/ versions/ _ontology/ 아래 .md
파일을 직접 읽어 JSON으로 돌려줍니다. 이 여섯은 v1.2.19보다 뒤의 판에 들어오므로, 도구 목록에
ontology_로 시작하는 이름이 없으면 앱을 올리세요. 원격 큐에서 웹이
온톨로지를 볼 때와 같은 코드를 거치므로 두 쪽의 답이 같습니다. 부를 때마다 파일을 새로 읽습니다.
| 도구 | 인자 | 돌려주는 것 |
|---|---|---|
ontology_objects | types cursor limit | objects/ 아래 객체 목록을 경로 순으로 돌려줍니다. 본문은 없습니다. limit은 기본 200, 최대 1,000이고, 남은 것이 있으면 cursor가 붙습니다. 다음 쪽은 그 값을 cursor로 다시 부릅니다 |
ontology_object | name backlinks | 객체 하나에 본문(body)과 파일 원문(content)을 더해 돌려줍니다. 없으면 object가 null입니다. backlinks를 true로 주면 이 객체를 가리키는 관계도 함께 돌려줍니다 |
ontology_search | q types limit | 이름-제목-속성 값-본문에서 q를 찾아 객체와 처음 맞은 자리 앞뒤 100자 안팎(excerpt)을 돌려줍니다. 이름이나 제목에서 맞은 것이 먼저 옵니다. limit은 기본 20, 최대 100입니다 |
ontology_versions | name | 그 객체의 지난 판 목록을 판 이름-경로-sha256-수정 시각으로 돌려줍니다 |
ontology_version | name version | 지난 판 하나의 원문과 sha256을 돌려줍니다. 없으면 content가 null입니다 |
ontology_schema | 없음 | _ontology/의 객체 타입(object_types)과 관계 타입(link_types) 정의를 돌려줍니다 |
객체 하나는 {name, type, path, sha256, title, props, links}로 옵니다. props는 frontmatter에서
name type links를 뺀 나머지이고, links는 [{type, to, props}]입니다. frontmatter를 해석하지
못한 파일은 객체에서 빠지고 errors에 경로와 사유로 실립니다. 사유 다섯 가지는
원격 큐에 있습니다. ontology_objects는 첫 쪽에만 errors를
싣습니다.
graph_query는 온톨로지에서 만든 그래프에 질문을 던지고, 이 여섯은 파일 내용을 구조 그대로 읽습니다.
객체 하나의 속성이나 본문이 필요하면 ontology_object를 부르세요.
원격 작업 세션에는 이 MCP 서버가 저절로 붙지 않습니다. 그 세션에서 이 도구를 쓰려면 페르소나의
mcp.json에 dira mcp 서버가 들어 있어야 합니다.
답변 대기를 다른 에이전트에게 맡기기
세션이 ## 질문 n을 남기고 멈춘 티켓은 답변 대기로 잠깁니다. 이 답은
화면에서만 쓰는 것이 아닙니다. dira MCP를 붙인 다른 에이전트(Claude Cowork 등)에게 맡기면 그 에이전트가
브라우저를 열지 않고 도구 두 개로 처리합니다. 도구 목록에 awaiting_list와 ticket_answer가 없으면 앱을
올리세요.
에이전트에게는 이렇게 맡기면 됩니다.
dira MCP로 등록된 프로젝트의 답변 대기 티켓을 모아 보고, 질문마다 선택지를 고르거나 직접 답을 써서 달아 줘. 판단이 서지 않는 질문은 답하지 말고 나에게 물어봐.
에이전트는 먼저 awaiting_list를 부릅니다. root를 주면 그 큐만 보고, 빼면 등록된 프로젝트 전부를
봅니다. 나오는 티켓은 화면에서 답변 대기 배지가 붙는 티켓과 같습니다. 프로젝트 순서대로 오고, 한
프로젝트 안에서는 오래 기다린 티켓이 먼저 옵니다. 큐 루트를 읽지 못한 프로젝트는 건너뛰고
skipped에 프로젝트와 사유를 적습니다. 항목 하나에는 이런 값이 실립니다.
| 키 | 뜻 |
|---|---|
project root | 프로젝트 이름과 큐 루트 |
hash title persona | 티켓 해시, 제목, 맡은 페르소나 |
awaiting | 답 파일의 이름이 될 해시 |
round question | 마지막 ## 질문 n 절의 n과 그 절 전문 |
items | 그 절에서 읽은 문항 목록 [{number, title, options: [{letter, label}]}] |
items는 문항이 ### 1. ### 1-1.로, 선택지가 (a) (a-1)로 시작하는 절만 읽습니다. 형식이 다른
절이면 items가 빈 배열로 오고, 이때 에이전트는 question 전문을 읽고 직접 답을 씁니다.
답은 ticket_answer에 hash와 함께 줍니다. 답을 주는 인자는 picks와 text 두 가지이고, 둘 중
하나는 반드시 있어야 합니다. 둘 다 주면 picks로 만든 줄 다음에 빈 줄 하나를 두고 text를 붙입니다.
picks는 고른 선택지입니다.[{number, letters, note}]꼴이고,number는 문항 번호(items의number),letters는 고른 글자의 배열,note는 그 문항에 덧붙일 말입니다.note는 빼도 됩니다. 화면에서 선택지를 고를 때 만들어지는 줄과 같은 형식으로 바뀝니다. 예를 들어{"number": "1", "letters": ["a", "a-1"]}은1.(a)(a-1)한 줄이 됩니다.text는 직접 쓴 답입니다. 맞는 선택지가 없거나items가 비었을 때 씁니다.
ticket_answer는 화면과 같은 순서로 검사하고, 하나라도 걸리면 아무 파일도 만들지 않습니다. 그 티켓이
지금 답변 대기여야 하고, 같은 답이 아직 달리지 않았어야 합니다. picks의 번호와 글자는 마지막 질문
절에 실제로 있어야 하고, a-1 같은 하위 글자는 부모 글자 a도 같이 골랐을 때만 받습니다. 오류
문구에는 어느 검사에 걸렸는지 적혀 있습니다.
검사를 통과하면 tickets/<awaiting>.done.md를 만듭니다. 화면의 답변 쓰기가 만드는 파일과 글자
하나까지 같습니다. 이 파일이 생기는 순간 잠금이 풀리고, 그 티켓은 다시 큐에 올라 워커가 가져갈 수
있게 됩니다. 도구는 이어서 워커를 한 번 깨웁니다. 응답은 {path, round, body, dispatch}이고
dispatch에 그 결과가 실립니다. 워커를 깨우지 못해도 답 파일은 남으므로, 그 티켓은 다음 워커
실행 때 가져갑니다.
프로젝트 등록과 설정을 다른 에이전트에게 맡기기
앱의 프로젝트 목록과 설정도 MCP로 바꿀 수 있습니다. 도구는 화면이 쓰는 파일을 같은 형식으로 쓰므로,
에이전트가 바꾼 값은 앱 화면에 그대로 보입니다. 도구 목록에 project_register와 settings_set이
없으면 앱을 올리세요.
에이전트에게는 이렇게 맡기면 됩니다.
dira MCP로
~/Projects/shop/.dira를shop이라는 이름으로 등록하고 프로젝트 목록 맨 위로 올려 줘. 그 큐는 쉬는 동안 작업 트리를 비우게 하고, 이 컴퓨터의 세션 상한은 4로 맞춰 줘.
프로젝트 목록
프로젝트 도구 넷은 ~/.config/dira/gui-projects.json을 고칩니다. 대상 프로젝트는 id로 고르고,
각 프로젝트의 id는 projects가 알려 줍니다. 응답은 고친 뒤의 프로젝트 목록 전체입니다.
project_register는 path에 큐 루트(<프로젝트>/.dira)를, name에 화면에 보일 이름을 받습니다.
id를 빼면 이름을 소문자로 바꾸고 영문과 숫자가 아닌 글자를 -로 바꿔 40자 안에서 만듭니다. 검사는
화면과 같은 순서로 합니다.
- 이름이 비어 있지 않은가
- 경로가 절대경로이고 실제로 있는 디렉터리인가(
~로 시작하면 홈으로 풉니다) - 그 안에
tickets나workers가 있는가 - 같은 큐나 같은
id가 이미 등록되어 있지 않은가
하나라도 걸리면 목록을 쓰지 않고, 어느 검사에 걸렸는지 적은 오류로 끝납니다. 3번을 통과하면 큐의 부모
디렉터리 .gitignore에 .dira 줄이 있는지 보고, 없으면 그 자리에서 더합니다. 화면도 이렇게 하므로
4번에서 걸려도 이 줄은 남습니다. 성공하면 응답에 새 항목이 project로 따로 실립니다. 화면에서
등록하면 코어 프로토콜을 큐에 바로 복사하지만, 이 도구로 등록하면 앱을 다음에 켤 때 복사합니다.
나머지 셋은 짧습니다.
project_rename은id와 새name을 받습니다. 이름이 비었거나 없는id면 오류입니다.project_reorder는ids에 준 순서대로 앞에 놓고,ids에 없는 프로젝트는 원래 순서대로 그 뒤에 붙입니다. 하나만 맨 위로 올리려면 그id하나만 주면 됩니다. 모르는id는 무시합니다.project_unregister는 목록에서만 뺍니다. 큐 디렉터리와 티켓은 한 바이트도 건드리지 않으므로, 같은 큐를 나중에project_register로 다시 등록할 수 있습니다. 없는id면 오류입니다.
이 컴퓨터의 설정
settings_get과 settings_set은 ~/.config/dira/ 아래 설정 파일을 읽고 씁니다. 큐와 상관없이 이
컴퓨터 전체에 걸리는 설정이라 root를 받지 않습니다. settings_set이 받는 키는 이렇습니다.
| 키 | 화면 이름 | 값 |
|---|---|---|
language | 언어 | ko 또는 en |
autonomy_level | 주도성 | 정수 1~5 |
autopilot | 오토파일럿 | true 또는 false. true는 주도성이 5일 때만 받습니다 |
multitoken | 다중계정 허용 | true 또는 false |
multiplay | 다중계정 동시사용 | true 또는 false |
session_limit | 머신 전체 세션 상한 | 0 이상의 정수. null을 주면 상한을 없앱니다 |
settings_set은 준 키만 바꿉니다. 값을 모두 먼저 검사하고, 하나라도 틀리면 파일을 하나도 쓰지
않습니다. 주도성만 바꾸면 오토파일럿 값은 그대로 두고, 오토파일럿만 바꾸면 주도성 값을 그대로 둡니다.
화면의 두 컨트롤과 같은 동작입니다. 그래서 오토파일럿을 켠 채 주도성을 4로 내리면 오토파일럿은 꺼진
것으로 읽히고, 다시 5로 올리면 켜진 상태로 돌아옵니다. 주도성이 4 이하일 때 주도성 5와 오토파일럿을 한 번에
켜려면 autonomy_level과 autopilot을 같은 호출에 함께 줍니다.
응답은 바꾼 뒤의 settings_get 결과입니다. settings_get은 주도성과 오토파일럿을
autonomy: {level, autopilot}으로, 세션 상한을 session_limit: {limit, warn}으로 묶어 돌려줍니다.
multitoken이 null이면 아직 아무도 정하지 않아 앱 빌드의 기본값을 따르는 상태입니다. 상한 파일을
읽지 못하면 warn이 붙습니다.
큐 하나의 설정
project_settings_get과 project_slim은 다른 도구처럼 root로 큐를 고릅니다.
project_settings_get은 integration_branch(통합 브랜치), slim(작업 트리 비우기 상태),
workers(워커 이름 목록)를 돌려줍니다. 큐의 integration-branch 파일이 없거나 그 첫 줄을 브랜치
이름으로 읽을 수 없으면 integration_branch는 null입니다. 화면은 이때 git에서 브랜치를 찾아 파일을
채우지만, 이 도구는 읽기만 하고 아무것도 쓰지 않습니다.
project_slim은 on에 true나 false를 받아
쉬는 동안 작업 트리 비우기를 켜거나 끕니다. 켤 때 비우기가
거절되어도 켜짐은 저장되고, 거절 사유는 응답의 message에 실립니다. 화면 스위치와 같습니다. 응답의
나머지는 바꾼 뒤의 작업 트리 비우기 상태입니다.
MCP로 바꾸지 않는 것
아래는 화면에서만 합니다. 파일 하나만 쓰면 끝나는 일이 아니라서 MCP에 넣지 않았습니다.
- 새 프로젝트 만들기. 큐 디렉터리와 git 저장소를 만들고 cron에 등록하는 일이 함께 돕니다. 화면에서
만들거나, 이미 만든 큐를
project_register로 등록하세요. - 워커 만들기와 지우기. 워크트리를 만들고 cron에 등록하는 일이 함께 돕니다. 이미 있는 워커를 돌리는
일은
dispatch같은 기존 도구가 합니다. - 통합 브랜치 바꾸기. 이름을 바꾸면 그 이름이 쓰인 자리 여럿을 화면이 함께 고칩니다. MCP에서는
project_settings_get으로 읽기만 합니다. - 토큰과 계정, 엔진 프로필, 웹훅, Vercel, 이기적 모드, 키설정, 페르소나 색, 사용 통계. 사용 통계는 사람이 직접 동의하는 설정이라 에이전트가 켜고 끄는 길을 두지 않았습니다.
어느 큐인지 정하기
모든 도구는 root 인자로 큐 루트(<프로젝트>/.dira)를 받습니다. 빠뜨리면 환경변수
TICKET_ROOT를 쓰고 그것도 없으면 root가 필요합니다로 끝납니다. awaiting_list 하나만 예외로, root를 빼면 등록된 프로젝트 전부를 훑습니다. 프로젝트 도구 넷과
settings_get settings_set은 큐를 고르지 않으므로 root를 받지 않습니다. 큐 루트를 모르면 projects부터
부르세요. 한 프로젝트만 다룰 거라면 클라이언트 설정에 TICKET_ROOT를 넣어 두는 편이 편합니다.
MCP가 하지 않는 것
MCP를 거쳐도 큐 규칙은 그대로입니다. 티켓을 가져가는(claim) 길은 tickets.py의 원자적 link
하나뿐이고, 티켓 이름을 바꾸는 도구는 ticket_done 하나입니다. push --force, reset --hard,
stash, 원격 push를 실행하는 도구는 없습니다.
클라이언트에 붙이기
붙이는 방법은 stdio와 HTTP 두 가지입니다. 설정 화면의 MCP 절에 두 방법의 연결 설정이 복사
버튼과 함께 있습니다. 복사한 값을 클라이언트의 MCP 서버 설정에 서버 하나로 넣으세요. 넣는
파일과 바깥 모양은 클라이언트마다 다르니 그 클라이언트의 문서를 따릅니다.
stdio - dira mcp
{"command":"dira","args":["mcp"]}클라이언트가 필요할 때 dira mcp를 띄우고 다 쓰면 내립니다. 앱이 꺼져 있어도 됩니다. 엔진만
설치되어 있으면 언제나 뜹니다. 큐 루트를 고정하려면 클라이언트 설정의 환경변수 자리에
TICKET_ROOT를 넣습니다.
HTTP - cron이 띄워 둔 서버
{"type":"http","url":<url>,"headers":{"Authorization":"Bearer <token>"}}<url>과 <token>은 설정 화면에서 복사한 값에 이미 채워져 있습니다. 서버는 127.0.0.1에만
열리므로 다른 기기에서는 붙을 수 없습니다. 토큰이 없거나 틀린 요청은 401로 거절하고, 다른 사이트의 브라우저
요청은 403으로 막습니다.
한 번 붙여 두면 계속 씁니다. 토큰은 처음 한 번 만들어 ~/.config/dira/mcp/token에 두고,
서버를 다시 띄울 때도 그 값을 씁니다. 포트는 47823을 먼저 씁니다. 다른 프로그램이 그 포트를
쓰고 있으면 빈 포트로 뜨는데, 이때는 주소가 바뀌므로 설정 화면에서 HTTP 설정을 다시 복사해
넣으세요. 지금 값은 ~/.config/dira/run/mcp.json의 url과 token에도 있습니다.
v1.2.20 이하의 앱은 HTTP 서버를 앱 안에서 띄웠고, 토큰도 앱을 켤 때마다 새로 만들었습니다. 그 버전을 쓰고 있다면 앱을 올린 뒤 HTTP 설정을 한 번 다시 복사하세요.
앱 없이 붙이기
git clone으로 엔진만 받았다면 엔진 레포의 mcp_server.py를 python3로 직접 지정합니다.
경로는 엔진을 받은 자리로 바꾸세요.
{"command":"python3","args":["/Users/<나>/Projects/dira/mcp_server.py"]}앱을 꺼도 HTTP 서버는 떠 있습니다
HTTP 서버는 워커처럼 cron이 지킵니다. dira 앱을 한 번 켜면 앱이 두 가지를 해 둡니다.
- 감시 스크립트를
~/.config/dira/mcp/keepalive.sh에 둡니다. - crontab에 그 스크립트를 매분 부르는 줄을 하나 넣습니다. 줄이 이미 있으면 그대로 두고, 다른 줄은 건드리지 않습니다.
* * * * * "<홈>/.config/dira/mcp/keepalive.sh" "<엔진>/tick.sh" >> "<홈>/.config/dira/run/mcp.log" 2>&1<엔진>은 워커의 cron 줄이 부르는 tick.sh와 같은 자리입니다. 앱은 줄을 넣은 직후 스크립트를
한 번 직접 돌리므로, 다음 분을 기다리지 않고 서버가 뜹니다.
그 뒤로는 앱을 닫아도 cron이 매분 스크립트를 부릅니다. 스크립트는 mcp.json의 pid가 살아 있는
mcp_server.py면 아무것도 하지 않고 끝납니다. 서버가 죽어 있으면 같은 토큰으로 다시 띄우고
mcp.json을 새 pid로 다시 씁니다. 서버가 죽더라도 1분 안에 같은 주소와 같은 토큰으로 돌아오므로
클라이언트 설정은 고칠 필요가 없습니다.
설정 화면 MCP 절의 상태 줄은 mcp.json을 읽어 지금 상태를 보여 줍니다. 앱 창과 브라우저에서
연 화면이 같은 값을 봅니다. 켜짐 - <url>이면 HTTP로 붙을 수 있습니다. 꺼짐이면 떠 있는 서버가
없다는 뜻이고, 그 아래에 dira 앱을 한 번 켜면 cron이 띄웁니다가 나옵니다.
서버가 안 뜰 때
꺼짐이 1분 넘게 이어지면 두 곳을 봅니다.
crontab -l | grep 'mcp/keepalive.sh'
tail -n 20 ~/.config/dira/run/mcp.logcrontab -l에 줄이 없으면 앱이 crontab에 쓰지 못한 것입니다. 앱이 crontab을 고칠 때 macOS가앱 관리권한을 묻는데, 이 창을 거부하면 이렇게 됩니다.설정 › 개인정보 보호 및 보안 › 앱 관리에서 dira를 승인하고 앱을 다시 켜세요.- 줄은 있는데 서버가 없으면
mcp.log를 아래에서부터 읽습니다. cron이 부를 때마다 스크립트와 서버가 남긴 출력이 이 파일에 쌓입니다.
dira를 지우면 같이 사라집니다
감시 스크립트는 매분 인자로 받은 <엔진>/tick.sh가 있는지부터 봅니다. 이 파일이 없으면 dira가
지워졌다고 보고 다음을 정리합니다.
- 떠 있는
mcp_server.py를 내립니다. ~/.config/dira/run/mcp.json을 지웁니다.- crontab에서
mcp/keepalive.sh줄만 뺍니다. 다른 줄은 바이트 하나 바꾸지 않습니다. ~/.config/dira/mcp/를 토큰과 함께 지웁니다.
워커가 cron 줄을 거두는 기준도 같은 tick.sh라서, 워커가 멈추는 때에 MCP 서버도 같이 내려갑니다.
dira를 다시 설치하고 앱을 켜면 줄과 스크립트가 다시 들어갑니다. 토큰은 새로 만들어지므로 HTTP
설정을 다시 복사해 클라이언트에 넣으세요.
stdio는 cron과 상관없이 클라이언트가 필요할 때만 띄웁니다. 포트를 열어 두고 싶지 않다면 stdio로
붙이세요. 단 env_* 도구는 CLI의 dira env처럼 앱이 떠 있어야 값을 읽고 씁니다.
다음은 원격 큐입니다.