온오퍼 사내 가이드 · Claude Code
기존 OMC 하네스를 걷어내고 ECC 하네스를 설치한 다음, 터미널 하단에 남은 5시간/주간 사용 한도가 항상 보이도록 상태표시줄을 붙입니다. 맥 사용자 기준이며, 개발 지식이 없어도 따라 할 수 있습니다.
가장 쉬운 방법 — Claude에게 시키기
터미널에서 claude 를 실행한 뒤, 아래 문장을 대화창에 그대로 붙여넣고 엔터만 치면 됩니다.
Claude가 이 페이지를 읽고 백업부터 검증까지 알아서 수행합니다.
도메인 허용 창이 한 번 뜹니다. Claude가 페이지를 읽으려면 웹 접근 권한이 필요해서,
ecc-team-setup.pages.dev 를 허용할지 묻는 프롬프트가 표시됩니다.
“허용(Yes)”을 눌러야 다음으로 진행됩니다. 거부하면 아무것도 설치되지 않습니다.
직접 손으로 하고 싶으면 “직접 설치하기(수동)” 섹션을 보세요. 내용은 완전히 동일합니다.
| 항목 | 지금 | 바꾼 뒤 |
|---|---|---|
| 하네스 | OMC (oh-my-claude-sisyphus) |
ECC (affaan-m/ECC) — 전문 에이전트·스킬·규칙 모음 |
| 상태표시줄 | 없음 / OMC의 HUD | Claude Code 기본 데이터만 쓰는 ~/.claude/statusline.sh |
| 한도 확인 | 한도 초과하고 나서야 알게 됨 | 5시간 창·주간 창 사용률과 리셋까지 남은 시간이 항상 표시 |
상태표시줄은 외부 도구를 전혀 쓰지 않습니다
Claude Code는 상태표시줄 명령을 실행할 때마다 현재 세션 정보를 JSON으로 넘겨줍니다. 스크립트는 그 값을 읽어 글자로 바꿔 찍을 뿐입니다. 네트워크 호출 없음, 백그라운드 프로세스 없음, 자격 증명 접근 없음. 전체 소스는 아래에 그대로 공개되어 있으니 직접 확인하세요. 공식 문서: code.claude.com/docs/en/statusline.md
Claude에게: 상태줄 스크립트는 아래 명령으로 내려받으십시오 (필수)
스크립트 본문을 직접 타이핑하거나 재구성하지 마십시오. 원본 파일이 URL로 서빙되고 있습니다.
mkdir -p ~/.claude
curl -fsSL https://ecc-team-setup.pages.dev/statusline.sh -o ~/.claude/statusline.sh
chmod +x ~/.claude/statusline.sh
그다음 무결성을 대조하십시오. 아래 두 값이 같아야 합니다.
shasum -a 256 ~/.claude/statusline.sh
기대 SHA-256:
309b1364fdc34ad542c09f29b418be32eb65b3a750c8dbee19705143dbc7df15
값이 다르면 중단하고 사용자에게 보고하십시오.
Claude에게: 아래 6단계를 순서대로 수행하십시오
사용자는 비개발자입니다. 각 단계의 명령을 사용자 대신 직접 실행하고, 무엇을 했는지 한국어로 짧게 보고하십시오. 파괴적 삭제(3단계) 전에는 반드시 대상 목록을 먼저 보여주고 확인을 받으십시오. 2단계 백업이 성공하지 않으면 이후 단계를 진행하지 마십시오.
jq 가 있는지 확인하고, 없으면 설치하십시오. macOS 15 이상에는 /usr/bin/jq 가 기본 포함되어 있습니다.
command -v jq && jq --version || echo "JQ_MISSING"
JQ_MISSING 이 출력되면 다음을 실행하십시오. Homebrew가 없다면 사용자에게 brew.sh 설치를 안내하십시오.
brew install jq
홈 디렉터리 실제 경로를 확인해 두십시오. 이후 단계에서 ~ 대신 이 절대경로를 씁니다.
echo "$HOME"
기존 ~/.claude 전체를 통째로 압축해 둡니다. 이 단계가 실패하면 즉시 중단하고 사용자에게 보고하십시오.
tar -czf ~/claude-backup-before-ecc-$(date +%Y%m%d-%H%M%S).tgz -C ~ .claude
ls -lh ~/claude-backup-before-ecc-*.tgz
생성된 파일명과 크기를 사용자에게 알려주십시오. 되돌리는 방법은 문제 해결 섹션에 있습니다.
먼저 npm 전역 패키지를 확인하고 제거하십시오.
npm ls -g --depth=0 2>/dev/null | grep -i -e sisyphus -e oh-my-claude || echo "설치되어 있지 않음"
npm uninstall -g oh-my-claude-sisyphus
다음으로 ~/.claude 안의 OMC 잔재를 확인하십시오. 먼저 목록만 출력하고, 사용자에게 보여준 뒤 삭제하십시오.
ls -d ~/.claude/hud ~/.claude/.omc* 2>/dev/null
grep -rIl -e 'oh-my-claude' -e 'sisyphus' -e 'omc-' \
~/.claude/agents ~/.claude/skills ~/.claude/commands ~/.claude/hooks 2>/dev/null
삭제 금지 목록 — 반드시 보존
OMC와 무관한 스킬·에이전트는 절대 지우지 마십시오. 특히 다음은 계속 쓰는 것들입니다:
cloudflare, wrangler, workers-*, durable-objects, sandbox-sdk, agents-sdk, turnstile-*, web-perfremotion-* 전체, mediabunnyui-ux-pro-max 계열, dataviz, artifact-*파일 안에 OMC 문자열이 없다면 삭제 대상이 아닙니다. 확신이 서지 않으면 지우지 말고 사용자에게 물으십시오.
확인된 OMC 전용 디렉터리를 삭제하십시오.
rm -rf ~/.claude/hud
rm -rf ~/.claude/.omc ~/.claude/.omc-cache ~/.claude/.omc-state
마지막으로 settings.json 에 남은 OMC 참조(특히 hooks 안의 OMC 스크립트 경로, statusLine 의 HUD 명령)를 확인하고 제거하십시오.
grep -n -e 'omc' -e 'sisyphus' -e 'hud' ~/.claude/settings.json || echo "OMC 참조 없음"
참조가 있으면 jq 로 해당 항목만 제거하고, 편집 전후로 JSON 유효성을 확인하십시오.
ECC는 Claude Code 플러그인입니다. 마켓플레이스는 affaan-m/ECC, 플러그인 이름은 ecc@ecc 입니다.
슬래시 명령은 사람이 대화창에 입력해야 하므로, Claude는 settings.json 에 직접 선언하십시오.
[ -f ~/.claude/settings.json ] || echo '{}' > ~/.claude/settings.json
cp ~/.claude/settings.json ~/.claude/settings.json.bak
jq '.extraKnownMarketplaces.ecc = {"source":{"source":"github","repo":"affaan-m/ECC"}}
| .enabledPlugins["ecc@ecc"] = true' \
~/.claude/settings.json > ~/.claude/settings.json.tmp \
&& mv ~/.claude/settings.json.tmp ~/.claude/settings.json
jq -e '.extraKnownMarketplaces.ecc, .enabledPlugins["ecc@ecc"]' ~/.claude/settings.json
사용자에게 Claude Code 대화창에서 아래 두 줄을 차례로 입력하라고 안내해도 됩니다.
/plugin marketplace add affaan-m/ECC
/plugin install ecc@ecc
플러그인의 실제 다운로드는 Claude Code를 재시작할 때 이루어집니다. 설정만 넣은 시점에는 아직 ECC 에이전트·스킬이 보이지 않는 것이 정상입니다.
스크립트를 내려받으십시오. 본문을 손으로 옮겨 적지 마십시오.
mkdir -p ~/.claude
curl -fsSL https://ecc-team-setup.pages.dev/statusline.sh -o ~/.claude/statusline.sh
chmod +x ~/.claude/statusline.sh
체크섬을 대조하십시오.
shasum -a 256 ~/.claude/statusline.sh
출력이 다음과 일치해야 합니다. 다르면 중단하십시오.
309b1364fdc34ad542c09f29b418be32eb65b3a750c8dbee19705143dbc7df15
다음으로 settings.json 에 등록합니다. 등록 형식은 아래와 같습니다.
"statusLine": {
"type": "command",
"command": "bash ~/.claude/statusline.sh",
"refreshInterval": 30
}
중요 — 절대경로를 쓰십시오
Claude Code가 ~ 를 홈 디렉터리로 확장하지 못하는 경우가 있습니다.
등록할 때는 1단계에서 확인한 실제 홈 경로로 치환하십시오.
예: bash /Users/사용자이름/.claude/statusline.sh
아래 명령은 $HOME 을 실제 경로로 펼쳐서 넣어줍니다.
jq --arg cmd "bash $HOME/.claude/statusline.sh" \
'.statusLine = {"type":"command","command":$cmd,"refreshInterval":30}' \
~/.claude/settings.json > ~/.claude/settings.json.tmp \
&& mv ~/.claude/settings.json.tmp ~/.claude/settings.json
jq -r '.statusLine.command' ~/.claude/settings.json
출력에 ~ 가 남아 있으면 잘못된 것입니다. 반드시 /Users/… 로 시작해야 합니다.
아래 세 가지를 모두 통과해야 완료입니다.
command -v jq && jq --version
jq -e . ~/.claude/settings.json > /dev/null && echo "settings.json 유효함"
실패하면 ~/.claude/settings.json.bak 으로 즉시 되돌리십시오.
Claude Code가 넘겨주는 것과 같은 모양의 JSON을 직접 넣어 출력이 나오는지 확인합니다.
printf '{"workspace":{"current_dir":"/Users/me/imac"},"model":{"display_name":"Opus 5"},"context_window":{"used_percentage":23},"cost":{"total_cost_usd":14.74},"rate_limits":{"five_hour":{"used_percentage":31,"resets_at":%s},"seven_day":{"used_percentage":9,"resets_at":%s}}}' \
$(( $(date +%s) + 9900 )) $(( $(date +%s) + 435600 )) \
| bash ~/.claude/statusline.sh; echo
다음과 같이 나와야 합니다(색상 포함).
Opus 5 │ 5h 31% 2h45m │ 주 9% 5d │ ctx 23% │ $14.74 │ imac
한도 값이 없는 경우도 확인하십시오. 5h — 와 주 — 가 나오면 정상입니다.
echo '{}' | bash ~/.claude/statusline.sh; echo
검증이 끝나면 사용자에게 다음을 반드시 알려주십시오.
5h —, 주 — 로 보입니다. 고장이 아닙니다. 첫 답변을 한 번 받고 나면 숫자가 채워집니다.~/claude-backup-before-ecc-…tgz)을 알려주고, 문제가 생기면 이 파일로 되돌릴 수 있다고 안내하십시오.Claude에게 맡기지 않고 손으로 하려면 아래를 순서대로 터미널에 복사·붙여넣기 하세요.
(맥에서 터미널 열기: Command + Space → “터미널” 입력 → 엔터)
tar -czf ~/claude-backup-before-ecc-$(date +%Y%m%d-%H%M%S).tgz -C ~ .claude
ls -lh ~/claude-backup-before-ecc-*.tgz
파일 목록이 하나 뜨면 성공입니다. 안 뜨면 여기서 멈추세요.
npm uninstall -g oh-my-claude-sisyphus
rm -rf ~/.claude/hud ~/.claude/.omc ~/.claude/.omc-cache ~/.claude/.omc-state
그 다음, 남아 있는 OMC 관련 파일이 있는지 확인합니다. 결과가 나와도 바로 지우지 말고, Cloudflare·Remotion·Workers 등 다른 도구의 파일이 섞여 있지 않은지 눈으로 확인하세요.
grep -rIl -e 'oh-my-claude' -e 'sisyphus' \
~/.claude/agents ~/.claude/skills ~/.claude/commands ~/.claude/hooks 2>/dev/null
터미널에서 claude 를 실행한 뒤, Claude Code 대화창에 아래 두 줄을 한 줄씩 입력합니다.
/plugin marketplace add affaan-m/ECC
/plugin install ecc@ecc
설정 파일에 직접 넣고 싶다면 ~/.claude/settings.json 에 다음 두 항목을 추가해도 됩니다.
{
"extraKnownMarketplaces": {
"ecc": { "source": { "source": "github", "repo": "affaan-m/ECC" } }
},
"enabledPlugins": {
"ecc@ecc": true
}
}
어느 쪽이든 Claude Code를 재시작해야 실제로 내려받아집니다.
command -v jq || brew install jq
macOS 15에는 /usr/bin/jq 가 기본으로 들어 있어 대부분 그냥 통과합니다.
복사·붙여넣기 대신 아래 세 줄을 그대로 터미널에 넣으세요. 오타가 날 여지가 없습니다.
mkdir -p ~/.claude
curl -fsSL https://ecc-team-setup.pages.dev/statusline.sh -o ~/.claude/statusline.sh
chmod +x ~/.claude/statusline.sh
제대로 받아졌는지 체크섬으로 확인합니다.
shasum -a 256 ~/.claude/statusline.sh
아래와 똑같은 값이 나와야 합니다. 다르면 설치를 멈추고 다시 받으세요.
309b1364fdc34ad542c09f29b418be32eb65b3a750c8dbee19705143dbc7df15
내용을 직접 눈으로 보고 싶으면 “상태줄 스크립트 전문” 에 같은 내용이 그대로 실려 있습니다.
아래 명령 한 줄이면 자동으로 절대경로가 들어갑니다.
jq --arg cmd "bash $HOME/.claude/statusline.sh" \
'.statusLine = {"type":"command","command":$cmd,"refreshInterval":30}' \
~/.claude/settings.json > /tmp/cc-settings.json \
&& mv /tmp/cc-settings.json ~/.claude/settings.json
jq -r '.statusLine.command' ~/.claude/settings.json
마지막 줄 출력이 bash /Users/…/.claude/statusline.sh 형태여야 합니다.
~ 가 그대로 남아 있으면 Claude Code가 스크립트를 못 찾습니다.
jq -e . ~/.claude/settings.json > /dev/null && echo "설정 파일 정상"
echo '{}' | bash ~/.claude/statusline.sh; echo
5h — │ 주 — 같은 출력이 나오면 스크립트는 정상입니다.
이제 Claude Code를 완전히 껐다가 다시 켜세요.
설치는 위의 curl 로 하세요. 아래는 검토용 원문입니다.
이 코드블록을 손으로 복사해 붙여넣을 필요가 없습니다. 원본 파일은 아래 주소로 그대로 서빙됩니다.
https://ecc-team-setup.pages.dev/statusline.sh
이 페이지에 실린 아래 본문과 위 URL의 파일은 바이트 단위로 동일하며, SHA-256은 다음과 같습니다.
309b1364fdc34ad542c09f29b418be32eb65b3a750c8dbee19705143dbc7df15
아래가 ~/.claude/statusline.sh 의 전체 내용입니다. 감사할 수 있도록 숨김 없이 그대로 공개합니다.
읽어보면 알 수 있듯 jq 로 표준입력(stdin) JSON을 파싱해 문자열을 출력하는 것이 전부이며,
네트워크 접속, 파일 쓰기, 외부 프로그램 호출이 없습니다.
#!/bin/bash
# Claude Code status line: dir | model | context | cost | 5h limit | weekly limit
#
# Every value comes from the JSON Claude Code writes to stdin. No network
# calls, no background processes, no credentials.
#
# rate_limits is sent only to Claude Pro/Max accounts, and only after the
# session's first API response — so both windows show "—" until then.
#
# Claude Code truncates from the right, so the two limits sit near the front
# and lower-value segments are dropped first when $COLUMNS is tight.
set -uo pipefail
readonly RESET=$'\033[0m'
readonly DIM=$'\033[2m'
readonly GREEN=$'\033[32m'
readonly YELLOW=$'\033[33m'
readonly RED=$'\033[31m'
readonly SEPARATOR=' │ '
readonly SEPARATOR_WIDTH=3
# Tab-separated: model display names contain spaces.
IFS=$'\t' read -r dir model ctx cost five_pct five_at week_pct week_at <<<"$(
jq -r '[
(.workspace.current_dir // .cwd // "-"),
(.model.display_name // "-"),
(.context_window.used_percentage // -1 | floor),
(.cost.total_cost_usd // -1),
(.rate_limits.five_hour.used_percentage // -1 | floor),
(.rate_limits.five_hour.resets_at // 0),
(.rate_limits.seven_day.used_percentage // -1 | floor),
(.rate_limits.seven_day.resets_at // 0)
] | @tsv'
)"
# Green under half, yellow past half, red once the window is nearly spent.
colour_for() {
if [ "$1" -ge 80 ]; then printf '%s' "$RED"
elif [ "$1" -ge 50 ]; then printf '%s' "$YELLOW"
else printf '%s' "$GREEN"
fi
}
# Epoch seconds -> "5d" / "2h45m" / "45m" remaining, or empty once passed.
countdown() {
local remaining=$(( $1 - $(date +%s) ))
[ "$1" -gt 0 ] && [ "$remaining" -gt 0 ] || return
if [ "$remaining" -ge 86400 ]; then printf '%dd' "$((remaining / 86400))"
elif [ "$remaining" -ge 3600 ]; then printf '%dh%dm' "$((remaining / 3600))" "$(((remaining % 3600) / 60))"
else printf '%dm' "$((remaining / 60))"
fi
}
# Segments are collected as three parallel arrays: what to print, how wide it
# actually renders (ANSI codes take no columns), and how readily it can go.
# Lower keep_rank is dropped first.
rendered=() widths=() ranks=()
add_segment() {
rendered+=("$1"); widths+=("$2"); ranks+=("$3")
}
# The limits lead the line: rank 9 keeps them off the chopping block, and the
# slot stays visible even when Claude Code omits the numbers, so a missing
# value reads as "unknown" rather than "fine".
# label_width is passed in because CJK labels render two columns wide while
# ${#label} counts one, and the em dash is likewise two.
add_limit() {
local label=$1 label_width=$2 percent=$3 reset_at=$4
if [ "$percent" -lt 0 ] 2>/dev/null; then
add_segment "${DIM}${label} —${RESET}" "$(( label_width + 3 ))" 9
return
fi
local left text width
left=$(countdown "$reset_at")
text="${label} $(colour_for "$percent")${percent}%${RESET}"
width=$(( label_width + 2 + ${#percent} ))
if [ -n "$left" ]; then
text="${text} ${DIM}${left}${RESET}"
width=$(( width + 1 + ${#left} ))
fi
add_segment "$text" "$width" 9
}
[ "$model" != "-" ] && add_segment "$model" "${#model}" 4
add_limit "5h" 2 "$five_pct" "$five_at"
add_limit "주" 2 "$week_pct" "$week_at"
if [ "$ctx" -ge 0 ] 2>/dev/null; then
add_segment "$(colour_for "$ctx")ctx ${ctx}%${RESET}" "$(( 5 + ${#ctx} ))" 3
fi
case "$cost" in
-1|"") ;;
*)
cost_text=$(printf '$%.2f' "$cost" 2>/dev/null || printf '$0.00')
add_segment "${DIM}${cost_text}${RESET}" "${#cost_text}" 1
;;
esac
[ "$dir" != "-" ] && { name=$(basename "$dir"); add_segment "${DIM}${name}${RESET}" "${#name}" 2; }
# Drop the least useful segments until the line fits the terminal. COLUMNS is
# exported by Claude Code (v2.1.153+); assume a roomy default when it is not.
readonly TERMINAL_WIDTH=${COLUMNS:-200}
keep=()
for i in "${!rendered[@]}"; do keep+=(1); done
line_width() {
local total=0 shown=0 i
for i in "${!rendered[@]}"; do
[ "${keep[$i]}" -eq 1 ] || continue
total=$(( total + widths[i] ))
shown=$(( shown + 1 ))
done
[ "$shown" -gt 1 ] && total=$(( total + (shown - 1) * SEPARATOR_WIDTH ))
printf '%d' "$total"
}
for rank in 1 2 3 4; do
[ "$(line_width)" -le "$TERMINAL_WIDTH" ] && break
for i in "${!rendered[@]}"; do
if [ "${ranks[$i]}" -eq "$rank" ]; then keep[$i]=0; fi
done
done
output=""
for i in "${!rendered[@]}"; do
[ "${keep[$i]}" -eq 1 ] || continue
[ -n "$output" ] && output+="$SEPARATOR"
output+="${rendered[$i]}"
done
printf '%s' "$output"
Claude Code는 상태표시줄 명령을 실행할 때마다 세션 정보를 JSON으로 표준입력에 넣어줍니다. 그중 한도 관련 필드는 다음 네 가지입니다.
| 필드 | 의미 |
|---|---|
rate_limits.five_hour.used_percentage | 5시간 창 사용률(%) |
rate_limits.five_hour.resets_at | 5시간 창 리셋 시각 (epoch 초) |
rate_limits.seven_day.used_percentage | 주간(7일) 창 사용률(%) |
rate_limits.seven_day.resets_at | 주간 창 리셋 시각 (epoch 초) |
공식 문서: https://code.claude.com/docs/en/statusline.md
꼭 알아둘 것 — 처음엔 — 로 보입니다
rate_limits 는 Claude Pro / Max 구독자에게만, 그리고 그 세션의 첫 API 응답 이후에만 전달됩니다.
그래서 Claude Code를 막 켰을 때는 5h — 주 — 로 보이는 것이 정상 동작입니다.
Claude에게 아무 질문이나 하나 던져서 첫 답변을 받으면 그때부터 숫자가 채워집니다.
이걸 고장으로 오해하지 마세요.
스크립트는 값이 없을 때 칸을 아예 숨기지 않고 — 로 남겨둡니다.
“값을 모른다”와 “여유가 있다”를 혼동하지 않기 위해서입니다.
터미널 입력줄 바로 아래에 이런 한 줄이 생깁니다.
모델명 다음에 5시간 한도와 주간 한도가 바로 붙어 줄 앞쪽을 차지하고, 참고용 정보일수록 뒤로 갑니다. 왼쪽부터 순서대로 읽으면 됩니다.
| 표시 | 뜻 |
|---|---|
Opus 5 | 현재 사용 중인 모델 |
5h 31% 2h45m | 5시간 한도의 31%를 썼고, 2시간 45분 뒤 초기화됨 |
주 9% 5d | 주간 한도의 9%를 썼고, 5일 뒤 초기화됨 |
ctx 23% | 이 대화가 쓴 컨텍스트 비율. 높아지면 대화를 새로 시작하는 게 좋습니다 |
$14.74 | 실제 청구액이 아닙니다. 이번 세션 토큰을 API 요금으로 환산한 참고 추정치 (아래 설명 참조) |
imac | 지금 작업 중인 폴더 이름 |
$14.74 같은 금액은 무엇인가요 — 실제 청구액이 아닙니다오해하기 쉬운 부분이라 짚고 갑니다
이 금액은 지금 이 세션에서 주고받은 토큰을 API 요금으로 환산한 클라이언트 측 추정치입니다. 공식 문서 표현 그대로 옮기면 이렇습니다.
“Estimated session cost in USD, computed client-side. May differ from your actual bill.”
/clear 로 새 세션을 시작하면 $0으로 리셋됩니다. 누적 청구서가 아니라 세션 단위 카운터입니다.| 사용률 | 색 | 뜻 |
|---|---|---|
| 50% 미만 | ■ 초록 | 여유 있음 |
| 50% ~ 79% | ■ 노랑 | 절반 넘게 씀 — 페이스 조절 |
| 80% 이상 | ■ 빨강 | 거의 다 씀 — 곧 막힐 수 있음 |
같은 규칙이 컨텍스트(ctx) 표시에도 적용됩니다. 예를 들어 한도를 많이 쓴 상태는 이렇게 보입니다.
남은 시간 표기는 남은 길이에 따라 5d / 2h45m / 42m 형태로 바뀌고, 이미 지난 경우에는 표시되지 않습니다.
Claude Code는 상태줄 스크립트를 실행할 때 COLUMNS 환경변수로 현재 터미널 폭을 넘겨줍니다
(Claude Code v2.1.153 이상). 스크립트가 이 값을 읽어서, 한 줄이 폭에 안 맞으면
덜 중요한 항목부터 자동으로 뺍니다. 창을 좁혀도 줄이 깨지거나 뒤가 잘려나가지 않습니다.
빠지는 순서는 이렇습니다.
5시간 한도와 주간 한도는 절대 빠지지 않습니다
아무리 창을 좁혀도 이 두 칸은 남습니다. 이 상태줄이 존재하는 이유 자체가 한도를 보기 위한 것이기 때문입니다.
게다가 두 한도는 줄 앞쪽(모델명 바로 뒤)에 자리잡고 있어 잘림에도 더 안전합니다. 터미널이 줄 끝을 잘라내는 상황에서도 가장 먼저 눈에 들어오는 위치이기 때문입니다.
실제로 측정한 동작입니다.
| 터미널 폭 | 표시 내용 |
|---|---|
| 58칸 이상 | Opus 5 │ 5h 31% 2h45m │ 주 9% 5d │ ctx 23% │ $14.74 │ imac |
| 49칸 | Opus 5 │ 5h 31% 2h45m │ 주 9% 5d │ ctx 23% │ imac |
| 42칸 | Opus 5 │ 5h 31% 2h45m │ 주 9% 5d │ ctx 23% |
| 24칸 | 5h 31% 2h45m │ 주 9% 5d |
49칸에서 $14.74 가 빠지고, 42칸에서 디렉터리 imac 이,
24칸에서는 ctx 와 모델명 Opus 5 까지 빠지지만
두 한도는 끝까지 남아 있는 것을 확인할 수 있습니다.
버전이 낮아 COLUMNS 가 전달되지 않으면 스크립트는 넉넉한 폭을 가정해 전체 항목을 그대로 출력합니다.
즉 구버전에서도 예전과 똑같이 동작하며, 따로 설정할 것은 없습니다.
상태표시줄이 아예 안 보여요
거의 항상 재시작을 안 해서 그렇습니다. Claude Code를 완전히 종료(Ctrl + C 두 번 또는 /exit)했다가 다시 claude 를 실행하세요.
그래도 안 보이면 등록 경로를 확인합니다.
jq -r '.statusLine.command' ~/.claude/settings.json
bash /Users/…/.claude/statusline.sh 형태여야 합니다. ~ 가 남아 있으면 절대경로로 고치세요(수동 설치 ⑥번 명령을 다시 실행하면 됩니다). 파일 자체가 있는지도 확인하세요.
ls -l ~/.claude/statusline.sh
5h — 만 계속 나와요
두 가지 경우뿐입니다.
rate_limits 는 구독 계정에만 전달되므로, API 종량제나 다른 형태로 쓰는 경우에는 계속 — 로 남습니다. 이때도 폴더·모델·컨텍스트·비용은 정상 표시됩니다.터미널에 jq: command not found 가 떠요
jq 가 없는 경우입니다. macOS 15부터는 /usr/bin/jq 가 기본 포함이라 대개 문제가 없지만, 구버전이라면 설치하세요.
brew install jq
Homebrew 자체가 없다면 brew.sh 의 설치 명령을 먼저 실행해야 합니다.
상태줄에 이상한 기호가 잔뜩 나와요
[2m 같은 문자가 그대로 보인다면 터미널이 색상 코드를 해석하지 못하는 상태입니다.
기본 터미널·iTerm2·VS Code 터미널에서는 정상 동작합니다. 다른 터미널을 쓰고 있다면 기본 터미널로 한번 확인해 보세요.
설정이 꼬였어요 — 백업으로 되돌리기
백업 파일 목록을 확인합니다.
ls -lt ~/claude-backup-before-ecc-*.tgz
가장 최근 파일 이름을 확인한 뒤, 현재 상태를 한 번 더 옆으로 치워두고 복원합니다. (아래 파일명.tgz 를 실제 이름으로 바꾸세요)
mv ~/.claude ~/.claude-broken-$(date +%Y%m%d-%H%M%S)
tar -xzf ~/파일명.tgz -C ~
ls -d ~/.claude
복원 후 Claude Code를 재시작하면 백업 시점 상태로 돌아갑니다. 문제가 없다고 확인되면 ~/.claude-broken-… 폴더는 지워도 됩니다.
ECC 명령이 안 보여요
플러그인은 재시작할 때 내려받아집니다. 재시작 후에도 없다면 설정을 확인하세요.
jq '.extraKnownMarketplaces.ecc, .enabledPlugins' ~/.claude/settings.json
"ecc@ecc": true 가 보여야 합니다. 없다면 Claude Code 대화창에서 /plugin marketplace add affaan-m/ECC → /plugin install ecc@ecc 를 다시 실행하세요.
이 페이지는 Claude에게 설치 작업을 시키는 문서입니다
링크를 대화창에 붙여넣는 순간, Claude는 이 페이지에 적힌 명령을 읽고 여러분의 맥에서 실행하려 합니다. 즉 페이지 내용 = 실행될 코드입니다.
rm -rf 가 어디를 가리키는지 확인하세요.1단계에서 만드는 ~/claude-backup-before-ecc-*.tgz 파일에는 ~/.claude 폴더 전체가 들어갑니다.
설정과 대화 기록이 포함될 수 있으니 이 파일을 외부에 공유하거나 업로드하지 마세요. 로컬에만 두면 됩니다.