Something went wrong. Try again.
ATProto-based AI Assistant Chat interface.
Something went wrong. Try again.
Files
- TypeScript 99%
- CSS <1%
- Docker <1%
README.md
Shared Computer Network AI Assistant Chat #
SCN Chat is an ATProto AI assistant chat interface allowing users to use their spaces capable PDS to host their chat history.
Status: early development. atproto spaces are in alpha, so expect breaking changes and do not store anything sensitive.
How it works #
- Every chat is its own space. Each conversation lives in a permissioned space on the user's PDS.
- Sharing uses the space's read policy. A chat can be shared read-only with specific people, or made public to anyone with an atproto account.
- Your PDS is the API. Any client can hold a conversation by writing records directly to the PDS. See lexicons/README.md for the conventions.
- Bring your own keys. Users can add API keys for any provider, admins can configure models for everyone. Any OpenAI-compatible endpoint is supported.
- No spaces yet? Due to the alpha nature of permissioned spaces, the first phase of this app supports storing chats in the app's own database. Users still need an atproto account to sign in.
Features #
Phase 1:
- One-on-one chat with streaming replies
- Read-only sharing
- Image attachments for vision models
- PDF text extraction
- Automatic chat titles
- Chat history search
- Web search and page fetch plugins
- User and admin model configuration
TODO #
- Image generation, as a plugin
- PDF OCR
- Speech to text and text to speech
- Encrypted conversations. See specs/encrypted-conversations.md
- Memories
- MCP servers as tools
- Browser and push notifications, and an installable PWA
- Move plugin settings and tool switches to the user's PDS, through a generic plugin settings lexicon
- Migrate chats between local storage and spaces, in both directions
- Provider-native tools, such as built-in web search, for the models that support them
- Web search for models without tool calling, by generating queries before the reply
- Web fetch through external services such as Firecrawl or Tavily extract, for pages that need JavaScript
- YouTube transcripts in web fetch
Getting started #
Requirements: #
- Node 22.18 or newer (Node 24 is recommended)
- pnpm 10
- An ATProto account to sign in with.
- A spaces enabled PDS (currently optional)
Setup #
- Install dependencies:
pnpm install cp .env.example .env.- Run
pnpm keysto generate secret keys. CopyOAUTH_PRIVATE_KEYSandSECRET_KEYinto your.env. - Put your DID in
ADMIN_DIDSso you can login and configure the application.
Start the app #
- Run
pnpm dev - Open http://127.0.0.1:3000 and sign in with your ATProto handle.
- Open Settings > Admin to add your plugins and models, and choose who else can sign in.
Deploying #
See docs/deployment.md.
Extending #
Model providers, tools, file ingesters, and turn hooks are all plugins, so anyone can build their own integration. See: