メインコンテンツまでスキップ

URL Format

AI Supreme Council encodes bot configurations directly into the URL fragment (the part after #). This means sharing a bot is as simple as sharing a link -- no server, no database, no account required. The URL is the bot.

How Bot URLs Work

When you share a bot, the app takes the entire bot configuration -- name, provider, model, system prompt, temperature, and all other settings -- and compresses it into a compact string that lives in the URL fragment.

https://aiscouncil.com/#B{base80_payload}

The browser never sends the fragment to any server (this is part of the HTTP specification), so the configuration stays entirely client-side.

URL Structure

A bot URL has three parts:

PartExamplePurpose
Base URLhttps://aiscouncil.com/The app itself
##Fragment separator (never sent to server)
VLQ prefix + payloadBeLT1Qx9k...Version byte + compressed config

The VLQ Version Prefix

The first character(s) of the fragment identify the encoding version using Variable-Length Quantity (VLQ) encoding:

PrefixVersionContent Type
A0Editor content (used by aiscouncil.com/s/)
B1Bot configuration
C2PDL page spec

The B prefix tells the app "this is a bot config encoded with version 1 of the codec." Future versions can add new formats without breaking existing URLs.

Base80 Encoding

After the version prefix, the payload is encoded using a custom Base80 alphabet. This alphabet was chosen to maximize URL density while using only characters that are safe in URL fragments without percent-encoding:

ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-._~$&'()*+,;=:@/?

Base80 is more efficient than Base64 for URL fragments because it uses 80 characters instead of 64, packing more data per character.

Compression

Before Base80 encoding, the bot config JSON is compressed using deflate-raw (via the browser's native CompressionStream API). This typically reduces a bot config to 30-60% of its original size. The compression is lossless and decompression uses the browser's native DecompressionStream.

Encoding Pipeline

Bot Config (JSON) --> UTF-8 bytes --> Deflate-raw compress --> Base80 encode --> VLQ prefix

Step by step:

  1. The bot config object is serialized to JSON
  2. The JSON string is encoded to UTF-8 bytes
  3. The bytes are compressed with deflate-raw (native CompressionStream)
  4. The compressed bytes are encoded to Base80 characters
  5. The VLQ version prefix (B) is prepended

Decoding reverses the process exactly.

Bot Config Schema

The config uses short single-letter keys to minimize compressed size:

KeyTypeDescriptionDefault
nstringBot display name"New Bot"
pstringProvider ID (anthropic, openai, xai, gemini, openrouter, ollama, etc.)Required
mstringModel ID (e.g. claude-sonnet-4-20250514, gpt-4o)Required
sstringSystem prompt""
tnumberTemperature (0-2)0.7
xintegerMax output tokens4096
restringReasoning effort (low, medium, high, max, or numeric budget)
tpnumberTop P (0-1)1
fpnumberFrequency penalty (0-2)0
ppnumberPresence penalty (0-2)0
seintegerSeed (for reproducible outputs)
starrayStop sequences
rfstringResponse format (text or json)"text"
authintegerAccess control: 1 = public (no login required)
iconstringBot icon (emoji)
dstringBot description
colorstringBot accent color (hex)"#7c3aed"
kstringPer-bot API key (stored locally, never in URL)
cobjectCouncil configuration (for multi-model bots)
pfstringProfile reference ID
clintegerContext length (message history limit)
smbooleanStreaming enabledtrue
atbooleanAuto-title conversationsfalse
mrbooleanMarkdown rendering enabledtrue
stcbooleanShow token countfalse

Only non-default values are included in the config to minimize URL length.

What Is NOT in the URL

Security Guarantee

API keys are never included in URLs. The k (per-bot API key) field is stripped during URL encoding. Keys are stored only in the browser's localStorage and are sent only to the LLM provider's API endpoint.

The following are excluded from shared URLs:

  • API keys -- recipients must provide their own
  • Chat history -- only the bot configuration is shared
  • Memory entries -- per-bot persistent memory stays local
  • Usage statistics -- tracking data is device-local

Editor URLs

The web editor at aiscouncil.com/s/ uses the same encoding system with a different version prefix:

https://aiscouncil.com/s/#A{base80_payload}

The A prefix indicates version 0 (editor content). The payload contains the compressed document content rather than a bot configuration.

Programmatic Encoding and Decoding

You can encode and decode bot configs programmatically using the AIS.Codec module in the browser console:

Decoding a URL

// Decode from URL hash
const hash = location.hash.slice(1); // Remove the '#'
const config = await AIS.Codec.decodeBotConfig(hash);
console.log(config);
// { n: "My Bot", p: "anthropic", m: "claude-sonnet-4-20250514", s: "You are helpful.", t: 0.7, x: 4096 }

Encoding a config

const config = {
n: "Research Assistant",
p: "anthropic",
m: "claude-sonnet-4-20250514",
s: "You are a thorough research assistant. Cite sources.",
t: 0.3,
x: 8192
};
const hash = await AIS.Codec.encodeBotConfig(config);
const url = location.origin + '/#' + hash;
console.log(url);
// https://aiscouncil.com/#BeLT1Qx9k...

Inspecting the schema

console.log(AIS.Codec.CONFIG_SCHEMA);
// Returns the JSON Schema definition for bot configs

URL Length Limits

Browser Limits

Most modern browsers support URL lengths of at least 2,000 characters, with many supporting 8,000+ characters. However, some intermediaries (email clients, social media platforms, URL shorteners) may truncate long URLs.

The practical limit depends on the system prompt length:

System Prompt LengthApproximate URL LengthCompatibility
< 500 characters~300-500 charsSafe everywhere
500-2,000 characters~500-1,200 charsSafe in browsers and most platforms
2,000-5,000 characters~1,200-2,500 charsWorks in browsers, may fail in email/SMS
> 5,000 characters2,500+ charsBrowser-only, may be truncated elsewhere

If your system prompt is very long, consider:

  • Shortening or summarizing the prompt
  • Using a URL shortener that preserves fragments
  • Sharing the bot config as a JSON file instead (via export)

Homepage Behavior

No URL Encoding on Homepage

When you load aiscouncil.com directly (no hash in the URL), the app does not encode your bot configuration into the URL. URL encoding only activates when the page was loaded from a shared bot URL (i.e., the URL already contained a #B... fragment). This keeps the homepage URL clean.