تخطَّ إلى المحتوى
casty web على حاسوب محمول بالسمة الداكنة وعلى هاتف بالسمة الفاتحة

casty

عقدة قراءة Farcaster خاصة بك، وعميل يقرأ منها ويكتب من خلالها. ثلاثة أوامر، بلا مفاتيح API، وبلا رسوم غاز.
نافذة طرفيّة
git clone https://github.com/castyfun/casty.git && cd casty
./scripts/0-provision.sh # (0) compute: a server with a 2 TB volume, or --host user@ip for your own
./scripts/1-node.sh # (1) a Snapchain read node: installed, synced, with a tunnel to it
./scripts/2-client.sh # (2) a client: casty, an app key for your account, your feed from your node

ثلاثة أوامر: (0) موارد الحوسبة، (1) عقدة قراءة، (2) عميل. يشغّل ./scripts/deploy.sh الثلاثة دفعة واحدة، ويشرح الطريق كله كل خطوة والبروتوكول الذي تقوم عليه.

النسخة العمودية، 59 ثانية

يضع casty عقدة قراءة Snapchain، وهي نسخة كاملة من Farcaster، على مضيف تتحكم فيه، ويمنحك عميلًا لا يتصل بشيء غيرها: أمرًا في الطرفية وصفحة للمتصفح والهاتف. تُقرأ تغذيتك وإشارات الذِكر وسلاسل المحادثة من عقدتك؛ وتخرج من خلالها منشوراتك وردودك وإعجاباتك وإعادات النشر والمتابعات. لا تقف واجهة API مستضافة بينك وبين الشبكة، فلا يوجد مفتاح API تحصل عليه ولا حدّ لمعدّل الطلبات تلتزم به.

خادم مع قرص بسعة 2 TB وجدار حماية على Hetzner أو AWS، وعليه Snapchain، والعميل على جهازك، والصفحة على المضيف خلف HTTPS. تتزامن العقدة لبضع ساعات.

نافذة طرفيّة
git clone https://github.com/castyfun/casty.git && cd casty
./scripts/deploy.sh --fid <your fid> --domain node.example.org

لديك بالفعل جهاز Linux فيه 2 TB من القرص الحر؟ أضف -- --host user@ip.

casty على عقدة تعمل بالفعل

Section titled “casty على عقدة تعمل بالفعل”

بلا خادم: يتصل casty بأي عقدة Snapchain، عقدة لك على جهاز آخر أو عقدة عامة، ويتذكرها. جاهز خلال دقيقة.

نافذة طرفيّة
git clone https://github.com/castyfun/casty.git && cd casty
./scripts/2-client.sh --node https://snap.farcaster.xyz:3381 --fid <your fid>

ثم ./bin/casty web، وتحت «you»، «add a key with your wallet».

الصق موجّهًا واحدًا في Claude Code أو Codex أو Cursor أو أي وكيل برمجة آخر. يقرأ llms.txt، ويسألك أيّ الطريقتين تريد، ولا يطلب منك عبارة البذرة أبدًا.

Set up casty for me: https://github.com/castyfun/casty.
Read https://castyfun.github.io/casty/llms-full.txt first.
...

تأتي القراءات من عقدتك، فتكون التغذية بسرعة الجهاز الذي تعمل عليه. وتُوقَّع الكتابات على جهازك بمفتاح تطبيق لا يحمله إلا casty، وتنقلها عقدتك إلى المدقِّقين. يُضاف المفتاح برسالة موقّعة واحدة، تأذن بها محفظتك في المتصفح: بلا معاملة، وبلا رسوم غاز، وبلا Ethereum RPC.

  • ثلاثة سكربتات وأمر واحد. يستأجر 0-provision.sh الخادم أو يفحص جهازك، ويثبّت 1-node.sh برنامج Snapchain وينتظر اكتمال مزامنته، ويثبّت 2-client.sh أداة casty ويضيف مفتاحًا. ويشغّلها deploy.sh بالترتيب ويتابع من حيث توقف التشغيل السابق.
  • عميل للطرفية. casty feed وcasty cast وcasty like 2: نص عادي لك، و--json للسكربتات، وأرقام تنتقل من أمر إلى الذي يليه.
  • صفحة للمتصفح والهاتف. التغذية وسلاسل المحادثة وإشارات الذِكر والملفات الشخصية ومربع كتابة، بسمة فاتحة وداكنة، مع اختصارات لوحة المفاتيح على الحاسوب المحمول والتثبيت على الشاشة الرئيسية على الهاتف.
  • عقدتك، من أي مكان. يضع casty serve الصفحة على مضيف العقدة خلف HTTPS، مع فهرس للتغذية يجيب فورًا وإشعارات دفع لإشارات الذِكر والردود.
  • مفاتيح تراها. كل مفتاح تطبيق لحسابك، وما يجوز له أن يوقّعه، ومتى تنتهي صلاحيته، وإلغاؤه من الطرفية أو بالمفتاح نفسه.
  • مُختبَر بدون عقدة. تتحقق عقدة Snapchain وهمية من كل توقيع، فيُجري العميل والسكربتات والصفحة فحوصاتها دون اتصال في CI.
$ casty feed --limit 3
1 @casty-test · 0s · via casty
Reading the feed from my own node. No API key, no rate limit.
2 @user-2000000002 · 22d · via app-alpha
@casty-test thanks for the pointer, it worked.
https://example.com/2000000002/3
3 @user-2000000011 · 22d · via app-beta
Reading the Snapchain docs on a train. A good way to spend an hour.
$ casty like 2
liked 2000000002:0x973d398ad75e1f25fa780085f3c22d30b01d2504
  • حساب Farcaster للاختبار: معرّف fid له وحدة تخزين واحدة على الأقل، ومحفظة تحمل العنوان المسجّل له، أو عبارة البذرة لذلك العنوان. يستخدم casty العبارة مرة واحدة، لتوقيع طلب المفتاح، ولا يكتبها على القرص أبدًا.
  • مضيف. إما بيانات اعتماد Hetzner Cloud (HCLOUD_TOKEN وأداة hcloud) أو AWS (أداة AWS CLI v2 مع ملف تعريف أو مفتاح وصول)، أو وصول SSH إلى جهاز لديك بالفعل يستطيع تشغيل Docker. راجع عقدة في المنزل للحالة الأخيرة.
  • زوج مفاتيح SSH، افتراضيًا ~/.ssh/id_ed25519 و~/.ssh/id_ed25519.pub.
  • على جهازك: ssh وcurl وjq. ولا يلزم Node.js 22.12 أو أحدث إلا لبناء العميل بنفسك (2-client.sh --from-source). يعمل على macOS وLinux؛ وعلى Windows، شغّل السكربتات داخل WSL2.

يحتاج مضيف العقدة إلى ما يطلبه Snapchain: ذاكرة 16 GB، و4 vCPU، و2 TB من القرص الحر، وعنوان IP عام (البدء). على مضيف مستأجر، تختار الخطوة 0 الخادم والقرص، وتفحص الخطوة 1 المضيف قبل أن تثبّت أي شيء.

الخطوة 1 هي الأطول: عند أول تشغيل تنزّل العقدة لقطة بحجم عدة مئات من GB، ثم تلحق بالكتل التي أُنتجت منذ تلك اللقطة. توقّع ساعات. ينتظر 1-node.sh ويطبع مقدار تأخر العقدة بعد كل فحص. الضغط على Ctrl-C ينهي الانتظار فقط؛ وتواصل العقدة المزامنة، ويستأنف ./scripts/1-node.sh status --wait الانتظار مجددًا.

لا يعرف casty أسعار مزوّدك. يسرد التشغيل الفعلي لـ 0-provision.sh الخادم والقرص وجدار الحماية الذي سينشئه، ويذكر أنها تُحاسَب حتى تحذفها، ولا يتابع إلا بعد أن تكتب اسم الخادم مجددًا. ويحذف ./scripts/0-provision.sh --destroy الثلاثة.

يأتي المستودع مع عقدة Snapchain وهمية تقدّم واجهة HTTP API نفسها من بيانات ثابتة، وتتحقق من التواقيع على كل رسالة تُرسل إليها. بها يعمل العميل كله دون اتصال:

نافذة طرفيّة
pnpm install --frozen-lockfile
pnpm demo

يشغّل pnpm demo العقدة الوهمية على منفذ حر، ويضيف مفتاح تطبيق بعبارة الاختبار BIP-39 test test test test test test test test test test test junk، ويقرأ التغذية مع منشورات تطبيق واحد وبدونها، وينشر منشورًا، ويعجب بآخر، ثم يحذف إعداداته المؤقتة في النهاية. تبدأ معرّفات fid في البيانات الثابتة من 2000000001 ولا تخص أحدًا.

يقوم pnpm demo:web بالتهيئة نفسها، ثم يقدّم casty web، صفحة المتصفح والهاتف، على منفذ حر حتى تضغط Ctrl-C.

Usage: deploy.sh [--domain <name> | --tailscale] [--read-only] [--fid <fid>] [--from-source]
[--env <file>] [--yes] [--dry-run] [-- <0-provision.sh options>]
Runs, in order: 0-provision.sh (unless --env's file already describes a host; with --domain,
again on that host to open 80 and 443), 1-node.sh (the node, the wait for its sync, the
tunnel), 2-client.sh (the client, an app key, the feed) and, with a front named, 1-node.sh
serve. Every step is safe to run again: the same command picks up where a run stopped.
--domain <name> serve the page on the host as https://<name> (Caddy; opens 80 and 443)
--tailscale serve it as the host's name on your tailnet instead
--read-only a page that reads only: no app key or passphrase leaves this machine
--fid <fid> no seed phrase: 2-client.sh --fid; add the key in ./bin/casty web with your
wallet, then run the same command again for the page on the host
--from-source build the client here with Node and pnpm instead of downloading it
--env <file> node.env to write or read (default: node.env)
--yes do not ask before creating anything
--dry-run print what provisioning and the node would run; the client is skipped
-- <options> passed to 0-provision.sh, e.g. -- --provider aws --region eu-west-1
Exit codes: 0 ok, 2 bad arguments, otherwise the code of the step that stopped.

ابدأ بـ 0. تجهيز مضيف. إن أردت أن تعرف ما تُعِدّه السكربتات قبل تشغيلها، فاقرأ عقد القراءة والمدقِّقون و عنوان الحفظ ومفاتيح التطبيقات. تسرد صفحة الأمان كل سر معني وكيفية إلغاء كل واحد منها.