Sharing Bots
AI Supreme Council encodes bot configurations directly into the URL fragment (the part after #). This means you can share a bot by simply sharing a link -- no server, no account, no setup required.
How It Works
When you share a bot, the configuration (name, provider, model, system prompt, temperature, max tokens, persona, and council settings) is processed through a compression pipeline:
- Serialize: The config object is converted to minimal JSON using short keys (
n,p,m,s,t,x, etc.). Only non-default values are included -- a bot with default temperature (0.7) omits that field entirely. - Compress: The JSON string is compressed using
deflate-rawvia the browser's nativeCompressionStreamAPI. - Encode: The compressed bytes are encoded in Base80 using the FRAG80 alphabet -- a custom 80-character set optimized for URL fragment density.
- Prefix: A VLQ (Variable-Length Quantity) version byte is prepended. Bot configs use version 1, which encodes to the character
B.
The result is a self-contained URL:
https://aiscouncil.com/#B3kF9xR2mN7pQ...
The FRAG80 Alphabet
The Base80 encoding uses a carefully chosen 80-character alphabet that is URL-safe and does not require percent-encoding in URL fragments:
ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-._~$&'()*+,;=:@/?
This includes uppercase and lowercase letters, digits, and URL-safe special characters. The encoding processes 7 bytes at a time into 9 Base80 characters, achieving high information density.
URL Format
https://aiscouncil.com/#B{base80_payload}
| Component | Description |
|---|---|
https://aiscouncil.com/ | The app domain |
# | Fragment identifier (never sent to any server by the browser) |
B | VLQ version prefix -- version 1 for bot configs |
{base80_payload} | Deflate-compressed bot config encoded in Base80 |
Because the bot config lives entirely in the URL fragment (#...), it is never sent to any server. URL fragments are processed client-side only -- this is enforced by the HTTP specification (RFC 3986). AI Supreme Council servers never see the encoded config.
How to Share a Bot
- Configure your bot (name, model, system prompt, persona, etc.)
- Click the Share button in the header
- The URL is generated and copied to your clipboard
- Send the URL through any channel -- email, chat, social media, QR code
The recipient opens the URL and gets your exact bot configuration. They add their own API key and start chatting.
You can also copy the URL directly from the address bar after clicking Share, since the address bar updates to include the encoded bot config in the fragment.
What IS Shared
The shared URL contains everything needed to recreate the bot:
- Bot name (
n) - Provider and model selection (
p,m) - System prompt (
s) - Temperature (
t) and max tokens (x) - Top P, frequency penalty, presence penalty
- Stop sequences, response format
- Reasoning effort setting
- Persona settings (icon, description, color)
- Council configuration (members, style, chairman, voting mode, debate rounds) if applicable
What is NOT Shared
The following are never included in shared URLs:
| Data | Reason |
|---|---|
| API keys | Security -- keys are always local to the browser |
| Chat history | Privacy -- conversations stay on your device |
| Per-bot API key overrides | Security -- treated the same as global keys |
| Memory entries | Privacy -- per-bot memories are local |
| Local settings | Theme, font size, and other UI preferences are per-device |
| Usage data | Token counts and costs are per-device |
API keys are never encoded into URLs under any circumstances. The encoding pipeline explicitly excludes key fields. This is a core security guarantee of the platform.
Receiving a Shared Bot
When someone sends you a shared bot URL:
- Open the URL in your browser
- Sign in if required (or the bot loads directly if
auth: 1is set in the config) - The bot config is decoded from the URL fragment using
AIS.Codec.decodeBotConfig() - Enter your API key for the bot's provider if you do not already have one saved
- Start chatting -- the bot appears with all the sender's settings
The recipient gets an exact copy of the bot configuration but with their own API key, empty chat history, and local settings.
The Auth Field
Bot configs include an optional auth field that controls whether the recipient needs to be logged in:
| Value | Behavior |
|---|---|
auth: 1 | Public -- anyone can open the bot without logging in |
auth: 0 or absent | Protected -- recipient must sign in before the bot loads |
By default, shared bots require sign-in. Set auth: 1 in the config if you want the bot to be accessible to anyone without an account.
Typical URL Lengths
Only non-default values are serialized, so simple bots produce shorter URLs:
| Bot Type | System Prompt | Approximate URL Length |
|---|---|---|
| Simple bot, no prompt | None | ~80 characters |
| Standard bot | 100 chars | ~150 characters |
| Detailed bot | 500 chars | ~300 characters |
| Council (3 models) | 200 chars | ~350 characters |
Sharing Councils
Council (multi-model) bots can be shared the same way as individual bots. The shared URL includes all member configurations (provider and model for each member), council style, chairman index, voting mode, and debate round count. The recipient needs API keys for all providers used by the council members.
Bot Config Schema
The short keys used in the serialized config:
| Key | Field | Required |
|---|---|---|
n | Bot display name | Yes |
p | Provider ID | Yes |
m | Model ID | Yes |
s | System prompt | No |
t | Temperature (0-2) | No (default: 0.7) |
x | Max output tokens | No (default: 4096) |
tp | Top P | No |
fp | Frequency penalty | No |
pp | Presence penalty | No |
re | Reasoning effort | No |
icon | Persona icon (emoji) | No |
d | Persona description | No |
color | Persona accent color (hex) | No |
c | Council config object | No (only for councils) |
auth | Public access flag | No (default: 0) |
Tips for Sharing
- Test your shared URL by opening it in an incognito window to verify the recipient experience
- Keep system prompts concise if you want shorter URLs
- Use the auth field (
auth: 1) if sharing publicly and you do not want recipients to need an account - Shared URLs are self-contained -- they work even if the sender deletes their bot, because the config is in the URL, not on a server
- No expiration -- shared URLs never expire since there is no server-side component