قابلیتها
اجرای Claude Code
این صفحه بهصورت ماشینی از انگلیسی ترجمه شده است. پیشنهاد اصلاح را با کمال میل میپذیریم. ویرایش این صفحه در GitHub
ccam work اجرای Claude Code را با حساب work آغاز میکند و هر چه پس از نام بیاید همانطور که هست به claude میرسد. هر جا که claude را تایپ میکردید از آن استفاده کنید: در ترمینال، در یک اسکریپت یا با ورودیای که از طریق pipe داده میشود.
نحوه استفاده
ccam work # Claude Code as the account work
ccam 2 # the account with number 2 (see ccam list)
ccam work --resume # claude --resume, as work
ccam work -p "fix the tests" --output-format json
cat log.txt | ccam work -p "find the cause"
ccam -p "summarise" # no name: the default account
ccam use work # make work the default account
ccam run work --continue # same as ccam work --continue
ccam # the picker on a terminal, the list otherwise
ccam --dry-run work -p hi # print the command instead of running itنام یک حساب یا شماره آن در ccam list را بدهید. ccam آرگومانهای پس از نام را نمیخواند، بنابراین ccam work --help راهنمای Claude Code را نشان میدهد. گذاشتن -- پس از نام اختیاری است. ورودی استاندارد، کد خروج و سیگنالها مانند claude رفتار میکنند.
وقتی آرگومان اول با - شروع شود و یکی از گزینههای خود ccam نباشد، ccam حساب پیشفرض را با همه آرگومانها اجرا میکند. حساب پیشفرض همان حسابی است که با ccam use تعیین شده، یا اگر حسابی تعیین نکرده باشید، حسابی که کمترین شماره را دارد.
فهرست انتخاب
ccam بدون آرگومان، وقتی ورودی و خروجی استاندارد ترمینال باشند فهرست انتخاب را باز میکند و در غیر این صورت ccam list را چاپ میکند. این فهرست شماره، ایمیل، مصرف ۵ ساعته، آخرین استفاده و موارد مشترک هر حساب را نشان میدهد؛ مصرف هر حساب به محض پاسخ دادن آن پر میشود.
| کلید | کار آن |
|---|---|
Enter |
اجرای Claude Code با حساب انتخابشده |
1 تا 9 |
اجرای حسابی که آن شماره را دارد |
Up/Down، k/j |
جابهجا کردن انتخاب |
a |
بستن فهرست انتخاب و اجرای دستیار ccam add |
s |
ویرایش موارد مشترک حساب انتخابشده (Space یا x روشن و خاموش میکند، Enter اعمال میکند، Esc برمیگردد) |
d |
پیشفرض کردن حساب انتخابشده |
r |
دریافت دوباره مصرف، بدون حافظه نهان کوتاهمدت |
q، Esc، Ctrl+C |
خروج |
فهرست انتخاب پیش از انجام کار بسته میشود، بنابراین ترمینال پیش از شروع Claude Code به حالت عادی برمیگردد. پس از d یا تغییر اشتراکگذاری، فهرست دوباره باز میشود. تغییر اشتراکگذاری، مانند ccam share، ابتدا برنامه را نشان میدهد و از شما میپرسد.
گزینهها
| گزینه | کار آن | پیشفرض |
|---|---|---|
--dry-run |
محیط و فرمانی را که ccam اجرا میکرد چاپ میکند و خارج میشود | خاموش |
-v، --version |
ccam <version> را چاپ میکند (فقط بهعنوان آرگومان اول) |
|
-h، --help |
راهنمای ccam، به شکل ccam --help یا ccam run --help |
قواعد آرگومانها:
- ccam گزینههای خودش را فقط پیش از نام حساب میخواند. پس از نام، همه آرگومانها متعلق به Claude Code هستند، از جمله
--dry-runو--help. --dry-runبه شکلهایccam --dry-run work،ccam run --dry-run workوccam --dry-run(حساب پیشفرض) کار میکند. این گزینه پذیرفته میشود، نه رد.ccam run <name|number> [claude args]شکل بلندccam <name>است.ccam runبدون نام از حساب پیشفرض استفاده میکند.- نام حسابها نمیتواند نام فرمانهای ccam مانند
add،list،runیاusageباشد، بنابراینccam <word>هرگز مبهم نیست.
اجرای آزمایشی یک خط چاپ میکند که میتوانید آن را در shell بچسبانید:
$ ccam --dry-run work -p "fix the tests"
CLAUDE_CONFIG_DIR=/home/me/.local/share/ccam/profiles/work /home/me/.local/bin/claude --mcp-config=/home/me/.local/share/ccam/groups/default/mcp.json -p 'fix the tests'چگونه کار میکند
هر اجرا، از خط فرمان تا exec، همین گامها را طی میکند:
هر جعبه هنگام اجرای گام خود روشن میشود و خطهای زیر آن، محیط و آرگومانهایی هستند که Claude Code با آنها شروع میشود.
cmd/ccam/main.goتابعapp.Mainرا فراخوانی میکند. اگر ccam با نام دیگری اجرا شده باشد، یک میانبر است و مستقیم به اجراکننده میرود.app.parseپیش از دخالت cobra بهos.Argsنگاه میکند. فقطccamبهتنهایی (فهرست انتخاب)، نام یک فرمان ccam (config.Reserved)،-h/--helpو-v/--versionبهcli.Executeمیروند. هر چیز دیگری یک اجراست.launcher.Launchفایل~/.config/ccam/config.tomlرا میخواند، تنها فایلی که تجزیه میکند.launcher.Prepareحساب را با نام یا شماره پیدا میکند، یک--آغازین را حذف میکند و فایل اجراییclaudeرا باResolveClaudeپیدا میکند. نتیجه جستوجو در PATH همراه با زمان تغییر فایل در~/.local/state/ccam/claude-pathذخیره میشود، بنابراین ccam در هر اجراPATHرا جستوجو نمیکند. اگر فایل تغییر کرده یا وجود نداشته باشد، جستوجوی تازهای انجام میشود. مسیرclaude_binدرconfig.tomlهمانطور که هست استفاده میشود. ccam فایلclaudeرا که خود ccam باشد (با مقایسه inode) رد میکند، چون به یک حلقه بیپایان میانجامد.checkLinksپوشه حساب~/.local/share/ccam/profiles/<name>/را با تنظیمات اشتراکگذاری آن با استفاده ازshare.Checkمقایسه میکند، که فقطlstatوreadlinkرا فراخوانی میکند، یعنی یک یا دو فراخوانی سیستمی برای هر مورد. پیوندی که وجود نداشته باشد در همان لحظه ساخته میشود. هر چیزی که ممکن است به از دست رفتن داده بینجامد اجرا را متوقف میکند.applyMCPسرورهای MCP مشترک را اضافه میکند (پایینتر را ببینید).session.Registerنشست را ثبت میکند. ccam یک نشانگر به نام PID خود، که زمان شروع فرایند را در خود دارد، در$XDG_RUNTIME_DIR/ccam/profile-<name>/<pid>مینویسد (یا در~/.local/state/ccam/locks/اگرXDG_RUNTIME_DIRتعریف نشده باشد). برای حسابی که تاریخچه گفتگو را به اشتراک میگذارد،historyCheckابتدا درhistory-<group>-<hash>، که hash آن از پوشه فعلی گرفته میشود، به دنبال نشستی در حال اجرا میگردد و آنجا هم ثبت میکند.execهمان PID را نگه میدارد، بنابراین نشانگر سپس به خود فرایند Claude Code اشاره میکند. از نشانگر استفاده میشود نه قفل نگهداشتهشده، چون فرایندهایی که Claude Code اجرا میکند قفل را به ارث میبرند و پس از پایان نشست آن را نگه میدارند.Plan.Execعنوان ترمینال راclaude · <name>میگذارد (وقتی خروجی خطای استاندارد ترمینال باشد)، زمان اجرا را بدونfsyncدر~/.local/state/ccam/last-used/<name>مینویسد وsyscall.Execرا فراخوانی میکند.
Claude Code با CLAUDE_CONFIG_DIR برابر با پوشه حساب و CCAM_PROFILE برابر با نام حساب اجرا میشود. ccam هر مقداری از این متغیرها را که به ارث برده باشد حذف میکند. برای پوشه ~/.claude که با ccam import روی macOS ثبت شده، CLAUDE_SECURESTORAGE_CONFIG_DIR را هم با مقدار خالی تنظیم میکند تا آن حساب و claude معمولی از یک ورود Keychain استفاده کنند.
چرا exec
syscall.Exec فرایند ccam را با claude جایگزین میکند، بنابراین ccam در حافظه باقی نمیماند، کلیدها، سیگنالها و کد خروج متعلق به خود Claude Code هستند و آرگومانها به شکل آرایه میمانند، هرگز رشته shell نمیشوند. کارهای پس از نشست، مانند تشخیص سرورهایی که با claude mcp add اضافه شدهاند، در اجرای بعدی انجام میشود: ccam زمان تغییر .claude.json را با ~/.local/state/ccam/mcp/<name>/seen مقایسه میکند و فقط وقتی فایل تغییر کرده باشد آن را تجزیه میکند.
مسیر یک خط فرمان
سه خط فرمان، سه مسیر در internal/app:
میانبر بر اساس argv[0] و ccam <name> بر اساس آرگومان اول تشخیص داده میشود و هر دو به syscall.Exec میرسند. فقط یک فرمان ccam مانند ccam usage به cobra میرسد.
سرورهای MCP مشترک
با راهبرد پیشفرض flag، ccam سرورهای MCP گروه را بهصورت یک آرگومان، پیش از آرگومانهای شما، به Claude Code میدهد:
mcp.FlagArgs فقط وقتی فایل mcp.json گروه وجود داشته باشد یک آرگومان برمیگرداند و Plan.InsertArgs آن را درست پس از claude قرار میدهد. گزینههای --mcp-config یا --strict-mcp-config خود شما همچنان روی آن اعمال میشوند. این یک آرگومان واحد است، --mcp-config=<path>، چون --mcp-config در Claude Code چند مقدار میپذیرد: اگر به شکل دو آرگومان نوشته شود، پرامپت بعدی را هم بهعنوان فایل پیکربندی میخواند.
با mcp_strategy = "sync" در config.toml، ccam بهجای آن سرورها را در .claude.json حساب مینویسد و اگر حساب از قبل در حال اجرا باشد این کار را انجام نمیدهد.
بودجه ۱۰ میلیثانیه
ccam پیش از شروع Claude Code حداکثر ۱۰ میلیثانیه (p95) اضافه میکند. مسیر اجرا هرگز درخت فرمانهای cobra را نمیسازد، Bubble Tea را راه نمیاندازد و اتصال شبکه باز نمیکند، و اگر مجموع زمان توابع init() بستهها بیش از ۵ میلیثانیه شود، TestPackageInitIsCheap شکست میخورد. scripts/perf-check.sh زمان ccam --dry-run work، ccam work و یک میانبر را با hyperfine اندازه میگیرد و بالای ۱۰ میلیثانیه شکست میخورد، و BenchmarkLaunchPath در internal/launcher گامها را در یک حلقه اجرا میکند. برای دیدن زمان هر گام، CCAM_TRACE=1 را تنظیم کنید:
$ CCAM_TRACE=1 ccam --dry-run work >/dev/null
ccam trace: start 2.830ms (total 2.830ms)
ccam trace: load config 0.397ms (total 3.227ms)
ccam trace: prepare 0.112ms (total 3.339ms)
ccam trace: check links 0.238ms (total 3.578ms)
ccam trace: prelaunch 0.083ms (total 3.661ms)ایمنی و حالتهای خاص
- نام یا شماره ناشناخته با
no account "<name>"متوقف میشود و شما را بهccam listارجاع میدهد. اگر هیچ حسابی وجود نداشته باشد، ccam از شما میخواهد باccam add <name>یکی اضافه کنید. - اگر یک مسیر مشترک به فایل عادی تبدیل شده یا به جای اشتباهی اشاره کند، ccam با
stopped because of share link problems:متوقف میشود، مشکلات را فهرست میکند و از شما میخواهدccam doctor --fixرا اجرا کنید. ccam در مسیر اجرا دادهای را جابهجا نمیکند. - اگر Claude Code دیگری که تاریخچه گفتگو را با این حساب به اشتراک میگذارد (همان گروه) در همان پوشه در حال اجرا باشد، ccam هشدار میدهد که تاریخچه ممکن است در هم آمیخته شود و میپرسد
Run anyway? [y/N]. بدون ترمینال، هشدار را نشان میدهد و ادامه میدهد. --dry-runاز همگامسازی MCP، اعلان سرور جدید، بررسی تاریخچه، نشانگر نشست، عنوان و زمان آخرین استفاده میگذرد و exec نمیکند. با این حال پیوندهای اشتراک را بررسی میکند و پیوندی را که وجود نداشته باشد، مانند یک اجرای عادی، میسازد.- با
mcp_strategy = "sync"، اگر همگامسازی ناموفق باشدccam: MCP sync failed (launching anyway): …چاپ میشود و Claude Code با سرورهایی که از قبل داشت شروع میشود.