Formato de URL
O AISCouncil codifica configurações de bots diretamente no fragmento da URL (a parte após #). Isso significa que compartilhar um bot é tão simples quanto compartilhar um link -- sem servidor, sem banco de dados, sem conta necessária. A URL é o bot.
Como URLs de Bot Funcionam
Quando você compartilha um bot, o app pega toda a configuração do bot -- nome, provedor, modelo, prompt de sistema, temperatura e todas as outras configurações -- e a comprime em uma string compacta que vive no fragmento da URL.
https://aiscouncil.net/#B{base80_payload}
O navegador nunca envia o fragmento para nenhum servidor (isso é parte da especificação HTTP), então a configuração fica inteiramente no client-side.
Estrutura da URL
Uma URL de bot tem três partes:
| Parte | Exemplo | Propósito |
|---|---|---|
| URL Base | https://aiscouncil.net/ | O próprio app |
# | # | Separador de fragmento (nunca enviado ao servidor) |
| Prefixo VLQ + payload | BeLT1Qx9k... | Byte de versão + config comprimida |
O Prefixo de Versão VLQ
O(s) primeiro(s) caractere(s) do fragmento identificam a versão de codificação usando codificação Variable-Length Quantity (VLQ):
| Prefixo | Versão | Tipo de Conteúdo |
|---|---|---|
A | 0 | Conteúdo do editor (usado por aiscouncil.net/s/) |
B | 1 | Configuração de bot |
C | 2 | Spec de página PDL |
O prefixo B diz ao app "esta é uma config de bot codificada com versão 1 do codec." Versões futuras podem adicionar novos formatos sem quebrar URLs existentes.
Codificação Base80
Após o prefixo de versão, o payload é codificado usando um alfabeto Base80 customizado. Este alfabeto foi escolhido para maximizar densidade de URL enquanto usa apenas caracteres que são seguros em fragmentos de URL sem percent-encoding:
ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-._~$&'()*+,;=:@/?
Base80 é mais eficiente que Base64 para fragmentos de URL porque usa 80 caracteres em vez de 64, empacotando mais dados por caractere.
Compressão
Antes da codificação Base80, o JSON de config do bot é comprimido usando deflate-raw (via API nativa CompressionStream do navegador). Isso tipicamente reduz uma config de bot para 30-60% do seu tamanho original. A compressão é lossless e a descompressão usa o DecompressionStream nativo do navegador.
Pipeline de Codificação
Bot Config (JSON) --> bytes UTF-8 --> compress Deflate-raw --> codificar Base80 --> prefixo VLQ
Passo a passo:
- O objeto de config do bot é serializado para JSON
- A string JSON é codificada para bytes UTF-8
- Os bytes são comprimidos com deflate-raw (
CompressionStreamnativo) - Os bytes comprimidos são codificados para caracteres Base80
- O prefixo de versão VLQ (
B) é prependado
Decodificação reverte o processo exatamente.
Schema de Config de Bot
A config usa chaves curtas de letra única para minimizar tamanho comprimido:
| Chave | Tipo | Descrição | Padrão |
|---|---|---|---|
n | string | Nome de exibição do bot | "New Bot" |
p | string | ID do provedor (anthropic, openai, xai, gemini, openrouter, ollama, etc.) | Obrigatório |
m | string | ID do modelo (ex: claude-sonnet-4-20250514, gpt-4o) | Obrigatório |
s | string | Prompt de sistema | "" |
t | number | Temperatura (0-2) | 0.7 |
x | integer | Max tokens de saída | 4096 |
re | string | Esforço de raciocínio (low, medium, high, max, ou orçamento numérico) | — |
tp | number | Top P (0-1) | 1 |
fp | number | Frequency penalty (0-2) | 0 |
pp | number | Presence penalty (0-2) | 0 |
se | integer | Seed (para outputs reproduzíveis) | — |
st | array | Sequências de parada | — |
rf | string | Formato de resposta (text ou json) | "text" |
auth | integer | Controle de acesso: 1 = público (login não requerido) | — |
icon | string | Ícone do bot (emoji) | — |
d | string | Descrição do bot | — |
color | string | Cor de destaque do bot (hex) | "#7c3aed" |
k | string | Chave de API por bot (armazenada localmente, nunca na URL) | — |
c | object | Configuração de council (para bots multi-modelo) | — |
pf | string | ID de referência do perfil | — |
cl | integer | Comprimento de contexto (limite de histórico de mensagens) | — |
sm | boolean | Streaming habilitado | true |
at | boolean | Auto-titular conversas | false |
mr | boolean | Renderização markdown habilitada | true |
stc | boolean | Mostrar contagem de tokens | false |
Apenas valores não-padrão são incluídos na config para minimizar comprimento da URL.
O Que NÃO Está na URL
Chaves de API nunca são incluídas em URLs. O campo k (chave de API por bot) é removido durante codificação de URL. Chaves são armazenadas apenas no localStorage do navegador e são enviadas apenas para o endpoint de API do provedor LLM.
Os seguintes são excluídos de URLs compartilhadas:
- Chaves de API -- destinatários devem fornecer as suas próprias
- Histórico de chat -- apenas a configuração do bot é compartilhada
- Entradas de memória -- memória persistente por bot fica local
- Estatísticas de uso -- dados de rastreamento são locais do dispositivo
URLs do Editor
O editor web em aiscouncil.net/s/ usa o mesmo sistema de codificação com um prefixo de versão diferente:
https://aiscouncil.net/s/#A{base80_payload}
O prefixo A indica versão 0 (conteúdo do editor). O payload contém o conteúdo do documento comprimido em vez de uma configuração de bot.
Codificação e Decodificação Programática
Você pode codificar e decodificar configs de bot programaticamente usando o módulo AIS.Codec no console do navegador:
Decodificando uma URL
// Decodifica do hash da URL
const hash = location.hash.slice(1); // Remove o '#'
const config = await AIS.Codec.decodeBotConfig(hash);
console.log(config);
// { n: "Meu Bot", p: "anthropic", m: "claude-sonnet-4-20250514", s: "You are helpful.", t: 0.7, x: 4096 }
Codificando uma config
const config = {
n: "Assistente de Pesquisa",
p: "anthropic",
m: "claude-sonnet-4-20250514",
s: "Você é um assistente de pesquisa completo. Cite fontes.",
t: 0.3,
x: 8192,
};
const hash = await AIS.Codec.encodeBotConfig(config);
const url = location.origin + "/#" + hash;
console.log(url);
// https://aiscouncil.net/#BeLT1Qx9k...
Inspecionando o schema
console.log(AIS.Codec.CONFIG_SCHEMA);
// Retorna a definição JSON Schema para configs de bot
Limites de Comprimento de URL
A maioria dos navegadores modernos suporta comprimentos de URL de pelo menos 2.000 caracteres, com muitos suportando 8.000+ caracteres. No entanto, alguns intermediários (clientes de email, plataformas de mídia social, encurtadores de URL) podem truncar URLs longas.
O limite prático depende do comprimento do prompt de sistema:
| Comprimento do Prompt de Sistema | Comprimento Aproximado da URL | Compatibilidade |
|---|---|---|
| < 500 caracteres | ~300-500 chars | Seguro em qualquer lugar |
| 500-2.000 caracteres | ~500-1.200 chars | Seguro em navegadores e maioria das plataformas |
| 2.000-5.000 caracteres | ~1.200-2.500 chars | Funciona em navegadores, pode falhar em email/SMS |
| > 5.000 caracteres | 2.500+ chars | Apenas navegador, pode ser truncado em outros lugares |
Se seu prompt de sistema é muito longo, considere:
- Encurtar ou resumir o prompt
- Usar um encurtador de URL que preserva fragmentos
- Compartilhar a config do bot como um arquivo JSON em vez disso (via export)
Comportamento na Homepage
Quando você carrega aiscouncil.net diretamente (sem hash na URL), o app não codifica sua configuração de bot na URL. Codificação de URL só ativa quando a página foi carregada de uma URL de bot compartilhada (isto é, a URL já continha um fragmento #B...). Isso mantém a URL da homepage limpa.