{"kind":"doc","doc":{"title":"Create and Use Farcaster Signers","section":{"slug":"posts","name":"Posts"},"rkey":"1745543922514-create-and-use-farcaster-signers","cid":"bafkreifyh355rhjzaz4yjsgtz5oofdziuxqnjuoi5w4kaw5t6qak7r3kgu","renderKey":"bafkreifyh355rhjzaz4yjsgtz5oofdziuxqnjuoi5w4kaw5t6qak7r3kgu@2025-04-24T18:18:00Z@2025-05-24T16:58:00Z@Posts|","href":"/posts/1745543922514-create-and-use-farcaster-signers","publishedAt":"2025-04-24T18:18:00Z","updatedAt":"2025-05-24T16:58:00Z","tags":["farcaster","development","tutorial"],"description":"I got nerdsniped on Farcaster today. @keccers.eth was talking about the Sent from coinbasewallet tag. You usually only see these on third-party clients, which is why @artlu having","readingMinutes":2,"markdown":"I got nerdsniped on Farcaster today.\n\n![](blob://bafkreicidbwpjqrhcs4iswygur4bczh4yo3oimze2qlmkpsnvg4zyg3h7i)\n\n[@keccers.eth](https://warpcast.com/keccers.eth) was talking about the `Sent from coinbasewallet` tag. You usually only see these on third-party clients, which is why [@artlu](https://warpcast.com/artlu) having his own stands out on the timeline.\n\nMy curiosity was piqued, I started poking around, and soon I had landed somewhere between\n\n![](blob://bafkreiawud2ld6km55n52d44rygzlbzhodewlqkfpzhk33plj6rbqstmqi)\n\nand\n\n![](blob://bafkreibptrhbsl5ostryapgb7u62m5mp5qyitaeodgthmrycigbbf3dzrq)\n\nNerdsniped. [@stevedylandev.eth](https://warpcast.com/stevedylandev.eth) joined the conversation with the resources he'd already built.\n\n- Cast Keys: https://github.com/stevedylandev/cast-keys\n- Mast-cli: https://github.com/stevedylandev/mast-cli\n\nHe even posted a video on Youtube as a walkthrough for the process: https://www.youtube.com/watch?v=rPr8A9Ntp1E\n\n### How to post with your own **\"sent from …​\"** tag\n\n1. **Clone Cast Keys and configure it**\n\n    ```bash\n    git clone https://github.com/stevedylandev/cast-keys\n    cd cast-keys\n    npm install                       # install deps for Cast Keys\n    cp .env.v.sample .env.local\n    ```\n\n    Edit `.env.local`:\n\n    ```text\n    DEVELOPER_FID=<FID that should appear in \"sent from …\">\n    DEVELOPER_MNEMONIC=<that handle's 12-word phrase>\n    ```\n\n2. **Start Cast Keys and create a signer**\n\n    ```bash\n    npm run dev\n    ```\n\n    Open `http://localhost:3000`, click **Create Signer**, scan the QR in Warpcast, pay the Warps, and copy the **private key** (omit the leading `0x`).\n\n3. **Install the Mast CLI**\n\n    **Script (one-liner)**\n\n    ```bash\n    curl -fsSL https://stevedylan.dev/mast.sh | bash\n    ```\n\n    **Homebrew**\n\n    ```bash\n    brew install stevedylandev/mast-cli/mast-cli\n    ```\n\n4. **Authorise Mast with your signer**\n\n    ```bash\n    mast auth\n    # 1 – enter your personal FID\n    # 2 – paste the private key\n    ```\n\n5. **Post from the terminal**\n\n    ```bash\n    mast new\n    # type the message → Enter\n    # optional: up to two URLs → Enter\n    # optional: channel → Enter\n    ```\n\n6. **Revoke a signer when necessary**\n    Warpcast → Settings → Advanced → Manage Connected Apps → select the key → **Delete** (no cost).\n\n**Why run Cast Keys locally?**\nThe hosted tool at **castkeys.xyz** always uses @castkeys' credentials, so every post shows **\"sent from castkeys.\"** Running it yourself puts your name on the marquee and keeps the keys in your own hands.\n\n---\n\nIt works. I can cast with a custom signer. Next step: a vanity account.\n\n![](blob://bafkreihjpccgclqopmo4tscdip4h6llemkarjlqvrce64you3y27nljt2q)","media":{"bafkreicidbwpjqrhcs4iswygur4bczh4yo3oimze2qlmkpsnvg4zyg3h7i":{"mime":"image/png","width":621,"height":534,"dominantColor":"#f5f5f5","blurhash":"L3Ss5000~W~X4n8_aKs;nTt79F9F","thumbCid":null},"bafkreiawud2ld6km55n52d44rygzlbzhodewlqkfpzhk33plj6rbqstmqi":{"mime":"image/png","width":620,"height":174,"dominantColor":"#f8f8f9","blurhash":"L4S?DV00MyRjjbIVRjRk?bRjD%t7","thumbCid":null},"bafkreibptrhbsl5ostryapgb7u62m5mp5qyitaeodgthmrycigbbf3dzrq":{"mime":"image/png","width":1290,"height":555,"dominantColor":"#f9f9fa","blurhash":"L5S~x501IUjvM{IBM|s;xuxaWCof","thumbCid":null},"bafkreihjpccgclqopmo4tscdip4h6llemkarjlqvrce64you3y27nljt2q":{"mime":"image/png","width":1290,"height":503,"dominantColor":"#201927","blurhash":"L76tza~q.8%M?c?c?HxutRxuxuof","thumbCid":null}},"series":{},"related":[{"title":"llm-txt.fun","href":"/experiments/1789491297000-llm-txt-fun","section":"experiments","description":"A suite of tools that generates llm-txt files from Farcaster profiles, Bluesky profiles, RSS/Atom feeds, and Git repos, with MPP and x402 micropayments covering more computationally intensive actions.","publishedAt":"2026-09-20T05:14:23Z"},{"title":"Farfield","href":"/posts/1779066375000-farfield","section":"posts","description":"Five small Go services, single binaries, content-addressed records, running on my homelab. The new backend for the site.","publishedAt":"2026-05-18T01:06:15Z"},{"title":"What's the $POINTS?","href":"/posts/1764868806838-whats-the-points","section":"posts","description":"$POINTS was deployed on December 13th, 2023 and made a lot of people very angry","publishedAt":"2025-12-04T09:20:00Z"},{"title":"Breaking the AI in Parallax","href":"/posts/1746765173152-breaking-the-ai-in-parallax","section":"posts","description":"I used simple jailbreaks to extract information that Parallax's AI mystery-game characters were not supposed to reveal.","publishedAt":"2025-05-08T21:32:00Z"},{"title":"Scalability → Buildability","href":"/posts/1739212426700-scalability-buildability","section":"posts","description":"A system scales internally when each feature leaves behind primitives that make the next one easier to build.","publishedAt":"2025-02-10T10:33:00Z"},{"title":"Revisiting Obsidian as a CMS","href":"/posts/1699332127006-revisiting-obsidian-as-a-cms","section":"posts","description":"A home-built publishing system using Obsidian for writing, GitHub for storage, and Next.js for rendering.","publishedAt":"2023-11-06T08:57:00Z"}],"prev":{"title":"Code and Cloth","href":"/posts/1743724413087-code-and-cloth"},"next":{"title":"Breaking the AI in Parallax","href":"/posts/1746765173152-breaking-the-ai-in-parallax"}}}