localcode는 여러 모델의 승인, 예약 실행, 멀티 에이전트 계획의 사전 검증을 지원합니다. 이 문서는 주요 기능과 사용 사례, 적용 조건을 정리합니다.
English · 한국어
14개 기능을 작업 실행과 클라이언트 사용으로 구분합니다. 작업 실행의 주요 기능은 다음 세 가지입니다.
나머지는 비용, 감사 가능성, 직접 호스팅하는 모델, 그리고 하나의 데몬 위에 붙는 여러 화면에 관한 것입니다.
오른쪽 열은 특정 제품이 아니라 일반적으로 쓰이는 코딩 에이전트들의 공통 기준선을 서술합니다. 읽는 방법은 전제와 한계를 보십시오.
| 기능 | localcode | 일반적인 경우 |
|---|---|---|
| 모델 간 교차 검증 | 리뷰어 3개까지, 각각 자기 모델 프로파일을 가진 별개의 에이전트로 자기 서브세션을 라운드 내내 유지, 전원 승인(불리언) 필요 | 같은 컨텍스트 안에서 모델이 자기 출력을 스스로 검토 |
| 예약 작업 | 자연어 예약, 시각은 localcode가 파싱, 놓친 시각은 놓쳤다고 보고 | 없음. 프롬프트는 보낸 시점에 실행됨 |
| 멀티 에이전트 계획 | 도구 스키마에 계획을 작성, 실행 전 전체 검증, 단계·턴·소요 시간에 상한 | 모델이 말로 서술하고 중간에 그만둘 수 있는 자유 형식 위임 |
| 다른 대화 참조 | #<이름>으로 모델이 다른 세션의 메시지를 읽음. 프롬프트에 붙이지 않고 신뢰도가 가장 낮은 도구 결과로 전달 | 세션 간 수동 복사·붙여넣기 |
| 프롬프트 감사 | /context가 조립된 모든 조각을 출처·신뢰 등급·토큰 추정치와 함께 보고. 모델 호출 없음 | 조립된 프롬프트를 볼 수 없음 |
| 모델이 실행하는 명령 | 기본 꺼짐. 켜면 지정된 내장 명령·커스텀 명령·스킬을 모델이 자기 턴으로 실행 | 명령은 사람만 입력 |
| 검색 결과의 완전성 표시 | 잘림, 읽지 못한 파일, 지나치게 긴 줄을 각각 결과에 명시 | 결과 상한에서 별도 안내 없이 잘림 |
| 엔드포인트별 동시성 | provider마다 max_concurrent_tasks, 데몬 전역 제한보다 먼저 적용 | 전역 동시성 숫자 하나, 또는 없음 |
| 페일오버 | Smart Agent를 켠 상태에서, 프로파일별 fallback 체인. 새 모델 계열에 맞게 요청을 다시 구성 | 같은 엔드포인트 재시도 후 실패 |
| 로컬 모델 | 두 철자의 reasoning 필드를 모두 읽음, 서버에서 컨텍스트 한도 조회, 계열별 동작 교정 | 범용 OpenAI 호환 인터페이스 사용 |
| 모델 전환 | 한 대화 안에서, provider를 가로질러 모델 변경. 호스팅 모델과 내 기계의 모델이 같은 대화의 두 지점 | 한 벤더의 목록에서 모델 선택 |
| 클라이언트 구조 | 데몬 하나에 화면 셋(터미널·브라우저·네이티브 창), 같은 세션에 동시에 여러 개 접속 가능 | 클라이언트마다 프로세스 하나 |
| 턴 이동 | Alt+방향키로 내가 보낸 턴 사이를 이동. 프롬프트 히스토리 호출과 별개 | 스크롤백 검색, 또는 스크롤 |
| workspace 경계 | 심볼릭 링크를 해석한 뒤 모든 경로를 판정. 프로젝트를 벗어나는지는 도구 권한과 별개의 질문 | 디렉터리 허용 목록 하나 |
| 대화 보관 | 이벤트 로그를 통째로 유지하고 새 작업만 거절하는 archive. 이름 변경·순서 변경·fork도 함께 | 삭제, 또는 끝없이 늘어나는 목록 |
Debate
Debate는 별도 리뷰어 에이전트에 검토를 배정합니다. 각 리뷰어는 설정된 모델과 독립된 컨텍스트를 사용합니다. 전원이 승인해야 작업이 완료됩니다.
모델 다양성이 필요하면 리뷰어별로 다른 모델을 지정해야 합니다. 같은 모델을 지정하는 설정도 허용됩니다.
/debate girl,tom 5 migrate the session store to the new event schema
girl과 tom. 각자 자기 모델로, 동시에 실행되며, 서로를 볼 수 없습니다.verify_command를 인자 없이 실행하는 것까지. 쓰기는 bash를 포함해 일절 없습니다.git diff HEAD, 없으면 도구 호출 목록.런타임 제어:
예약 작업
지원되는 시각 표현을 포함한 요청으로 작업을 예약할 수 있습니다. localcode가 시각을 해석하고 해당 시각에 실행합니다.
내일 아침 9시에 전체 테스트 돌리고 실패한 것만 정리해줘
나중에)과 길이가 정해지지 않은 반복(매달, 30초마다)은 추측하지 않고 각각 거절합니다. 분·시간·일·주 단위 반복(매일 9시, every day)은 종료 조건을 확인 문구에 밝히고 예약합니다.예약은 localcode가 실행 중일 때만 발동합니다. 꺼져 있는 동안 지나간 시각은 늦게 실행하지 않고 놓쳤다고 보고합니다. 요청이 시각에 대한 것이었기 때문입니다.
들어가는 길은 셋입니다. 프롬프트 창의 평범한 문장, 그 아래의 시계 버튼, 또는 /schedule 30분 뒤 run the tests. 터미널에서는 /show-scheduled-task가 같은 목록입니다.
Orchestrate
위임 도구는 다른 에이전트를 실행하지만, 모델이 서술한 검토 절차를 강제하지는 않습니다. Orchestrate는 절차를 구조화된 데이터로 받아 검증한 뒤 실행합니다.
Orchestrate는 계획을 데이터로 만듭니다. 모델이 도구의 입력 스키마를 채워 계획을 작성하므로, 실행에 토큰을 쓰기 전에 계획 전체가 검증됩니다.
| 실행 전에 검사되는 것 | 거절 범위 |
|---|---|
| 계획이 지명한 모든 에이전트를, 그 턴이 허용된 명단과 대조 | 계획 전체, 이유와 함께 |
| 모든 참조를, 실제로 앞서는 단계인지 대조 | 계획 전체, 이유와 함께 |
| 모든 개수를, 각각의 상한과 대조 | 계획 전체, 이유와 함께 |
keep이 지정된 필드가 false인 결과를 모두 버립니다. 이것이 발견 사항을 걸러내는 검증 필터이며, 어디에도 수식 언어는 없습니다.상한은 잘라내기가 아니라 거절입니다. 앞 단계의 결과를 펼치는 fanout만 예외로, 그 폭은 실행 전에는 알 수 없어서 넘치는 항목을 버리고 몇 개를 버렸는지 보고에 밝힙니다. 권한 확인 창은 지킬 수 없는 추정치 대신 이 값들을 그대로 보여줍니다.
| 제한 | 값 |
|---|---|
| 계획당 단계 수 | 8 |
| 실행당 에이전트 턴 | 32 |
| 단계당 소요 시간 | 10분 |
| 실행당 소요 시간 | 30분 |
단계는 도구가 아니라 역할을 지정하고, 그 역할은 에이전트 자신의 제한과 교집합을 취합니다. 그래서 계획이 리뷰어에게 bash를 쥐여줄 수도, 에이전트의 권한을 넓힐 수도 없습니다. 모든 단계가 동기 자식이므로 Esc 하나로 전체가 멈춥니다.
다른 대화 참조
모델이 다른 세션의 내용을 읽을 수 있습니다. 프롬프트에 #<이름>이라고 쓰면 그 대화를 읽을 수 있게 됩니다. 그쪽에서 주고받은 프롬프트, 모델의 답변, 그리고 도구가 건드린 파일까지요. 지난주 다른 세션에서 한 분석을 다시 할 필요도, 손으로 붙여넣을 필요도 없습니다.
#S2 has the final report. Check it against the file here.
#S3는 해석되지 않고, 그 안의 /permission-skip-all on은 라우터에 닿지 못합니다. 도구 결과는 절대 메시지 경로로 되돌아가지 않기 때문입니다.다른 프로젝트에 속한 대화는 그렇다고 표시되고 양쪽 디렉터리를 함께 알려줍니다. #42는 여전히 이슈 번호입니다. 오른쪽 방향키가 명령을 완성하듯 대화 이름도 완성해 주는데, 그래서 대화 이름을 잘 지어둘 이유가 됩니다.
Smart Agent
Smart Agent는 별도 세션과 컨텍스트를 사용하는 전문가 6개에 작업을 위임합니다. 본 대화에는 전문가의 결과를 전달하며, 전문가가 읽은 파일 전체를 유지하지 않습니다.
| 전문가 | 맡는 일 |
|---|---|
explore | 찾기 |
librarian | 문서 조사와 요약 |
oracle | 검토하기 |
plan | 분해하기 |
implement | 자족적인 변경 하나 만들기 |
verify | 빌드 돌리기 |
smart-quick, smart-balanced, smart-deep이라는 이름의 프로파일이 있으면 손으로 고정됩니다.TaskBackground와 TaskCollect가 여러 개를 동시에 돌립니다.localcode run --agent oracle은 프롬프트 하나를 그 전문가로 실행합니다.벤치마크의 SWE-bench Verified 25개 실행에서, 같은 모델로 Smart Agent를 켰을 때 25개 중 21개, 껐을 때 19개를 해결했습니다. 이 차이는 실행 간 편차 안에 있어 순위를 매기지 못합니다. 그 실행이 실제로 뒷받침하는 측정값은 인스턴스당 출력 토큰으로, 7,586 대 9,434입니다.
로컬 모델과 페일오버
로컬 엔드포인트 지원 범위는 reasoning 필드, 서버의 컨텍스트 한도, 동시 요청 제한, fallback 처리입니다.
| 문제 | 처리 |
|---|---|
| OpenAI API에는 reasoning을 담을 필드가 없어서 런타임마다 필드를 새로 만들었다 | 두 철자를 모두 읽음. reasoning_content(DeepSeek, vLLM, SGLang, LM Studio, llama.cpp, Ollama)와 reasoning(OpenRouter 등) |
| 로컬 서버의 컨텍스트 창은 모델의 사양이 아니라 실제로 로드된 값이다 | 서버에 물어봄. GET /v1/models, llama.cpp는 /props |
| 엔드포인트의 동시 요청 용량이 데몬의 전역 제한보다 작음 | provider별 max_concurrent_tasks 적용. 데몬 전역 슬롯보다 먼저 획득 |
| 요청 한도나 만료된 자격증명이 턴을 끝내버린다 | Smart Agent를 켠 상태에서: 실패한 엔드포인트에 두 번 재시도(1초, 2초) 후, 프로파일별 fallback 체인으로. 새 계열에 맞게 요청을 다시 구성 |
| 길이 초과로 거절된 요청이 턴을 끝내버린다 | 요약하고, 그래도 모자라면 잘라내며, 서버가 받아들일 때까지 줄임 |
401이나 없는 모델 id는 대기를 건너뜁니다. 시간이 해결해 주는 문제가 아니기 때문입니다. 형식이 잘못된 요청은 어디에도 재시도하지 않습니다.
대화 도중 모델 전환
에이전트는 프로파일을, 프로파일은 provider와 모델을 지정합니다. 에이전트를 바꾸면 모델이 바뀌고, 대화는 그대로 남습니다. 다음 메시지는 그때까지 오간 내용 전부를, 앞 모델이 한 답변까지 포함해서 들고 새 모델로 갑니다.
평범하지 않은 부분은 그 범위입니다. 한 대화 안의 에이전트들이 서로 다른 provider에 있을 수 있습니다. Bedrock의 Claude와 책상 밑 기계의 모델이 같은 map의 두 항목이고, 같은 대화의 두 지점입니다.
"agents": {
"general-purpose": { "profile": "smart-deep" }, // Bedrock을 통한 Claude
"on-the-laptop": { "profile": "local-qwen" } // localhost의 llama.cpp
}
/agent <이름>, /model <프로필>은 모델만 바꾸고 에이전트의 프롬프트·도구·권한은 그대로 두며, /model만 치면 이 대화가 답할 수 있는 것들을 나열합니다. Web UI는 헤더에 선택기가 있습니다.에이전트 전환은 시스템 프롬프트와 도구 스키마를 변경할 수 있습니다. 전환 후 첫 요청에서 provider 캐시를 새로 생성해야 할 수 있습니다.
모델 선택은 에이전트 선택과 분리되어 있습니다. /model <프로필>은 그 대화가 그 프로필의 모델로 답하게 하고, 에이전트의 프롬프트·도구·권한은 그대로 둡니다. 더 큰 모델로 답하게 하려고 앞의 에이전트와 프로필만 다른 에이전트를 하나 더 쓸 필요가 없습니다. 선택은 대화마다 에이전트별로 유지되고, fork에도 넘어가며, model.changed 이벤트로 알려져 다른 클라이언트도 따라갑니다. /model만 치면 지금 답하는 모델과 이 설정이 닿을 수 있는 프로파일을 보여주고, 터미널은 에이전트와 모델을 한 목록에서 고르게 합니다(/models와 /mo도 같은 명령). default는 선택을 에이전트에게 되돌립니다.
프롬프트 인벤토리
시스템 프롬프트는 등록된 자산으로 조립합니다. 각 자산은 고정 ID, 출처, 신뢰 등급, 요청 내 위치, 활성화 조건을 갖습니다.
/context 다음 턴이 보낼 것. 모델 호출 없음
/context all 빠진 것과 그 이유까지
/context <id> 특정 모델 호출이 무엇으로 만들어졌는지
같은 매니페스트 id가 트레이스에도 나타납니다. 그래서 실패한 모델의 프롬프트를 그대로 재사용한 페일오버는, 모델 계열이 바뀌었는데 매니페스트 id가 그대로인 형태로 드러납니다.
창이 얼마나 찼는지는 터미널 풋터가 따로 보여줍니다. 프롬프트 창 아래 줄이 모델 옆에 context: N%를 표시하고, 창의 70%에서 경고, 90%에서 심각 단계로 바뀝니다. 웹 UI에는 오래전부터 같은 표시가 있었고, 터미널은 그 재료인 usage 이벤트를 무시해서 표시가 없었습니다.
트레이스
Smart Agent가 켜져 있으면 일어난 일마다 JSON 한 줄이 ~/.localcode/trace/에 기록됩니다.
GET /api/trace로 새 이벤트를 조회합니다.model_invocable
v0.83.0에 들어갔고 기본은 꺼짐입니다. 켜면 모델이 내장 명령, 커스텀 명령, 스킬을 직접 실행할 수 있고, 각각 같은 대화 안에서 자기 턴으로 돕니다.
메일을 읽어라. 릴리즈 담당자에게서 온 것이 있으면 /tidy-context 를 실행해라.
model_commands에 슬래시를 붙여 이름을 적습니다.model_invocable: true로 스스로 참여합니다./permission-skip-all까지 들어가는 목록이므로, 파일에 이름을 적는 행위여야 합니다.모델은 자기가 읽은 것으로부터 명령을 실행할 시점을 판단합니다. 파일, 명령 출력, MCP 서버가 반환한 무엇이든 포함됩니다. 즉 목록에 있는 것은 모델이 쓰지 않은 텍스트로부터 도달 가능합니다. 스위치도, 목록도, 설정 창의 안내도 모두 그렇게 말합니다.
모든 세션은 데몬 하나가 들고 있습니다. 거기에 무엇을 붙일지는 선택이고, 같은 세션에 여러 개가 동시에 붙을 수 있습니다. 아래 스크린샷은 localcode 0.115.0의 실제 화면입니다. 본문의 서술은 0.122.0 기준으로 마지막 검증했습니다.
하나의 데몬, 세 가지 화면
| 화면 | 실행 방법 | 어울리는 상황 |
|---|---|---|
| 터미널 (TUI) | localcode | 이미 열린 터미널 안에서, SSH 너머에서, tmux 안에서 |
| 브라우저 | localcode 실행 후 listen 주소 열기 | 긴 출력 읽기, 드래그 앤 드롭 파일 첨부, 여러 작업 동시 관찰 |
| 네이티브 창 | -tags gui로 만든 빌드. macOS는 LocalCode.app, Windows는 MSI | localcode를 데스크톱 앱으로 쓰기. 실험적이며 Linux에는 없음 |
| 데몬만 | localcode --headless | 접속해서 쓰는 원격 머신 |
셋 다 모델이 쓴 마크다운을 그대로 보여주지 않고 렌더링합니다. 제목, 강조, 코드, 목록, 인용, 링크까지입니다. 터미널은 의존성을 들이는 대신 자체 렌더러로 하기 때문에 두 곳이 다릅니다. 터미널은 중첩 목록을 그리고 브라우저는 그리지 않으며, 브라우저는 표를 배치하고 터미널은 줄 그대로 통과시킵니다. 꾸밈은 답변을 그릴 때 입히고 저장할 때는 입히지 않습니다. 그래서 내보낸 대화와 세션 로그에는 모델이 쓴 마크다운만 남고 이스케이프 시퀀스는 들어가지 않습니다.
데몬이 HTTP로 화면을 제공하므로, 그 주소에 닿을 수 있는 다른 사람이 같은 세션을 그대로 엽니다. 같은 대화 내용, 같은 실행 중인 도구, 같은 권한 확인 창이 실시간으로 갱신됩니다. 내보내기도, 사본도 없습니다.
# localcode를 돌리는 머신에서
localcode --headless --listen 127.0.0.1:4096
# 상대방 머신에서
ssh -L 4096:127.0.0.1:4096 you@your-machine
# 그다음 http://127.0.0.1:4096 열기
같은 주소에 터미널을 하나 더 붙일 수도 있습니다. localcode --server http://127.0.0.1:4096은 누군가 브라우저로 보고 있는 세션에 TUI를 붙입니다.
listen 주소에 닿을 수 있는 사람은 셸 실행을 포함한 API 전체를 얻습니다. 위처럼 loopback에 바인딩하고 SSH 터널로 공유하십시오. 신뢰할 수 없는 네트워크에서 0.0.0.0에 바인딩하지 마십시오.
자동완성과 턴 이동
이름 일부를 입력하고 오른쪽 방향키를 누릅니다. 스킬, 커스텀 명령, 데몬 명령, 클라이언트 명령을 하나의 목록에서 완성합니다.
read the mail, then run /tid가 완성되고 양쪽 문장은 그대로 남습니다.internal/tui/co와 /Users/me/co는 무시됩니다.#<이름> 참조를 문장 안에 끼워 넣으며 완성합니다.위로 스크롤하면 모델이 아래에 아무리 써도 화면은 그 자리에 머뭅니다. 양쪽 클라이언트에서, 그리고 백그라운드 작업 자체의 창에서도 그렇습니다. 맨 아래로 다시 스크롤하면 최신 출력 따라가기가 재개됩니다.
이름 변경, 순서 변경, 보관, 복원
| 동작 | 하는 일 | 사용 가능한 곳 |
|---|---|---|
| 이름 변경 | 자동 생성된 id 대신 내가 지은 제목을 붙입니다. #<이름>이 해석하는 대상이 바로 이 제목이므로, 이름을 바꾸는 것은 그 대화를 다른 대화에서 인용할 만하게 만드는 일이기도 합니다. | 양쪽 클라이언트 (/rename) |
| 순서 변경 | 카드를 드래그해서 위아래로 옮깁니다. 순서는 데몬에 저장되므로 모든 클라이언트에서, 재시작 후에도 같은 순서입니다. | 브라우저, 데스크톱 창 |
| 보관 (archive) | 조용해진 대화를 목록에서 내립니다. 이벤트 로그를 포함해 갖고 있던 것은 전부 유지합니다. | 양쪽 클라이언트 (/archive) |
| 복원 (retrieve) | 한 번 눌러 되돌립니다. 번호가 아니라 순위를 복원하며, 어느 쪽인지 알려줍니다. | 양쪽 클라이언트 (/retrieve) |
| fork | 대화를 복사합니다. 같은 지점에서 다른 접근을 시도해 볼 수 있습니다. | 양쪽 클라이언트 (/fork) |
| 내보내기 (export) | 대화를 로그에서 Markdown 파일로 만듭니다. 보관된 대화도 열린 대화와 똑같이 내보낼 수 있습니다. 화면에 찍는 게 아니라 파일에 쓰고, 권한은 0600입니다. 4000자를 넘는 도구 출력은 자르고 자른 자리를 파일에 밝힙니다. | 양쪽 클라이언트 (/export) |
#<이름>으로 보관된 대화를 참조할 수 있습니다.workspace 경계
세션 자신의 workspace를 벗어나는 경로는 그 자체로 별개의 질문이며, 도구를 써도 되는지와 다릅니다. "이 에이전트가 파일을 읽어도 된다"에 예라고 답한 것이 "~/.ssh를 읽어도 된다"에 답한 것은 아닙니다.
경로 말고 목적지를 묶는 경계가 하나 더 있습니다. network.egress는 localcode 자신이 여는 연결을 묶습니다. 모델 provider, 원격 MCP 서버, 업데이트 확인이 대상입니다. 목록에는 호스트 이름과 *.base 형식을 적고, loopback은 항상 허용이라 적을 필요가 없습니다. 켜 달라고 하기 전에는 동작하지 않으므로 목록을 먼저 적어두고 시험해 본 뒤 믿고 쓸 수 있습니다. 셸 명령과 서브프로세스 MCP 서버는 소켓이 따로인 별개 프로세스라 이 바깥에 있고, 설정도 그렇게 밝히고 있습니다.
| 경우 | 처리 |
|---|---|
절대 경로, 또는 ..이 든 경로 | 해석한 뒤 세션의 workspace와 대조해 판정 |
workspace 안에서 ~/.aws를 가리키는 심볼릭 링크 | workspace 밖으로 판정. 해석된 물리 경로를 기준으로 접근 권한 결정 |
| 이제 막 생성될 파일 | 존재하기 전에, 그 링크가 어디로 이어지는지로 판정 |
| 해석할 수 없는 경로 | 권한 승인 필요 |
자격증명 파일: .env, *.pem, id_rsa, ~/.ssh, ~/.aws/credentials, .netrc | Smart Agent가 켜져 있으면 즉시 거절. deny 등급이라 어떤 skip으로도 열리지 않음. 같은 도구에 대한 config.json의 규칙은 이를 덮으며, .env를 반드시 편집해야 하는 프로젝트는 그렇게 말하면 됨 |
| workspace를 벗어나는 셸 명령 | 이 두 스위치의 적용 대상이 아니고, 대화상자가 그렇게 밝힘. 셸 명령은 경로가 아니며 bash는 자기 기준으로 따로 물음 |
read_file, grep, glob. 쓰기는 write_file, edit./read-outside mem-clear로 다시 잊게 할 수 있습니다./read-outside와 /write-outside가 같은 두 스위치를 조작합니다. /permission-skip-tools는 의도적으로 도구 확인만 건너뛰고 프로젝트를 벗어나는 경로는 계속 묻습니다.| 영역 | 다른 점 |
|---|---|
| 검색 결과 | 200개 상한, 1MB를 넘는 줄, 읽지 못한 파일을 각각 출력에 명시합니다. 개수가 아니라 경로를, 최대 세 개까지. Smart Agent가 켜져 있으면 한 파일이 grep 결과 200개 중 30개를 넘게 차지할 수 없습니다. |
| 라이프사이클 훅 | 도구 훅 외에 pre_model(요청 차단, 또는 모델이 찾을 수 없는 사실 주입), post_model, delegate(서브 에이전트 거절. 프롬프트로는 못 하는 일), compact, retry. 훅마다 "timeout"을 초 단위로 둘 수 있고(기본 30초), "fail_closed": true는 훅이 끝나지 못했을 때 — 제한을 넘겨 죽었거나 시작조차 못 했을 때 — 동작을 막습니다. 기본은 꺼짐입니다. 돌지 못하는 훅이 모든 것을 막으면 자기 도구를 쓰다가 잠기는 쪽이 더 흔한 사고이기 때문입니다. 실행은 됐는데 0이 아닌 값으로 끝난 훅은 결정을 내린 것이므로 fail_closed의 대상이 아닙니다. |
| 세션별 workspace | 데몬 하나에서 두 프로젝트의 두 세션. 자기 세션의 턴만 자기 전환을 막습니다. /workspace가 디렉터리를 보여주고 옮깁니다. 옮기기는 /clear·/rewind와 마찬가지로 턴이 돌고 있지 않을 때만 일어나고, 다른 클라이언트의 버튼도 workspace.changed 이벤트로 따라 움직입니다. |
| 리뷰 | /review가 바뀐 부분을 읽고 무엇이 문제인지 말합니다. 기본은 커밋되지 않은 diff, 또는 staged·head·리비전·범위·경로 지정. 고치는 일은 없습니다. 같은 이름의 커스텀 명령이 있으면 그쪽이 이깁니다. 내장 명령이 생기기 전부터 사람들의 .localcode/commands에 그 이름이 있었기 때문입니다. |
| 상태와 디버그 | /status가 붙어 있는 것들을 보고합니다. 모든 MCP 서버의 연결·고장 여부와 마지막 오류, 그리고 스킬·커스텀 명령·에이전트·workspace입니다. /debug는 버전·플랫폼·세션·에이전트·모델·effort·workspace·설정을 버그 보고에 붙여 넣기 좋게 한 덩어리로 찍습니다. 둘 다 데몬이 답하므로 양쪽 클라이언트가 같은 답을 읽습니다. |
| MCP 서버 | /mcps가 모든 서버를, 연결 상태와 이 대화의 사용 여부와 함께 보여줍니다. /mcps off <서버>는 그 서버의 도구를 여기서 나가는 다음 요청에서 뺍니다. 서버는 연결된 채로 둡니다. 다른 대화가 쓰고 있을 수 있고, 다시 연결하는 쪽이 비싼 작업이기 때문입니다. |
| 사용량 | /usage는 이 대화의 사용량을 답합니다. /usage all|today|week|month는 묻는 시점에 로그를 읽어 모든 대화를 셉니다. 보관된 대화까지 포함합니다. 나중에 되돌린 턴도 비용이 들었던 건 사실이므로 그대로 셉니다. |
| 샘플링 | temperature, top_p, top_k는 프로파일에 있습니다. muse의 vLLM 레시피가 temperature 1.0과 함께 셋을 함께 지정하기 때문입니다. top_k는 OpenAI 호환 엔드포인트에서는 vLLM 확장이라 설정했을 때만 보내고, Bedrock에서는 additionalModelRequestFields로 갑니다. 둘 다 Claude 모델이 추론 중일 때는 빠지고, 범위를 벗어난 값은 턴 중간이 아니라 로드 시점에 거절됩니다. |
| Effort | off, low, medium, high, xhigh를 프로파일별로, 또는 대화별로 그리고 그 안에서 모델별로. 해당 모델이 구분하는 레벨만 제시합니다. 설정하지 않으면 아무것도 보내지 않으므로, 손대지 않은 환경의 요청은 바이트까지 그대로입니다. |
| 진행 중 지시 | 턴이 도는 동안 입력한 메시지가 모델의 다음 도구 호출 지점에서 그 턴에 전달됩니다. 입력한 순서대로입니다. |
| 거의 맞는 도구 이름 | 장식이 붙었지만 그 에이전트가 실제로 가진 도구 하나를 명확히 가리키는 이름은 실행하고 어느 철자가 맞았는지 알려줍니다. 해석은 그 에이전트에게 제공된 도구 안에서만 이루어지므로, 오타가 tools 제한을 넘어설 수 없습니다. |
| 모델별 습성 | 모델 id를 기준으로 적용합니다. 작업 중간에 멈추는 muse 계열에는 계속하라는 신호를, Gemma에는 LaTeX 대신 문자를 그대로 쓰라는 안내를. 그래도 들어온 LaTeX는 웹 UI가 모델과 무관하게 벗겨냅니다. |
| 환경변수 설정 | config.json의 모든 문자열이 {env:NAME} 또는 {env:NAME:-fallback}일 수 있습니다. 없는 변수는 그 변수와 요구한 필드를 지목하는 오류이지, 나중에 401로 실패하는 빈 문자열이 아닙니다. |
| 이벤트 전달 | 뒤처진 클라이언트를 조용히 건너뛰지 않고 그 사실을 알려줍니다. 스트림이 끝나고, 다시 연결해, 놓친 부분을 세션 로그에서 재생합니다. 빠짐도 중복도 없습니다. |
| Linux 설치 | root 없이. 정적 바이너리를 ~/.local/bin에 두고 $HOME 밖에는 아무것도 쓰지 않습니다. root를 쓸 수 있으면 .deb와 이식 가능한 tarball도 있습니다. |
다음은 의도적으로 다른 도구들과 같게 둔 것입니다. 위의 표들이 기능 개수 자랑이 아니라 차이로 읽히려면 이 목록이 있어야 합니다.
/rewind와 /clear는 의도적으로 Claude Code의 범위를 따릅니다.@path 임포트가 되는 AGENTS.md와 CLAUDE.md 폴백. ~/.claude/CLAUDE.md도 적용되므로 기존 설정을 대체하지 않고 재사용합니다.localcode mcp import-claude가 기존 Claude Code 설정을 가져옵니다.pre_tool_use, post_tool_use, user_prompt_submit, stop, session_start.