تا حالا PRDها روی فایلسیستم زندگی میکردند. کار میکند، ولی تجربهاش عالی نیست: نمیشود به هر زیرکار Context زیادی اضافه کرد، چون همهچیز در یک فایل تخت است. با معرفی یک ابزار Issue Tracking اختصاصی مثل Linear، سلسلهمراتب بین PRD والد و زیرکارها را به دست میآوریم — و میتوانیم خروجی مدل را دقیقتر هدایت کنیم.
چرا Linear؟
Linear یک Issue Tracker پایدار، ساده و در عین حال قدرتمند است. سود اصلیاش برای Ralph، سلسلهمراتب Parent/Sub-issue است: یک Issue والد (کل PRD) و چند Sub-issue که هرکدام Description و Context جدا دارند — پس میتوانی خروجی مدل را برای هر زیرکار جداگانه Steer کنی.
راهاندازی: API Key و کانفیگ
از Linear یک API Key بگیر (Settings → Security & access) و بهعنوان متغیر محیطی بگذار:
# ~/.zshrc
export LINEAR_API_KEY="lin_api_..."سپس Ralph CLI را بهروز کن و در `ralph.toml` تنظیمات Linear را اضافه کن:
tracker = "linear"
team = "SAP" # از URL تیم برمیداری
label = "agent-ralph" # فقط Issueهای با این Label برداشته میشوند
poll = 30 # هر ۳۰ ثانیه Linear را Poll کن
auto_create_pr = true # نیازمند احراز هویت GitHub CLI
[remote] # اگر YoloBox استفاده میکنی، Key را Forward کن
forward_env = ["LINEAR_API_KEY"]حالا با اجرای Ralph، در حالت Linear میچرخد؛ پایین صفحه میبینی چند ثانیه پیش Poll کرده و با R میتوانی Refresh اجباری کنی.
Skill مخصوص: prd-linear
یک Skill میسازیم (بر پایه PRD Skill قبلی) که بهجای فایل، PRD را با API در Linear ذخیره کند. چون Linear خودش CLI رسمی ندارد، به مدل میگوییم درخواستهای API را درونخطی بزند:
## Behavior
1. Read ralph.toml to extract the Linear team.
2. Resolve the team name to an ID via the API.
3. Resolve the backlog state ID.
4. Create a PARENT issue for the PRD.
5. Create a CHILD issue for each implementation task (with rich context).نمونهٔ واقعی همان درخواست GraphQL که مدل باید بزند:
curl -s https://api.linear.app/graphql \
-H "Authorization: $LINEAR_API_KEY" \
-H "Content-Type: application/json" \
-d '{"query":"{ teams { nodes { id name } } }"}'نمونه واقعی + Skill به نام grill-me
برای ساخت PRD یک فیچر «برجستهسازی محصول»، از Skill دیگری به نام `grill-me` (ساخته matpocock) استفاده میکنیم که بیرحمانه درباره فیچر ازت سؤال میپرسد تا به درک مشترک برسید:
Use grill-me. I want to use prd-linear to describe a new feature:
highlighting a product.مدل رگباری سؤال میپرسد: برجسته یعنی چه؟ (بخش مجزا در بالای فروشگاه با Badge)؛ چطور تعیین میشود؟ (فلگ `is_featured` در منو)؛ چند تا همزمان؟ (نامحدود)؛ رنگ Badge؟ (کهربایی، بالا-چپ)؛ و... بعد `continue with prd-linear` میزنیم و مدل Issue والد و سه Sub-issue را با Context غنی میسازد.
Dispatch و اجرای خودکار
Issue را روی `To Do` میگذاری و Label `agent-ralph` میزنی. Ralph در Poll بعدی خودش برش میدارد و شروع میکند. با `auto_create_pr` هم در پایان خودش PR میسازد. بعد از Merge، بهلطف Integration گیتهاب و Linear، Issue والد و فرزندها خودکار `Done` میشوند.
تزریق Skill بدون فایل: append-system-prompt
نکته فنی مهم: Claude یک فلگ `--append-system-prompt` دارد که دستور اضافه به System Prompt تزریق میکند:
claude --append-system-prompt "talk like a pirate"Ralph CLI با همین ترفند، نحوه کار با اسکریپت Linear را به مدل یاد میدهد (get issue، update، comment، swap labels) — یعنی عملاً یک Skill را بدون فایل Skill، در هر پوشهای تزریق میکند.
به زبان ساده
PRD تخت فایلی برای هر زیرکار Context جدا ندارد. Linear والد و فرزند میسازد؛ با یک Label تصمیم میگیری چه چیزی وارد حلقه شود.
مثال واقعی
فیچر «برجستهسازی محصول» با grill-me مصاحبه شد: Badge کهربایی بالا-چپ، فلگ is_featured، تعداد نامحدود. سه Sub-issue با Context غنی ساخته شد، Label agent-ralph + To Do، Ralph در Poll بعدی برداشت و آخر کار خودش PR ساخت.