خصوصیات

Claude Code شروع کرنا

آخری اپ ڈیٹ 19 اکتوبر، 2026
ccam 0.6.0 اور Claude Code 2.1.302 کے ساتھ جانچا گیا

اس صفحے کا انگریزی سے مشینی ترجمہ کیا گیا ہے۔ اصلاحات کا خیرمقدم ہے۔ اس صفحے میں 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 پرنٹ کرتا ہے۔ یہ ہر اکاؤنٹ کا نمبر، ای میل، 5 گھنٹے کا استعمال، آخری استعمال اور شیئر کیے گئے آئٹمز دکھاتا ہے؛ استعمال ہر اکاؤنٹ کے جواب دینے پر بھرتا جاتا ہے۔

کی کیا کرتی ہے
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 ڈیفالٹ اکاؤنٹ استعمال کرتا ہے۔
  • اکاؤنٹس کے نام add، list، run یا usage جیسے ccam کمانڈز کے نام نہیں ہو سکتے، اس لیے ccam <word> کبھی مبہم نہیں ہوتا۔

ڈرائی رن ایک لائن پرنٹ کرتا ہے جسے آپ شیل میں چسپاں کر سکتے ہیں:

$ 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 شروع ہوتا ہے۔

  1. cmd/ccam/main.go، app.Main کو کال کرتا ہے۔ اگر ccam کسی اور نام سے شروع ہوا ہو تو یہ ایک شارٹ کٹ ہے اور سیدھا لانچر پر جاتا ہے۔
  2. app.parse، cobra کے شامل ہونے سے پہلے os.Args دیکھتا ہے۔ صرف اکیلا ccam (انتخابی مینو)، ccam کمانڈ کا نام (config.Reserved)، -h/--help اور -v/--version، cli.Execute پر جاتے ہیں۔ باقی سب کچھ لانچ ہے۔
  3. launcher.Launch، ~/.config/ccam/config.toml پڑھتا ہے، جو واحد فائل ہے جسے یہ پارس کرتا ہے۔
  4. launcher.Prepare اکاؤنٹ کو نام یا نمبر سے تلاش کرتا ہے، شروع کا ایک -- ہٹاتا ہے، اور ResolveClaude سے claude قابلِ عمل فائل تلاش کرتا ہے۔ PATH کی تلاش فائل کے ترمیم کے وقت کے ساتھ ~/.local/state/ccam/claude-path میں کیش ہوتی ہے، اس لیے ccam ہر لانچ پر PATH تلاش نہیں کرتا۔ بدلی ہوئی یا غائب فائل نئی تلاش شروع کرتی ہے۔ config.toml میں claude_bin کا راستہ جوں کا توں استعمال ہوتا ہے۔ ccam ایسا claude مسترد کرتا ہے جو خود ccam ہو، inode سے موازنہ کر کے، کیونکہ اس سے لوپ بن جائے گا۔
  5. checkLinks اکاؤنٹ فولڈر ~/.local/share/ccam/profiles/<name>/ کو اس کی شیئرنگ سیٹنگز سے share.Check کے ذریعے موازنہ کرتا ہے، جو صرف lstat اور readlink کال کرتا ہے، ہر آئٹم کے لیے ایک یا دو سسٹم کالز۔ غائب لنک فوراً بنا دیا جاتا ہے۔ جس چیز سے ڈیٹا کھو سکتا ہو وہ لانچ روک دیتی ہے۔
  6. applyMCP شیئر کیے گئے MCP سرورز شامل کرتا ہے (نیچے دیکھیں)۔
  7. session.Register سیشن ریکارڈ کرتا ہے۔ ccam اپنے PID کے نام سے ایک نشان، جس میں پروسیس کے شروع ہونے کا وقت ہوتا ہے، $XDG_RUNTIME_DIR/ccam/profile-<name>/<pid> میں لکھتا ہے (یا XDG_RUNTIME_DIR کے بغیر ~/.local/state/ccam/locks/ میں)۔ گفتگو کی ہسٹری شیئر کرنے والے اکاؤنٹ کے لیے، historyCheck پہلے history-<group>-<hash> میں کوئی چلتا ہوا سیشن تلاش کرتا ہے، جہاں hash موجودہ فولڈر کا ہوتا ہے، اور وہاں بھی رجسٹر کرتا ہے۔ exec، PID برقرار رکھتا ہے، اس لیے نشان پھر خود Claude Code پروسیس کا نام بتاتا ہے۔ پکڑا ہوا لاک نہیں بلکہ نشان، کیونکہ Claude Code جو پروسیس شروع کرتا ہے وہ لاک وراثت میں پا کر سیشن ختم ہونے کے بعد بھی اسے رکھے رہیں گے۔
  8. Plan.Exec ٹرمینل کا عنوان claude · <name> مقرر کرتا ہے (جب اسٹینڈرڈ ایرر ٹرمینل ہو)، لانچ کا وقت fsync کے بغیر ~/.local/state/ccam/last-used/<name> میں لکھتا ہے، اور syscall.Exec کال کرتا ہے۔

Claude Code اس طرح چلتا ہے کہ CLAUDE_CONFIG_DIR اکاؤنٹ فولڈر پر اور CCAM_PROFILE اکاؤنٹ کے نام پر مقرر ہوتا ہے۔ ccam ان کی وہ قدریں ہٹا دیتا ہے جو اسے وراثت میں ملی ہوں۔ macOS پر ccam import سے رجسٹر کیے گئے ~/.claude فولڈر کے لیے یہ CLAUDE_SECURESTORAGE_CONFIG_DIR کو بھی خالی قدر پر مقرر کرتا ہے، تاکہ اکاؤنٹ اور سادہ claude ایک ہی Keychain لاگ اِن استعمال کریں۔

exec کیوں

syscall.Exec، ccam پروسیس کی جگہ claude لے آتا ہے، اس لیے ccam میموری میں نہیں رہتا، کی اسٹروکس، سگنلز اور ایگزٹ کوڈ Claude Code کے اپنے ہوتے ہیں، اور آرگیومنٹس ایک array رہتے ہیں، کبھی شیل اسٹرنگ نہیں بنتے۔ سیشن کے بعد کا کام، جیسے claude mcp add سے شامل کیے گئے سرورز کو نوٹ کرنا، اگلے لانچ پر ہوتا ہے: ccam، .claude.json کے ترمیم کے وقت کو ~/.local/state/ccam/mcp/<name>/seen سے موازنہ کرتا ہے اور فائل صرف تب پارس کرتا ہے جب وہ بدلی ہو۔

کمانڈ لائن کس راستے پر جاتی ہے

تین کمانڈ لائنیں، internal/app سے گزرنے کے تین راستے:

شارٹ کٹ argv[0] پر، اور ccam <name> پہلے آرگیومنٹ پر پہچانا جاتا ہے، اور دونوں syscall.Exec پر ختم ہوتے ہیں۔ صرف ccam usage جیسی ccam کمانڈ cobra تک پہنچتی ہے۔

شیئر کیے گئے MCP سرورز

ڈیفالٹ flag حکمتِ عملی کے ساتھ، ccam گروپ کے MCP سرورز Claude Code کو ایک آرگیومنٹ کے طور پر دیتا ہے، جو آپ کے آرگیومنٹس سے پہلے رکھا جاتا ہے:

mcp.FlagArgs آرگیومنٹ صرف تب لوٹاتا ہے جب گروپ کی mcp.json موجود ہو، اور Plan.InsertArgs اسے claude کے فوراً بعد رکھتا ہے۔ آپ کا اپنا --mcp-config یا --strict-mcp-config پھر بھی اس کے اوپر لاگو ہوتا ہے۔ یہ ایک ہی آرگیومنٹ ہے، --mcp-config=<path>، کیونکہ Claude Code کا --mcp-config کئی قدریں لیتا ہے: دو آرگیومنٹس کے طور پر لکھا جائے تو یہ بعد میں آنے والے پرامپٹ کو بھی کنفیگ فائل سمجھ کر پڑھے گا۔

config.toml میں mcp_strategy = "sync" کے ساتھ، ccam اس کے بجائے سرورز اکاؤنٹ کی .claude.json میں لکھتا ہے، اور اگر اکاؤنٹ پہلے سے چل رہا ہو تو یہ چھوڑ دیتا ہے۔

10 ms کا بجٹ

ccam، Claude Code شروع ہونے سے پہلے زیادہ سے زیادہ 10 ms (p95) شامل کرتا ہے۔ لانچ کا راستہ کبھی cobra کمانڈ ٹری نہیں بناتا، Bubble Tea شروع نہیں کرتا اور نیٹ ورک کنکشن نہیں کھولتا، اور اگر پیکیجز کے init() فنکشنز کل ملا کر 5 ms سے زیادہ لیں تو TestPackageInitIsCheap ناکام ہوتا ہے۔ scripts/perf-check.sh، hyperfine سے ccam --dry-run work، ccam work اور ایک شارٹ کٹ کو ناپتا ہے اور 10 ms سے اوپر ناکام ہوتا ہے، اور internal/launcher میں BenchmarkLaunchPath مراحل کو لوپ میں چلاتا ہے۔ ہر مرحلے کا وقت دیکھنے کے لیے 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 چلانے کو کہتا ہے۔ یہ لانچ کے راستے پر ڈیٹا منتقل نہیں کرتا۔
  • اگر کوئی دوسرا Claude Code جو اس اکاؤنٹ کے ساتھ گفتگو کی ہسٹری شیئر کرتا ہو (ایک ہی گروپ) اسی فولڈر میں چل رہا ہو، تو ccam انتباہ دیتا ہے کہ ہسٹری آپس میں مل سکتی ہے اور Run anyway? [y/N] پوچھتا ہے۔ ٹرمینل کے بغیر یہ انتباہ دکھا کر جاری رکھتا ہے۔
  • --dry-run، MCP sync، نئے سرور کی اطلاع، ہسٹری کی جانچ، سیشن کا نشان، عنوان اور آخری استعمال کا وقت چھوڑ دیتا ہے، اور exec نہیں کرتا۔ یہ پھر بھی شیئر لنکس جانچتا ہے، اور عام لانچ کی طرح غائب لنک بنا دیتا ہے۔
  • mcp_strategy = "sync" کے ساتھ، ناکام sync، ccam: MCP sync failed (launching anyway): … پرنٹ کرتا ہے اور Claude Code ان سرورز کے ساتھ شروع ہوتا ہے جو اس کے پاس پہلے سے تھے۔