Slipdock CLI
slipdock 명령어는 사용자의 Slipdock 앱과 통신합니다 — app.slipdock.us에서 호스팅되거나, 사용자가 접속하는 주소로 자체 호스팅됩니다. 모든 쓰기 작업은 웹 UI에 실시간으로 표시됩니다. 전체 참조는 slipdock --help를 실행하세요.
어떤 서버. $SLIPDOCK_URL, 또는 ~/.config/slipdock/url (slipdock url <주소> 또는 서버 자체의 /install.sh로 기록됨), 또는 이 기기의 :4000번 테일넷 주소. 이 중 어느 것도 사용자가 의도한 보드가 아니라면 사용자에게 주소를 물어보세요 — 추측하지 마세요.
보드 에서 작업을 시작하려면 — 다음 작업을 선택하고, 에픽을 진행하고, 작업 중인 카드를 업데이트하려면 — 먼저 slipdock guide를 실행하세요 (서버의 에이전트용 지침: 에픽과 하위 카드, 다음 카드 선택 방법, 작성할 내용) 그리고 그 지침을 따르세요. 이 파일은 명령어 참조이며, 가이드는 워크플로우입니다.
Slipdock의 MCP 도구가 연결된 경우
이 세션에 이미 Slipdock 도구(list_boards, get_card, create_card, complete_card…, 서버의 /mcp에서 제공)가 있다면, 같은 작업에 CLI의 대안으로 사용할 수 있습니다: 있는 것을 사용하세요. get_guide는 slipdock guide가 출력하는 가이드의 짧은 형식을 반환하며, 다른 섹션의 이름으로 끝납니다; section: "automations" (또는 그 이름 중 하나, 또는 "all")로 하나를 가져옵니다. archive_card는 카드를 보관하고, restore: true는 복원합니다; archive_board는 보드에 대해 동일합니다. 이것들을 선호하세요: delete_card (confirm: true 필요), delete_list 및 delete_board (confirm은 보드의 코드)는 취소할 수 없습니다. create_list, create_tag 및 create_board는 구조를 추가합니다 (태그는 create_card/update_card가 카드에 추가하기 전에 존재해야 합니다). full: true와 함께 list_cards는 각각 get_card를 호출하는 대신 한 번의 호출로 모든 카드를 완전히 읽습니다 (댓글, 체크리스트, 문서). update_card는 의존성을 설정하고 체크리스트를 작업합니다. list_pages는 보드의 위키를 나열하고 (tree: true는 중첩하여 표시, page tree와 동일), read_page는 하나를 읽습니다. page_info는 page links, page sections, page wanted 및 page resolve가 무엇을 하는지 답변합니다 — write_page 섹션 편집 전에 헤딩 경로를 추측하는 대신 sections를 요청하세요. page_history는 page history이고 page diff (rev, 두 버전을 비교하려면 rev + against, 가장 최근 저장과 비교하려면 diff: true)이며, revert_page는 page revert입니다: 페이지의 현재 content_hash를 base_hash로 필요로 합니다. update_page는 page edit --title/--summary/--tag, page mv, page file, page rm/page restore (archived) 및 page pin --card (pin_card/unpin_card)입니다. upload_file은 최대 10MB 파일의 attach입니다 (content_base64 또는 text). 모델이 작성한 Base64는 약 1KB 이상에서 잘못됩니다 (#1040), 따라서 파일이 있는 셸에서는 보내지 마세요: slipdock attach 또는 card/page 및 link: true와 함께 upload_file (#1147)을 사용하면, 토큰이 필요 없고 10분 동안 유효한 일회용 upload_url을 반환하므로, curl -F file=@FILE -F sha256=<hex> <upload_url> (filename, replace, hide_on_card도 가능)에 사용하여 바이트를 모델 밖으로 유지할 수 있습니다. link: true와 함께 download_file은 반대 방향으로 동일합니다: curl -fsSo FILE <download_url>. 사용자의 동기화된 위키에 이미 있는 파일은 wiki_file로 서버에 의해 복사됩니다 (위키의 경로 또는 ID, 콘텐츠 없음). content_base64는 sha256 (base64 전 바이트의 16진수)을 포함해야 하며, sha256_mismatch 거부는 다시 인코딩하고 다시 보내는 것을 의미합니다. 응답의 sha256은 저장된 바이트의 해시이며, get_card/read_page는 모든 파일에 대해 이를 나열합니다: 파일을 다운로드하는 대신 소스의 해시와 비교하여 확인하세요. 수 KB를 초과하는 것은 약 4 KB 청크로 전송됩니다 (#1016), base64가 길수록 손상될 가능성이 높기 때문입니다: 첫 번째 청크는 append: true, card/page, filename 및 해당 청크의 sha256과 함께 upload_id를 반환합니다; 다음 각 청크는 upload_id, append: true, offset (마지막 응답의 received) 및 자체 sha256을 보내며, 거부된 청크는 단독으로 다시 전송됩니다; 그런 다음 upload_id, finish: true 및 전체 파일의 sha256으로 첨부 파일이 만들어집니다. 그 전에는 카드에 아무것도 표시되지 않습니다. 카드에 이미 있는 파일의 재빌드는 replace: true를 보냅니다 (단일 호출, 첫 번째 청크 또는 finish에서): 해당 파일 이름의 이전 파일은 새 파일이 저장되면 사라지므로, 하나의 현재 복사본만 남습니다. delete_attachment (detach; attachment id 및 confirm: true)는 잘못 업로드한 파일과 같은 것을 완전히 제거합니다. 그리고 download_file은 ID로 첨부 파일을 읽습니다 (get_card 및 read_page가 나열함). list_automations는 automations/automation (vocabulary: true는 automation-help 및 automation-presets가 제공하는 것을 추가함)이고, manage_automation은 new-automation (action: create), set-automation (update) 및 delete-automation (delete, confirm: true 포함)입니다. list_tools는 tools/tools show (각 Tool의 종류와 installed.board, 설치가 만든 보드; file과 함께 tools file; skill은 SKILL.md를 읽음; link: true는 파일, 스킬 zip 또는 스킬 tarball에 대한 일회용 download_url을 제공합니다, #1158; package: true, tools download), 그리고 install_tool은 tools install-board입니다. 도구가 다루지 않는 모든 것 (지금 규칙 실행, 콜백 및 알림, 스프린트, 10MB 초과 파일, 필드)은 여전히 CLI 또는 API를 사용합니다.
CLI가 여기에 설치되지 않은 경우
아래 모든 것은 JSON API의 래퍼이며, API가 폴백입니다: curl만 있으면 됩니다. 사용자에게 CLI를 설치하라고 말하지 마세요 (escript이며 Erlang이 필요함) — API를 사용하고, CLI는 사용자가 더 편리한 입력을 요청하거나 CLI만 수행하는 위키 동기화를 요청하는 경우에만 언급하세요. Windows에서는 PowerShell 한 줄로, 자체 서버에서: irm "$B/cli/install.ps1" | iex, 그런 다음 slipdock auth. 다른 곳에서는 리포지토리의 cli/에서 빌드합니다.
B="${SLIPDOCK_URL:-$(cat ~/.config/slipdock/url 2>/dev/null)}"
T="$(cat ~/.config/slipdock/token 2>/dev/null)"
H="Authorization: Bearer ${SLIPDOCK_TOKEN:-$T}"
curl -s "$B/api/guide" # 토큰 불필요; 전체 API, 각 호출에 curl 사용
curl -s -H "$H" "$B/api/me" # 토큰의 주인
GET /api/guide는 완전한 참조입니다 — 모든 엔드포인트와 각각에 대한 curl 라인, 그리고 토큰이 전달되면 사용자 자신의 보드와 리스트도 포함합니다. 이 파일에서 경로를 추론하는 대신 읽으세요.
로그인에도 CLI가 필요하지 않습니다. 동일한 장치 흐름, 두 번의 호출입니다 (가이드에 자세히 설명됨). 코드를 요청하고, 사용자에게 URL과 코드를 보여주고, 승인할 때까지 폴링한 다음, ~/.config/slipdock/token에 모드 600으로 토큰을 기록하여 다음 세션이 사용할 수 있게 합니다:
curl -s -X POST "$B/api/auth/device" -H 'content-type: application/json' \
-d '{"label":"claude on this machine","scope":"write"}'
# → user_code, verification_uri, device_code, interval
curl -s -X POST "$B/api/auth/device/token" -H 'content-type: application/json' \
-d '{"device_code":"…"}'
# → 400 authorization_pending until approved, then {"token":"…"}
이러한 스킬을 하나도 설치하지 않은 시스템에 설치하려면:
curl -fsSL "$B/install.sh" | sh (curl과 tar만 필요함); Windows에서는 PowerShell에서 irm "$B/install.ps1" | iex (%USERPROFILE%\.claude\skills에, WSL의 홈이 아님). 이 CLI를 실행할 수 없는 ChatGPT의 경우, slipdock skills chatgpt는 업로드할 zip으로 저장하며, 각각 명령어를 MCP 커넥터의 도구에 매핑합니다 ($B/api/skills/<이름>/chatgpt.zip).
로그인
API에는 토큰이 필요합니다. 명령어가 not signed in으로 실패하면, slipdock auth를 실행하세요 — 짧은 코드와 URL을 출력하고, 사용자는 이미 로그인한 브라우저에서 승인하며, 몇 초 후에 토큰을 받습니다. 코드와 URL을 사용자에게 알려주세요. 사용자가 직접 토큰을 만들도록 요청하지 마세요 (원하지 않는 한 slipdock auth <token>은 여전히 토큰을 받고, SLIPDOCK_TOKEN도 여전히 작동합니다).
slipdock whoami는 현재 사용자를 보여줍니다. 사용자가 액세스할 수 없는 보드는 단순히 나열되지 않습니다. forbidden 오류는 무언가를 볼 수는 있지만 변경할 수 없음을 의미합니다. 두 가지 거부는 사용자 대신 토큰을 지목하며, 보유한 토큰이 고장난 것이 아니라 의도적으로 제한되었음을 의미합니다 — 재시도 대신 그렇게 말하세요:
this API token is read-only— 읽기 전용 액세스만 부여되었습니다. 읽기/쓰기 토큰을 요청하세요.this API token's scope doesn't allow it— 특정 보드로 제한되거나, 관리자 토큰이 아니며 서버를 관리하려고 시도했습니다.
두 가지 더 거부도 최종적입니다. 이를 보고하고 사용자가 할 수 있는 일을 말하세요:
card_limit_reached(HTTP 402) — 보드 소유자의 계정이 허용된 모든 항목을 사용했습니다. 항목은 카드, 위키 페이지 또는 업로드된 파일입니다: 세 가지 모두 하나의 숫자에 포함되므로, 페이지로 작성해도 해결되지 않습니다. 다른 제목도 도움이 되지 않습니다. 영원히 동일하게 실패합니다. 완료된 항목을 보관할 것을 제안하세요.slipdock whoami --json및slipdock guide는 모두 남은 허용량을 알려주므로, 일괄 작업을 시작하기 전에 확인하여 중간에 벽을 발견하지 않도록 할 수 있습니다.board_limit_reached(HTTP 402) — 이 서버가 한 사람에게 허용하는 만큼의 보드를 소유하고 있습니다. 하위 보드(서브카드)는 이에 포함되지 않습니다. 보드를 보관하거나 관리자에게 문의할 것을 제안하세요.storage_limit_reached(HTTP 402) — 업로드된 파일이 허용된 공간을 채웠습니다. 첨부 파일을 삭제하는 것만이 공간을 확보합니다. 파일이 있는 카드를 보관해도 공간이 확보되지 않습니다.trial_expired(HTTP 402) — 무료 평가판이 만료되었습니다. 보드에 새로운 것을 추가할 수 없습니다. 이미 있는 모든 것은 여전히 읽고 편집할 수 있습니다. 당신이 할 수 있는 일은 없습니다: 사용자에게 구독이 필요하다고 말하고 중단하세요. 이 네 가지는 생성 이상에 영향을 미칩니다: 보관에서 복원,move --board를 통한 다른 사람의 보드로 이동 (카드와 그 아래 모든 것이 그들에게 포함됨), 가져오기, 그리고welcome.No account here uses that address…공유 시 — 이 서버는 공유 대상자를 위한 계정을 만들지 않습니다. 관리자가 초대해야 합니다.
사람들이 공유한 사람만 볼 수 있는 서버에서, 찾을 것으로 예상되는 사람을 찾을 수 없다면 아마 공유된 것이 없을 것입니다. 삭제된 것이 아니며, 무언가 공유될 때까지 카드를 그 사람에게 할당해도 작동하지 않습니다.
카드는 열 수 있는 사람에게만 할당될 수 있습니다. 담당자에 대한 user … not found는 정확히 그것을 의미하며, 계정이 있는지 여부와 관계없이 — 먼저 보드를 그 사람과 공유하세요 (브라우저에서 보드의 공유 설정), 또는 사용자에게 요청하세요.
워크플로우
- 먼저 보드와 구조를 찾으세요:
slipdock boards, 그런 다음slipdock board <board>또는slipdock columns <board>및slipdock tags <board>. 보드와 컬럼은 ID 또는 대소문자를 구분하지 않는 이름을 허용하므로,slipdock board "product launch"가 작동합니다. 모든 보드에는 또한 코드가 있습니다 — 짧은 이름: 고유하고, URL에 안전하며, 최대 10자, 보드 이름에서 가져오고 편집 가능합니다 ("QVM V1 Remediation"은qvm-v1-rem).slipdock boards의 CODE 열과--json의code필드에 있으며,<board>는 어디서나 이를 허용합니다:slipdock board qvm-v1-rem,slipdock add qvm-v1-rem "...". 이름보다 코드를 선호하세요 — 모호하지 않으며 이름 변경에도 유지됩니다 — 그리고 보드를 사용자에게 다시 지정할 때 사용하세요.slipdock new-board <name> [--code C]는 명시적으로 설정합니다. 생략하면 이름에서 생성됩니다. 보드에는 또한 단축키가 있습니다 — 웹 앱에서 보드로 이동하는 한두 문자 (b를 누른 다음 키).slipdock boards의 KEY 열과--json의shortcut필드이며,new-board또는set-board에서--shortcut K로 설정됩니다. 명령줄에서 보드를 지정하는 방법이 아닙니다. 코드가 그 역할을 합니다. - 쓰기 전에 읽으세요.
slipdock card <id>는 모든 것을 보여줍니다: 설명, 플래그, 태그, 체크리스트 항목 ID, 댓글. - 출력을 파싱해야 할 때
--json을 사용하세요 (ID, 필터링, 계산). 일반 출력은 사용자에게 보여주기 위한 것입니다. delete보다archive를 선호하세요. 삭제는 영구적입니다. 사용자가 명시적으로 삭제를 요청하지 않은 것은 삭제하기 전에 물어보세요. 전체 보드도 보관할 수 있습니다 (slipdock archive-board <board>), 이는 카드 보관과 동일하지 않으며 훨씬 더 당신의 업무와 거리가 있습니다: 사용자의 인덱스, 보드 전환기 및 빠른 추가에서 보드를 제거합니다. 사용자가 해당 보드를 이름으로 요청하지 않는 한 보드를 보관하거나 재정렬하지 마세요.- 진행 상황을 말하면서 진행하세요. 짧은 시간보다 오래 걸리는 작업은 각 마일스톤에서
slipdock comment <id> ...를 사용하고 — 마지막에 한 번에 작성하는 대신slipdock edit <id> --percent N도 사용하세요. 이동 이후 새 댓글이 없는 진행 중인 카드는 지켜보는 사람에게 버려진 것으로 읽힙니다. - ID를 사용자에게 보고하세요 (
#42) so they can find cards in the UI. 댓글이나 설명의@handle(이메일의 '@' 앞 부분)은 해당 사람에게 이메일을 보냅니다.