بازگشت به کتابخانهکتابخانه6.1ردیابی PRD با Linear
تکنیک Ralph WiggumTHE RALPH WIGGUM TECHNIQUEاجرای ایجنت کدنویس در حلقه — از یک اسکریپت Bash تا ارکستراسیون کامل
v1.0.0
LESSON 6.1فصل ۶Linear و انسان در حلقه

ردیابی PRD با Linear

  • ~۱۲ دقیقه
  • ۵ پرسش
  • متن را انتخاب کن تا هایلایت شود

تا حالا PRDها روی فایل‌سیستم زندگی می‌کردند. کار می‌کند، ولی تجربه‌اش عالی نیست: نمی‌شود به هر زیرکار Context زیادی اضافه کرد، چون همه‌چیز در یک فایل تخت است. با معرفی یک ابزار Issue Tracking اختصاصی مثل Linear، سلسله‌مراتب بین PRD والد و زیرکارها را به دست می‌آوریم — و می‌توانیم خروجی مدل را دقیق‌تر هدایت کنیم.

چرا Linear؟

Linear یک Issue Tracker پایدار، ساده و در عین حال قدرتمند است. سود اصلی‌اش برای Ralph، سلسله‌مراتب Parent/Sub-issue است: یک Issue والد (کل PRD) و چند Sub-issue که هرکدام Description و Context جدا دارند — پس می‌توانی خروجی مدل را برای هر زیرکار جداگانه Steer کنی.

Linear
ابزار مدیریت Issue که به‌عنوان Control Plane حلقه استفاده می‌شود؛ سلسله‌مراتب والد/فرزند و API قوی دارد.
Issue
یک واحد کار در Linear. Issue والد کل PRD است و هر Sub-issue یک وظیفه پیاده‌سازی با Context خودش.
Control Plane
لایه‌ای که از آن کار را Dispatch می‌کنی. Linear این نقش را بازی می‌کند — حتی از اپ موبایل.

راه‌اندازی: 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"]
Polling
هر چند ثانیه یک‌بار پرسیدن «کار جدیدی هست؟». Ralph هر ۳۰ ثانیه Linear را می‌پرسد؛ نرخ‌محدودیت Linear ۵۰۰۰ درخواست در ساعت است، پس جا داریم.
Label
برچسب Issue. Ralph فقط Issueهای دارای Label مشخص (agent-ralph) را برمی‌دارد — کنترل دستی بر اینکه چه چیزی به حلقه برود.

حالا با اجرای 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 غنی می‌سازد.

grill-me
Skill ساده‌ای که مدل را وادار می‌کند بی‌رحمانه درباره هر جنبه فیچر مصاحبه کند تا ابهام صفر شود؛ ورودی عالی برای PRD.

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، در هر پوشه‌ای تزریق می‌کند.

DIAGRAMگردش کار Linear
grill-me + prd-linear
Issue والد + Sub-issues در Linear
Label agent-ralph + To Do
Ralph (Poll) برمی‌دارد
auto PR → Merge → Done خودکار

به زبان ساده

PRD تخت فایلی برای هر زیرکار Context جدا ندارد. Linear والد و فرزند می‌سازد؛ با یک Label تصمیم می‌گیری چه چیزی وارد حلقه شود.

مثال واقعی

فیچر «برجسته‌سازی محصول» با grill-me مصاحبه شد: Badge کهربایی بالا-چپ، فلگ is_featured، تعداد نامحدود. سه Sub-issue با Context غنی ساخته شد، Label agent-ralph + To Do، Ralph در Poll بعدی برداشت و آخر کار خودش PR ساخت.

دانش‌سنجی

آزمون درس

۵ Q
01
مزیت اصلی Linear نسبت به PRDهای فایلی تخت چیست؟
02
نقش Label در حالت Linear چیست؟
03
Skill به نام grill-me چه می‌کند؟
04
بعد از Merge شدن PR، چطور Issueهای Linear خودکار Done می‌شوند؟
05
ترفند --append-system-prompt چطور به Ralph کمک می‌کند؟