Ir al contenido
casty web en un portátil con el tema oscuro y en un teléfono con el tema claro

casty

Tu propio nodo de lectura de Farcaster y un cliente que lee de él y escribe a través de él. Tres comandos, sin claves de API, sin gas.
Ventana de terminal
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

Tres comandos: (0) cómputo, (1) un nodo de lectura, (2) un cliente. ./scripts/deploy.sh ejecuta los tres de una vez, y El camino completo explica cada paso y el protocolo que hay detrás.

Versión vertical, 59 s

casty pone un nodo de lectura de Snapchain, una copia completa de Farcaster, en un host que tú controlas, y te da un cliente que no habla con nada más: un comando de terminal y una página para el navegador y el teléfono. Tu feed, tus menciones y tus hilos se leen de tu nodo; tus casts, respuestas, likes, recasts y follows salen a través de él. No hay ninguna API alojada entre tú y la red, así que no hay clave de API que conseguir ni límite de peticiones que respetar.

Un servidor con un volumen de 2 TB y un firewall en Hetzner o AWS, Snapchain en él, el cliente en tu máquina y la página en el host detrás de HTTPS. El nodo se sincroniza durante unas horas.

Ventana de terminal
git clone https://github.com/castyfun/casty.git && cd casty
./scripts/deploy.sh --fid <your fid> --domain node.example.org

¿Ya tienes una máquina Linux con 2 TB libres? Añade -- --host user@ip.

Sin servidor: casty se conecta a cualquier nodo Snapchain, uno tuyo en otra máquina o uno público, y lo recuerda. Listo en un minuto.

Ventana de terminal
git clone https://github.com/castyfun/casty.git && cd casty
./scripts/2-client.sh --node https://snap.farcaster.xyz:3381 --fid <your fid>

Luego ./bin/casty web y, en «you», «add a key with your wallet».

Pega un prompt en Claude Code, Codex, Cursor u otro agente de programación. Lee llms.txt, te pregunta cuál de las dos opciones quieres y nunca te pide la frase semilla.

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

Las lecturas vienen de tu nodo, así que el feed es tan rápido como la máquina en la que funciona. Las escrituras se firman en tu máquina con una clave de aplicación que solo tiene casty, y tu nodo las retransmite a los validadores. La clave se añade con un solo mensaje firmado, aprobado por tu billetera en el navegador: sin transacción, sin gas, sin RPC de Ethereum.

  • Tres scripts y un comando. 0-provision.sh alquila el servidor o comprueba el tuyo, 1-node.sh instala Snapchain y espera a que se sincronice, 2-client.sh instala casty y añade una clave. deploy.sh los ejecuta en orden y retoma donde se detuvo una ejecución.
  • Un cliente de terminal. casty feed, casty cast, casty like 2: texto plano para ti, --json para scripts, números que pasan de un comando al siguiente.
  • Una página para el navegador y el teléfono. El feed, los hilos, las menciones, los perfiles y un cuadro de redacción, en claro y en oscuro, con atajos de teclado en un portátil y la opción de instalarla en la pantalla de inicio de un teléfono.
  • Tu nodo, desde cualquier lugar. casty serve pone la página en el host del nodo detrás de HTTPS, con un índice del feed que responde al instante y notificaciones push para menciones y respuestas.
  • Claves a la vista. Cada clave de aplicación de tu cuenta, lo que puede firmar, cuándo caduca, y su revocación desde la terminal o con la propia clave.
  • Probado sin un nodo. Un nodo Snapchain simulado comprueba cada firma, así que el cliente, los scripts y la página ejecutan sus comprobaciones sin conexión en 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
  • Una cuenta de prueba de Farcaster: un fid con al menos una storage unit, y una billetera que tenga la dirección en la que está registrado, o la frase semilla de esa dirección. casty usa la frase una sola vez, para firmar la solicitud de clave, y nunca la escribe en disco.
  • Un host. O bien credenciales de Hetzner Cloud (HCLOUD_TOKEN y la CLI hcloud) o de AWS (la AWS CLI v2 y un perfil o una clave de acceso), o bien acceso SSH a una máquina que ya tienes y que puede ejecutar Docker. Consulta Un nodo en casa para el último caso.
  • Un par de claves SSH, por defecto ~/.ssh/id_ed25519 y ~/.ssh/id_ed25519.pub.
  • En tu máquina: ssh, curl y jq. Node.js 22.12 o más reciente solo para compilar el cliente tú mismo (2-client.sh --from-source). macOS y Linux funcionan; en Windows, ejecuta los scripts en WSL2.

El host del nodo necesita lo que pide Snapchain: 16 GB de RAM, 4 vCPU, 2 TB de disco libre y una IP pública (getting started). En un host alquilado, el paso 0 elige el servidor y el volumen, y el paso 1 comprueba el host antes de instalar nada.

El paso 1 es el que más tarda: en su primer arranque el nodo descarga una instantánea de varios cientos de GB y luego se pone al día con los bloques posteriores a esa instantánea. Cuenta con horas. 1-node.sh espera e imprime cuánto va retrasado el nodo tras cada comprobación. Pulsar Ctrl-C termina solo la espera; el nodo sigue sincronizándose, y ./scripts/1-node.sh status --wait retoma la espera.

casty no conoce los precios de tu proveedor. Una ejecución real de 0-provision.sh enumera el servidor, el volumen y el firewall que está a punto de crear, dice que se facturan hasta que los borres, y solo sigue adelante cuando escribes de vuelta el nombre del servidor. ./scripts/0-provision.sh --destroy borra los tres.

El repositorio incluye un nodo Snapchain simulado que sirve la misma API HTTP desde fixtures y comprueba las firmas de cada mensaje que se le envía. Con él, el cliente entero funciona sin conexión:

Ventana de terminal
pnpm install --frozen-lockfile
pnpm demo

pnpm demo arranca el simulado en un puerto libre, añade una clave de aplicación con la frase de prueba BIP-39 test test test test test test test test test test test junk, lee el feed con y sin los casts de una aplicación, publica un cast, le da like a uno y al final borra su configuración temporal. Los fids de los fixtures empiezan en 2000000001 y no pertenecen a nadie.

pnpm demo:web hace la misma preparación y luego sirve casty web, la página para el navegador y el teléfono, en un puerto libre hasta que pulses 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.

Empieza por 0. Preparar un host. Si quieres saber qué configuran los scripts antes de ejecutarlos, lee Nodos de lectura y validadores y Dirección de custodia y claves de aplicación. Seguridad enumera cada secreto involucrado y cómo revocar cada uno.