Skip to main content

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:

  1. 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.
  2. Compress: The JSON string is compressed using deflate-raw via the browser's native CompressionStream API.
  3. Encode: The compressed bytes are encoded in Base80 using the FRAG80 alphabet -- a custom 80-character set optimized for URL fragment density.
  4. 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}
ComponentDescription
https://aiscouncil.com/The app domain
#Fragment identifier (never sent to any server by the browser)
BVLQ version prefix -- version 1 for bot configs
{base80_payload}Deflate-compressed bot config encoded in Base80
Privacy guarantee

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

  1. Configure your bot (name, model, system prompt, persona, etc.)
  2. Click the Share button in the header
  3. The URL is generated and copied to your clipboard
  4. 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.

tip

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:

DataReason
API keysSecurity -- keys are always local to the browser
Chat historyPrivacy -- conversations stay on your device
Per-bot API key overridesSecurity -- treated the same as global keys
Memory entriesPrivacy -- per-bot memories are local
Local settingsTheme, font size, and other UI preferences are per-device
Usage dataToken counts and costs are per-device
warning

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:

  1. Open the URL in your browser
  2. Sign in if required (or the bot loads directly if auth: 1 is set in the config)
  3. The bot config is decoded from the URL fragment using AIS.Codec.decodeBotConfig()
  4. Enter your API key for the bot's provider if you do not already have one saved
  5. 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:

ValueBehavior
auth: 1Public -- anyone can open the bot without logging in
auth: 0 or absentProtected -- 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 TypeSystem PromptApproximate URL Length
Simple bot, no promptNone~80 characters
Standard bot100 chars~150 characters
Detailed bot500 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:

KeyFieldRequired
nBot display nameYes
pProvider IDYes
mModel IDYes
sSystem promptNo
tTemperature (0-2)No (default: 0.7)
xMax output tokensNo (default: 4096)
tpTop PNo
fpFrequency penaltyNo
ppPresence penaltyNo
reReasoning effortNo
iconPersona icon (emoji)No
dPersona descriptionNo
colorPersona accent color (hex)No
cCouncil config objectNo (only for councils)
authPublic access flagNo (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