온오퍼 사내 가이드 · Claude Code

Claude Code 하네스 교체 가이드
OMC → ECC + 사용 한도 상태표시줄

기존 OMC 하네스를 걷어내고 ECC 하네스를 설치한 다음, 터미널 하단에 남은 5시간/주간 사용 한도가 항상 보이도록 상태표시줄을 붙입니다. 맥 사용자 기준이며, 개발 지식이 없어도 따라 할 수 있습니다.

가장 쉬운 방법 — Claude에게 시키기

터미널에서 claude 를 실행한 뒤, 아래 문장을 대화창에 그대로 붙여넣고 엔터만 치면 됩니다. Claude가 이 페이지를 읽고 백업부터 검증까지 알아서 수행합니다.

https://ecc-team-setup.pages.dev 이 페이지를 읽고 <Claude에게 주는 지시> 섹션대로 내 맥에 설치해줘.

도메인 허용 창이 한 번 뜹니다. Claude가 페이지를 읽으려면 웹 접근 권한이 필요해서, ecc-team-setup.pages.dev 를 허용할지 묻는 프롬프트가 표시됩니다. “허용(Yes)”을 눌러야 다음으로 진행됩니다. 거부하면 아무것도 설치되지 않습니다.

직접 손으로 하고 싶으면 “직접 설치하기(수동)” 섹션을 보세요. 내용은 완전히 동일합니다.

목차
  1. Claude에게 주는 지시
  2. 직접 설치하기(수동)
  3. 상태줄 스크립트 전문
  4. 설치 후 이렇게 보입니다
  5. 문제 해결
  6. 보안 안내

무엇을 바꾸나요

항목지금바꾼 뒤
하네스 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


1. Claude에게 주는 지시

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단계 백업이 성공하지 않으면 이후 단계를 진행하지 마십시오.

1사전 확인

jq 가 있는지 확인하고, 없으면 설치하십시오. macOS 15 이상에는 /usr/bin/jq 가 기본 포함되어 있습니다.

command -v jq && jq --version || echo "JQ_MISSING"

JQ_MISSING 이 출력되면 다음을 실행하십시오. Homebrew가 없다면 사용자에게 brew.sh 설치를 안내하십시오.

brew install jq

홈 디렉터리 실제 경로를 확인해 두십시오. 이후 단계에서 ~ 대신 이 절대경로를 씁니다.

echo "$HOME"

2백업 (반드시 먼저)

기존 ~/.claude 전체를 통째로 압축해 둡니다. 이 단계가 실패하면 즉시 중단하고 사용자에게 보고하십시오.

tar -czf ~/claude-backup-before-ecc-$(date +%Y%m%d-%H%M%S).tgz -C ~ .claude
ls -lh ~/claude-backup-before-ecc-*.tgz

생성된 파일명과 크기를 사용자에게 알려주십시오. 되돌리는 방법은 문제 해결 섹션에 있습니다.

3OMC 제거

먼저 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-perf
  • remotion-* 전체, mediabunny
  • ui-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 유효성을 확인하십시오.

4ECC 하네스 설치

ECC는 Claude Code 플러그인입니다. 마켓플레이스는 affaan-m/ECC, 플러그인 이름은 ecc@ecc 입니다.

방법 A — settings.json 선언 (Claude가 수행할 방법)

슬래시 명령은 사람이 대화창에 입력해야 하므로, 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

방법 B — 슬래시 명령 (사용자가 직접 입력)

사용자에게 Claude Code 대화창에서 아래 두 줄을 차례로 입력하라고 안내해도 됩니다.

/plugin marketplace add affaan-m/ECC
/plugin install ecc@ecc

플러그인의 실제 다운로드는 Claude Code를 재시작할 때 이루어집니다. 설정만 넣은 시점에는 아직 ECC 에이전트·스킬이 보이지 않는 것이 정상입니다.

5상태표시줄 설치

스크립트를 내려받으십시오. 본문을 손으로 옮겨 적지 마십시오.

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/… 로 시작해야 합니다.

6검증

아래 세 가지를 모두 통과해야 완료입니다.

6-1. jq 존재 확인

command -v jq && jq --version

6-2. settings.json JSON 유효성 확인

jq -e . ~/.claude/settings.json > /dev/null && echo "settings.json 유효함"

실패하면 ~/.claude/settings.json.bak 으로 즉시 되돌리십시오.

6-3. 샘플 stdin으로 스크립트 실행

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

6-4. 마무리 안내

검증이 끝나면 사용자에게 다음을 반드시 알려주십시오.


2. 직접 설치하기 (수동)

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

파일 목록이 하나 뜨면 성공입니다. 안 뜨면 여기서 멈추세요.

② OMC 제거

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

③ ECC 설치

터미널에서 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를 재시작해야 실제로 내려받아집니다.

④ jq 확인

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

내용을 직접 눈으로 보고 싶으면 “상태줄 스크립트 전문” 에 같은 내용이 그대로 실려 있습니다.

⑥ settings.json에 등록

아래 명령 한 줄이면 자동으로 절대경로가 들어갑니다.

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를 완전히 껐다가 다시 켜세요.


3. 상태줄 스크립트 전문 — 검토용

설치는 위의 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_percentage5시간 창 사용률(%)
rate_limits.five_hour.resets_at5시간 창 리셋 시각 (epoch 초)
rate_limits.seven_day.used_percentage주간(7일) 창 사용률(%)
rate_limits.seven_day.resets_at주간 창 리셋 시각 (epoch 초)

공식 문서: https://code.claude.com/docs/en/statusline.md

꼭 알아둘 것 — 처음엔 로 보입니다

rate_limitsClaude Pro / Max 구독자에게만, 그리고 그 세션의 첫 API 응답 이후에만 전달됩니다.

그래서 Claude Code를 막 켰을 때는 5h — 주 — 로 보이는 것이 정상 동작입니다. Claude에게 아무 질문이나 하나 던져서 첫 답변을 받으면 그때부터 숫자가 채워집니다. 이걸 고장으로 오해하지 마세요.

스크립트는 값이 없을 때 칸을 아예 숨기지 않고 로 남겨둡니다. “값을 모른다”와 “여유가 있다”를 혼동하지 않기 위해서입니다.


4. 설치 후 이렇게 보입니다

터미널 입력줄 바로 아래에 이런 한 줄이 생깁니다.

Opus 5 │ 5h 31% 2h45m │ 주 9% 5dctx 23%$14.74imac

모델명 다음에 5시간 한도와 주간 한도가 바로 붙어 줄 앞쪽을 차지하고, 참고용 정보일수록 뒤로 갑니다. 왼쪽부터 순서대로 읽으면 됩니다.

표시
Opus 5현재 사용 중인 모델
5h 31% 2h45m5시간 한도의 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.”

출처: https://code.claude.com/docs/en/statusline.md

색상 규칙

사용률
50% 미만 초록여유 있음
50% ~ 79% 노랑절반 넘게 씀 — 페이스 조절
80% 이상 빨강거의 다 씀 — 곧 막힐 수 있음

같은 규칙이 컨텍스트(ctx) 표시에도 적용됩니다. 예를 들어 한도를 많이 쓴 상태는 이렇게 보입니다.

Opus 5 │ 5h 91% 42m │ 주 67% 2dctx 62%$112.40parameat

남은 시간 표기는 남은 길이에 따라 5d / 2h45m / 42m 형태로 바뀌고, 이미 지난 경우에는 표시되지 않습니다.

터미널 창이 좁으면 — 덜 중요한 것부터 알아서 빠집니다

Claude Code는 상태줄 스크립트를 실행할 때 COLUMNS 환경변수로 현재 터미널 폭을 넘겨줍니다 (Claude Code v2.1.153 이상). 스크립트가 이 값을 읽어서, 한 줄이 폭에 안 맞으면 덜 중요한 항목부터 자동으로 뺍니다. 창을 좁혀도 줄이 깨지거나 뒤가 잘려나가지 않습니다.

빠지는 순서는 이렇습니다.

$비용디렉터리ctx모델명

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 가 전달되지 않으면 스크립트는 넉넉한 폭을 가정해 전체 항목을 그대로 출력합니다. 즉 구버전에서도 예전과 똑같이 동작하며, 따로 설정할 것은 없습니다.


5. 문제 해결

상태표시줄이 아예 안 보여요

거의 항상 재시작을 안 해서 그렇습니다. Claude Code를 완전히 종료(Ctrl + C 두 번 또는 /exit)했다가 다시 claude 를 실행하세요.

그래도 안 보이면 등록 경로를 확인합니다.

jq -r '.statusLine.command' ~/.claude/settings.json

bash /Users/…/.claude/statusline.sh 형태여야 합니다. ~ 가 남아 있으면 절대경로로 고치세요(수동 설치 ⑥번 명령을 다시 실행하면 됩니다). 파일 자체가 있는지도 확인하세요.

ls -l ~/.claude/statusline.sh

5h — 만 계속 나와요

두 가지 경우뿐입니다.

  1. 아직 첫 응답을 안 받았습니다. Claude에게 아무거나 하나 물어보고 답변이 오면 숫자가 채워집니다. 이게 대부분의 경우입니다.
  2. Claude Pro / Max 구독이 아닙니다. 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 를 다시 실행하세요.


6. 보안 안내

이 페이지는 Claude에게 설치 작업을 시키는 문서입니다

링크를 대화창에 붙여넣는 순간, Claude는 이 페이지에 적힌 명령을 읽고 여러분의 맥에서 실행하려 합니다. 즉 페이지 내용 = 실행될 코드입니다.

상태줄 스크립트에 대해

백업에 대해

1단계에서 만드는 ~/claude-backup-before-ecc-*.tgz 파일에는 ~/.claude 폴더 전체가 들어갑니다. 설정과 대화 기록이 포함될 수 있으니 이 파일을 외부에 공유하거나 업로드하지 마세요. 로컬에만 두면 됩니다.