رفتن به محتوا

CLI لُب

lobbe جلسه‌ها را به لُب می‌فرستد، دنبالشان می‌کند و لُبشان را می‌خواند، از ترمینال یا از یک اسکریپت. با توکن شخصی API شما با API لُب کار می‌کند، یک فایل است بی‌هیچ وابستگی، و به Node.js نسخهٔ ۲۰ یا تازه‌تر نیاز دارد.

Terminal window
npm install -g @lobbe/cli
# Paste your token when asked
lobbe login
# Send a meeting and wait until it's ready
lobbe upload meeting.m4a --wait
# Your finished meetings, and one as Markdown
lobbe list
lobbe get MEETING_ID --md
Terminal window
npm install -g @lobbe/cli

یا بدون نصب اجرایش کنید: npx -y @lobbe/cli <command>. اگر npmjs.org از شبکهٔ شما کند است یا در دسترس نیست، --registry را با نشانی یک mirror که به آن اعتماد دارید اضافه کنید.

در برنامه و در «اتصال‌ها» توکنی با دسترسی‌هایی که لازم دارید بسازید (توکن‌ها و دسترسی‌ها را ببینید)، و بعد:

Terminal window
lobbe login

lobbe login توکن را بی‌آن‌که نشانش دهد می‌پرسد، آن را با لُب بررسی می‌کند، و فقط بعد از آن در ~/.config/lobbe/config.json (یا $XDG_CONFIG_HOME/lobbe/config.json) ذخیره‌اش می‌کند. این فایل را فقط خود شما می‌توانید بخوانید (حالت 0600، در پوشه‌ای با حالت 0700). توکنی که لُب نپذیرد هرگز ذخیره نمی‌شود. سرور MCP هم توکن را از همین فایل می‌خواند.

  • از یک اسکریپت: توکن را با lobbe login --token-stdin به ورودی بدهید.
  • چند حساب: lobbe login --profile work، و بعد --profile work (یا LOBBE_PROFILE=work) روی هر فرمانی.
  • کانتینرها و CI: به‌جای آن LOBBE_TOKEN را تنظیم کنید؛ چیزی از دیسک خوانده یا روی آن نوشته نمی‌شود. این توکن به LOBBE_BASE_URL، یا به https://app.lobbe.ai، فرستاده می‌شود و هرگز به سروری که یک پروفایل ذخیره‌شده نام می‌برد.
  • سروری دیگر: LOBBE_BASE_URL=https://lobbe.example.com lobbe login. پروفایل سروری را که توکن با آن بررسی شده به یاد می‌سپارد.

lobbe whoami نشان می‌دهد توکن متعلق به کیست، چه دسترسی‌ها و چه سقف روزانه‌ای دارد، و محدودیت‌های ارسال فایل چیست. lobbe logout توکن ذخیره‌شده را فراموش می‌کند؛ خود توکن تا وقتی در برنامه باطلش نکنید کار می‌کند.

فرمان کاری که می‌کند
lobbe login توکن را، وقتی سرور پذیرفت، روی این رایانه ذخیره می‌کند
lobbe logout توکن ذخیره‌شده را فراموش می‌کند (تا در برنامه باطلش نکنید کار می‌کند)
lobbe whoami توکن متعلق به کیست: دسترسی‌ها، سقف روزانه و محدودیت‌هایش
lobbe account موجودی حساب به دقیقه و تنظیمات آن
lobbe upload <file> فایل ضبط یک جلسه را می‌فرستد؛ با --wait دنبالش می‌کند تا کارش تمام شود
lobbe status <id> جلسه کجای کار است؛ با --wait دنبالش می‌کند تا کارش تمام شود
lobbe skip-naming <id> بدون نام‌گذاری صداها ادامه می‌دهد: نام‌های پیشنهادی لُب به کار می‌روند
lobbe retry <id> مرحلهٔ شکست‌خوردهٔ جلسهٔ FAILED را بدون هزینهٔ تازه دوباره اجرا می‌کند
lobbe list جلسه‌های آمادهٔ شما، از تازه‌ترین
lobbe get <id> یک جلسهٔ آماده: لُب و رونوشتش، به‌صورت Markdown
lobbe search <query> جلسه‌های آماده را با واژه‌هایشان پیدا می‌کند
lobbe ask <id> <question> از یک جلسه می‌پرسد (با --series <id> از یک سری)؛ اول قیمت را می‌گوید
lobbe series سری‌هایی که ساخته‌اید یا عضوشان شده‌اید؛ و series show <id>، series create، series update <id>
lobbe keyterms واژگان، هر واژه در یک سطر؛ keyterms set <file> آن را جایگزین می‌کند
lobbe memory آنچه لُب دربارهٔ شما به یاد دارد؛ و memory edit <id> <text>، memory delete <id>
lobbe events آنچه از یک نشانگر به بعد برای جلسه‌هایتان رخ داده؛ با --follow دنبال کردن ادامه پیدا می‌کند
lobbe skill install skill لُب را برای Claude Code، Codex یا Cursor نصب می‌کند

lobbe <command> --help گزینه‌های هر فرمان را فهرست می‌کند، و lobbe --help همهٔ این فرمان‌ها را. هر فرمانی --profile <name> را می‌پذیرد.

Terminal window
lobbe upload weekly.m4a --series "Weekly sync" --wait

upload پیش از فرستادن هر چیزی فایل را بررسی می‌کند: باید وجود داشته باشد، از نوعی باشد که لُب می‌پذیرد (بر پایهٔ پسوندش) و از سقف ارسال توکن بزرگ‌تر نباشد. بعد شناسهٔ جلسه و هزینه‌اش را به دقیقه نشان می‌دهد. گزینه‌هایش: --series <name|id> (سری‌ای که خودتان ساخته‌اید)، --recorded-at <iso>، --title، --kind (در یک سری، نوع سری به کار می‌رود)، --language (match، fa یا en)، --skip-naming، --no-keyterms (واژگان شما و هزینهٔ اضافهٔ آن را کنار می‌گذارد) و --attach <file> (یک فایل PDF، PPTX یا DOCX که لُب آن را هم بخواند؛ دقیقه اضافه می‌کند). چرخهٔ یک جلسه را ببینید.

هر پاسخ دقیقه خرج می‌کند، پس lobbe ask اول قیمت را می‌گیرد. در ترمینال قیمت را نشان می‌دهد و از شما تأیید می‌خواهد. در یک اسکریپت، --max-minutes <n> به‌جای آن سقف می‌گذارد (پاسخ گران‌تر با کد خروج 4 رد می‌شود و هزینه‌ای ندارد)، یا --yes قیمت گفته‌شده را می‌پذیرد. بیرون از ترمینال و بدون هیچ‌کدام، رد می‌کند (کد خروج 1) و می‌گوید پاسخ چقدر هزینه دارد.

lobbe keyterms > words.txt واژگان را ذخیره می‌کند و lobbe keyterms set words.txt آن را با واژه‌های فایل جایگزین می‌کند (سطرهای خالی و سطرهایی که با # شروع می‌شوند کنار گذاشته می‌شوند). فایلی که هیچ واژه‌ای ندارد رد می‌شود، تا یک lobbe keyterms > words.txt ناموفق نتواند فهرست را ناخواسته پاک کند: --empty آن را عمداً پاک می‌کند. --series <id> با فهرست خودِ یک سری کار می‌کند؛ حساب، واژگان و حافظه را ببینید.

منتظر ماندن، و لینک نام‌گذاری

Section titled “منتظر ماندن، و لینک نام‌گذاری”

lobbe upload --wait، یا بعداً lobbe status <id> --wait، هر دقیقه یک بار (یا پس از Retry-Afterی که لُب بخواهد) وضعیت را می‌پرسد تا جلسه READY شود:

  • در NAMING، لُب منتظر است تا شما صداها را نام‌گذاری کنید. لینک نام‌گذاری یک بار نشان داده می‌شود و منتظر ماندن ادامه پیدا می‌کند تا نام‌گذاری را انجام دهید. --no-wait-naming به‌جای آن همان‌جا با کد خروج 3 می‌ایستد؛ lobbe skip-naming <id> بدون نام ادامه می‌دهد. نام‌گذاری گوینده‌ها را ببینید.
  • در FAILED، شکستی که درست‌شدنی است حداکثر سه بار دوباره اجرا می‌شود. وگرنه منتظر ماندن با کد خروج 2 تمام می‌شود. lobbe retry <id> یک جلسه را دستی دوباره اجرا می‌کند.

پیام‌های پیشرفت به stderr می‌روند، تا stdout برای اسکریپت تمیز بماند.

کد معنا
0 موفق؛ با --wait، جلسه READY است
1 خطای استفاده، قطع شبکه، یا هر خطای دیگری از API
2 جلسه FAILED شد: درست‌شدنی نبود، یا پس از سه بار تلاش دوباره هم شکست خورد
3 منتظر یک نفر: NAMING با --no-wait-naming
4 دقیقه: INSUFFICIENT_MINUTES، TOKEN_DAILY_CAP، DAILY_LIMIT_REACHED، PRICE_ABOVE_MAX
5 مجاز نیست: توکنی تنظیم نشده، UNAUTHORIZED، TOKEN_INVALID، TOKENS_DISABLED، TOKEN_NOT_ACCEPTED، DEVELOPER_MODE_OFF، TOKEN_SCOPE، SCOPE_DISABLED، PENDING_APPROVAL

هر خطا کد لُب، پیامش و گام بعد را در stderr نشان می‌دهد. توکنی که دسترسی لازمِ یک فرمان را ندارد با کد 5 بسته می‌شود و نام آن دسترسی را می‌برد؛ خطاها را ببینید.

--json پاسخ API را دقیقاً همان‌طور که رسیده چاپ می‌کند، روی هر فرمانی که چیزی را می‌خواند یا تغییر می‌دهد (events همیشه JSON چاپ می‌کند). درون v1 ممکن است فیلدهایی اضافه شوند (نسخه‌های API را ببینید)، پس فیلدهایی را که لازم دارید بخوانید و بقیه را نادیده بگیرید.

با --wait، upload --json وقتی منتظر ماندن تمام شد، هر طور که تمام شد، یک سند چاپ می‌کند:

{ "submitted": { "schemaVersion": 1, "recording": { "id": "…", "minutes": 12 } },
"status": { "schemaVersion": 1, "id": "…", "status": "READY" } }

submitted پاسخ فرستادن جلسه است و status وضعیت پایانی. اگر خودِ منتظر ماندن شکست بخورد، status برابر null است (کد خروج می‌گوید چرا)، تا اسکریپت هرگز شناسهٔ جلسه‌ای را که هزینه‌اش را داده گم نکند.

دنبال کردن فید رویدادها

Section titled “دنبال کردن فید رویدادها”

lobbe events فید رویدادها را هر رویداد در یک سطر، به‌صورت JSON فشرده و از قدیمی‌ترین، چاپ می‌کند؛ بعد می‌ایستد و نشانگری را که باید از آن ادامه داد در stderr نشان می‌دهد. برای روندی که همیشه اجرا می‌ماند:

Terminal window
lobbe events --after latest --cursor-file cursor.txt # once: take a cursor, from now
lobbe events --follow --cursor-file cursor.txt # then: read on, for good

--follow نمی‌ایستد: وقتی به آخر رسید، هر دقیقه یک بار دوباره می‌پرسد. خطای شبکه، خطای سرور (5xx) یا سقف درخواست (429، 503) فقط آن را متوقف می‌کند، به اندازهٔ یک دقیقه یا Retry-After، با یک سطر در stderr، تا از به‌روزرسانی‌های خود لُب هم جان سالم به در ببرد. با هر چیز دیگری، با کد خروج همان خطا تمام می‌شود: یک 4xx مثل TOKEN_INVALID (کد خروج 5)، یا فایل نشانگری که نمی‌تواند بنویسد.

--cursor-file نشانگر را در یک فایل نگه می‌دارد و وقتی سطرهای یک صفحه در stdout نوشته شدند، آن را جایگزین می‌کند. این فایل نشان می‌دهد lobbe تا کجا نوشته است، نه این‌که شما تا کجا پردازش کرده‌اید: برنامه‌ای که با سطرهای خوانده‌نشده متوقف شود، آن سطرها را از دست می‌دهد. برای این‌که هیچ رویدادی از دست نرود، خروجی را به ته یک فایل اضافه کنید و جای خواندنِ خودتان از آن فایل را جداگانه نگه دارید:

Terminal window
lobbe events --follow --cursor-file cursor.txt >> events.jsonl

برنامهٔ شما events.jsonl را از جایی که خودش ذخیره کرده می‌خواند و فقط پس از پردازش هر سطر آن جا را جلو می‌برد. فید هر رویداد را دست‌کم یک بار می‌دهد (توقفی میان یک صفحه و نشانگرش همان صفحه را تکرار می‌کند)، پس رویدادهایی را که پردازش کرده‌اید با id کنار بگذارید. جلسه‌ای را که آماده شده با lobbe get <id> بگیرید.

رویدادها ۳۰ روز نگه داشته می‌شوند. نشانگری قدیمی‌تر از این رد می‌شود (CURSOR_EXPIRED، کد خروج 1). کار را به همین ترتیب از سر بگیرید: نشانگر تازه‌ای با --after latest بگیرید، عقب‌ماندگی را با lobbe list جبران کنید، و بعد با --follow ادامه دهید؛ ۳۰ روز، و بعد 410 را ببینید.

lobbe توکن را در هدر Authorization فقط به سروری می‌فرستد که توکن برای آن ذخیره شده است، یا اگر LOBBE_BASE_URL را تنظیم کرده باشید به همان، و به هیچ جای دیگر. هرگز آن را چاپ نمی‌کند، در هیچ خروجی یا خطایی، --json هم.