# การเลือกบัญชีสำหรับสคริปต์

> ccam pick พิมพ์บัญชีที่เหลือโควตามากที่สุดให้สคริปต์ ให้ worker ที่เริ่มพร้อมกันได้บัญชีต่างกัน และออกด้วย 75 เมื่อไม่มีบัญชีใดเหลือโควตา

Source: https://ccam.dev/th/features/pick/ · Updated 2026-10-20

`ccam pick` พิมพ์ชื่อของบัญชีที่เข้าสู่ระบบแล้วซึ่งเหลือโควตามากที่สุด เพื่อให้สคริปต์ใช้เริ่ม Claude Code worker ที่เริ่มพร้อมกันจะได้บัญชีคนละบัญชีตราบใดที่มีบัญชีที่เหลือโควตามากพอ งาน `claude -p` ชุดหนึ่งจึงกระจายไปทั่วบัญชีของคุณแทนที่จะใช้บัญชีเดียวจนหมด

## การใช้งาน

```sh
ccam "$(ccam pick)" -p "fix the failing tests"
for task in parse lint docs; do
  ccam "$(ccam pick)" -p "do the $task task" > "$task.json" &
done; wait
ccam pick --json                      # the account and its usage
ccam pick --model opus                # also count the Opus weekly limit
ccam pick --max-usage 80 --strategy expiring
ccam pick --wait=2h                   # nobody has room: wait for a reset
ccam --fallback "$(ccam pick)" -p "…" # also switch if this account hits its limit mid-job
```

```console
$ ccam pick --json
{
  "name": "work",
  "slot": 2,
  "email": "dev@company.com",
  "five_hour": { "percent": 12, "resets_at": "2026-10-20T15:10:00Z", "known": true },
  "weekly": { "percent": 41, "resets_at": "2026-10-24T09:00:00Z", "known": true },
  "source": "live"
}
```

รหัสออก: `0` พร้อมชื่อบัญชีทางเอาต์พุตมาตรฐาน `75` (`EX_TEMPFAIL`) เมื่อไม่มีบัญชีใดเหลือโควตาหรือไม่มีบัญชีใดเข้าสู่ระบบ และ `1` สำหรับข้อผิดพลาดอื่น เช่น แฟล็กไม่ถูกต้อง

## ตัวเลือก

| ตัวเลือก | สิ่งที่ทำ | ค่าเริ่มต้น |
| --- | --- | --- |
| `--json` | พิมพ์บัญชี การใช้งาน 5 ชั่วโมงและรายสัปดาห์ และแหล่งที่มาของตัวเลข | ปิด |
| `--model <model>` | นับช่วงรายสัปดาห์ของโมเดลนั้นด้วย เช่น `opus` | ไม่มี |
| `--max-usage <1-100>` | เลือกบัญชีที่ใช้งานต่ำกว่าค่านี้ก่อน | `auto_max_usage` หากไม่มีคือ 100 |
| `--strategy headroom\|expiring` | การใช้งาน 5 ชั่วโมงต่ำที่สุด หรือช่วง 5 ชั่วโมงที่จะรีเซ็ตเร็วที่สุด | `auto_strategy` หากไม่มีคือ `headroom` |
| `--wait[=<duration>]` | เมื่อไม่มีบัญชีใดเหลือโควตา ให้รอบัญชีแรกที่รีเซ็ต นานไม่เกินค่านี้ | ปิด; `5h` เมื่อระบุโดยไม่มีค่า |
| `--dry-run` | เลือกโดยไม่บันทึกการเลือก | ปิด |

## วิธีการทำงาน

1. ccam แสดงรายการบัญชีที่เข้าสู่ระบบแล้ว (บัญชี API key ไม่มีขีดจำกัดจึงไม่ถูกนับรวม)
2. ccam ล็อก (`~/.local/state/ccam/picks.lock`) เพื่อให้การเลือกที่รันพร้อมกันเกิดขึ้นทีละรายการ
3. ccam สอบถามการใช้งานของทุกบัญชีพร้อมกันแบบเดียวกับ `ccam usage` โดยใช้แคช 60 วินาที
4. บัญชีที่ถูกเลือกภายใน 2 นาทีที่ผ่านมา (`~/.local/state/ccam/picks/<name>`) จะถูกตัดออกก่อน แล้ว[กฎการเลือก](https://ccam.dev/th/features/next.md#auto)ของ `ccam next --auto` จะเลือกจากบัญชีที่เหลือ: บัญชีที่ต่ำกว่า `auto_max_usage` มาก่อน ตามกลยุทธ์ และไม่เลือกบัญชีที่อยู่ที่ 100% เด็ดขาด
5. หากทุกบัญชีที่เหลือโควตาเพิ่งถูกเลือกไป กฎจะเลือกจากบัญชีทั้งหมดอีกครั้ง worker ตัวที่สี่บนสามบัญชีจึงใช้บัญชีร่วมกับตัวอื่นหนึ่งบัญชี
6. ccam บันทึกการเลือกและปลดล็อก จากนั้นจึงพิมพ์ชื่อ

ช่วง 2 นาทีมีความสำคัญ เพราะการใช้งานของงานใหม่ต้องใช้เวลาสักพักกว่าจะปรากฏในตัวเลข หากไม่มีช่วงนี้ worker ห้าตัวที่เริ่มพร้อมกันจะเห็นบัญชีเดียวกันว่าเป็นบัญชีที่เหลือโควตามากที่สุดทั้งหมด

## ความปลอดภัยและกรณีพิเศษ

- `ccam pick` อ่านแค่การใช้งานและเขียนเวลาที่เลือก ไม่เคยต่ออายุหรืออ่านโทเค็นเกินกว่าที่ `ccam usage` ทำ
- การเลือกไม่ได้จองบัญชีไว้ สคริปต์สองตัวอาจยังเริ่มบนบัญชีเดียวกันหลังผ่านไป 2 นาที ใช้ `--fallback` เพื่อกู้คืนเมื่อบัญชีนั้นถึงขีดจำกัด
- การรอด้วย `--wait` ไม่ถือล็อกไว้ การเลือกอื่นจึงดำเนินต่อไปได้ระหว่างนั้น
- `ccam pick` ไม่สนใจ [`ccam folder`](https://ccam.dev/th/features/folder.md) โดยเลือกตามการใช้งานเท่านั้น

## หัวข้อที่เกี่ยวข้อง

- [การสลับไปยังบัญชีถัดไป](https://ccam.dev/th/features/next.md)
- [รันซ้ำเมื่อถึงขีดจำกัด](https://ccam.dev/th/features/next.md#run-again-at-the-limit)
- [ขีดจำกัดการใช้งาน](https://ccam.dev/th/features/usage.md)
- [บัญชี API key](https://ccam.dev/th/features/api.md)
