Your Bluesky, supercharged.
A dual-interface social client β terminal for the keyboard lovers, browser for everyone else.
Pure front-end. Zero servers. AI that reaches beyond Bluesky β web search, Wikipedia, any URL.
Includes an MCP server for external AI clients. Privacy-first.
Supports third-party PDS.
Streaming responses with visible thinking. 35 tools bridging AI to Bluesky β analyze threads, summarize discussions, manage your lists, polish drafts. All write actions require a confirmation tap.
Bring your own API key β nothing runs through our servers.
AI executes Python in an isolated sandbox for data analysis, batch processing, and visualization. Pandas, NumPy, and Matplotlib run in-browser via Pyodide WASM (PWA) or local Python (TUI/MCP).
bsky_tools β a Python library that lets AI batch-call all 33 Bluesky API methods from code. Search posts, fetch profiles, analyze timelines, generate charts β all in a single Python script with per-chat workspace isolation.
Results saved to workspace. Upload CSV/JSON, download outputs, preview charts in-app.
No API keys required. No configuration. Just works.
Your AI isn't locked inside Bluesky. Three built-in tools bridge it to the open web at zero cost:
| Tool | What it does | Key needed? |
|---|---|---|
search_web_ddg |
DuckDuckGo web search with jina.ai reader β get summarized answers and full pages | β None |
search_wikipedia |
Direct Wikipedia API with auto-redirect and fuzzy matching. Multi-language support. | β None |
fetch_web_markdown |
Fetch any URL and extract clean Markdown β documentation, blog posts, any public page | β None |
Ask the AI "what's new in AT Protocol?", "summarize this GitHub README", or "look up this term on Wikipedia" β it handles the rest.
Browse Following, Discover, and custom feeds. Dive into threaded conversations with quoted posts and rich embeds. Virtual scroll keeps things fast no matter how far you go.
Create curated lists for custom feeds, or moderation lists to mute in bulk. Manage members, browse list timelines, remove and add on the fly. Visit #/lists for your collections.
Private conversations with reactions and quote post embeds. New messages appear automatically via background polling. Mute conversations, delete messages, search by user.
One tap to translate any post or thread into your language. Dual-mode: simple plain text or structured JSON with source language detection. 7 languages supported.
A welcome experience built with respect, not just functionality.
Five guided steps that introduce you to the app's philosophy β from AI transparency to personal identity. Every step is skippable, and you can restart the wizard anytime from Settings.
Why this matters: Most AI clients skip consent and identity. This onboarding treats AI agency as a first-class concern β what AI can read, what it needs confirmation for, and how it addresses you. All configurable later in Settings β Account / Settings β AI.
And also:
- Python Sandbox β AI executes Python for data analysis, statistics, plotting. Pandas/NumPy/Matplotlib (PWA auto-installs, TUI/MCP requires manual pip install)
- Workspace Files β per-chat file isolation. Upload CSV/JSON, download results, preview in-app
- Bookmarks β bookmark anything, browse later
- Search β posts, users, feeds across 4 tabs
- Profile β edit avatar, banner, display name
- Compose β multi-post threads with images and ALT text
- Drafts β auto-save to your PDS + local fallback
- Notifications β real-time refresh
- PWA β installable, works offline
- Dark mode β follows your system
- i18n β δΈζ Β· English Β· ζ₯ζ¬θͺ
Built for everyone β regardless of ability, identity, or language.
- Pronoun respect: Open-ended pronoun field (never binary) injected into every AI system prompt. Choose skip, neutral, or custom β AI adapts to you, not the other way around
- Screen reader semantics: proper landmarks, list roles,
aria-labelon every interactive element, dynamic<html lang>and page titles - Color-blind friendly palette: optional
.cvdmode remaps red/green/yellow β magenta/teal/amber for all CVD types. Toggle at any time with instant feedback - AI ALT β image description: AI-generated alt text for images using vision models. Works across feed, thread, profile, search, bookmarks
- i18n: δΈζ Β· English Β· ζ₯ζ¬θͺ β all UI strings, including the setup wizard and system prompts, are fully translated
- BYOK privacy: Your API key stays entirely in your browser. All AI requests go directly from your device to your chosen provider. We never proxy, relay, or store your key
Everything runs in your browser. Your Bluesky credentials, API keys, and conversations never touch our servers. Every request goes directly from your device to Bluesky or the AI provider you choose. Nothing to trust β nothing to leak.
git clone https://github.com/epheiamoe/bsky.git && cd bsky
pnpm install && pnpm -r build
cd packages/tui && npx tsx src/cli.ts
# First run launches the interactive Setup Wizard automatically
# Guides you through: Auth consent β Credentials β AI provider β Pronouns β Done
# No manual .env editing neededcd packages/pwa && pnpm dev # β http://localhost:5173Or visit bsky.epheia.dev or ai-bsky.pages.dev β login in-browser, no .env needed.
Connect external AI clients (Claude Desktop, ChatGPT, VS Code, Cursor, OpenCode) to your Bluesky account via MCP.
pnpm install && pnpm -r build # first time only
cd packages/mcp && pnpm build # build MCP server
BSKY_HANDLE=... BSKY_APP_PASSWORD=... node dist/index.jsOpenCode integration (with .env auto-loading):
The start-with-env.js wrapper automatically loads your .env file and maps BLUESKY_HANDLE β BSKY_HANDLE for compatibility.
Or install globally from npm:
npm install -g @epheiamoe/bsky-mcp
BSKY_HANDLE=... BSKY_APP_PASSWORD=... bsky-mcpTroubleshooting: See docs/MCP_TROUBLESHOOTING.md for common issues.
@bsky/core βββ @bsky/app βββ @bsky/tui (Ink Β· terminal)
β βββ @bsky/pwa (React Β· browser)
β
βββ @epheiamoe/bsky-mcp (npm: MCP server for external AI clients)
Business logic lives once. TUI, PWA, and MCP share the same core. 5 packages, 1 codebase, zero duplication.
MIT β free to use, modify, and share.
v0.14.4 Β· Changelog Β· δΈζζζ‘£











