Versao do shortcoder com estetica (Bulletin Board System) classica dos anos 90.
Linux (x86_64) e macOS (Apple Silicon):
curl -fsSL https://raw.githubusercontent.com/peder1981/shortcoder/master/install.sh | bashInstala em ~/.local/bin/shortcoder.
Windows: baixe e execute shortcoder-windows-amd64-setup.exe na
página de releases — instalador
NSIS que copia o binário para %LOCALAPPDATA%\Programs\shortcoder, cria atalho no Menu
Iniciar e adiciona ao PATH do usuário (abra um terminal novo depois de instalar). O
instalador não é assinado digitalmente, então o SmartScreen do Windows vai avisar na
primeira execução — clique em "Mais informações" → "Executar assim mesmo".
| Plataforma | Arquitetura | Asset |
|---|---|---|
| Linux | amd64 | shortcoder-linux-amd64.tar.gz |
| macOS | arm64 (Apple Silicon) | shortcoder-macos-arm64.tar.gz |
| Windows | amd64 | shortcoder-windows-amd64-setup.exe (instalador) ou shortcoder-windows-amd64.zip (binário avulso) |
Cada release traz um checksums.txt (SHA-256) para conferir a integridade do download.
- ASCII Art no header com o nome "SHORTCODER"
- Cores vintage: amarelo (#FFFF00), ciano, verde, magenta
- Caixas delimitadas com
+──+|estilo - Status bar comModel/Session/Agent/Mem0
- Mensagens formatadas em blocos com bordas
/agent — Troca entre ollama (rapido), mem0 (memoria), ernesto (RAG), agnes (remoto), orchestrator (agnes roteia ollama local)
/model — Lista e seleciona modelo
/mem0 list — Visualiza memorias salvas
/mem0 add — Salva memoria persistente
/mem0 clear— Remove todas as memorias
/history — Mostra historico de conversas
/clear — Nova sessao (limpa historico)
/help — Esta ajuda
/tools selftest — Auto-teste do harness de ferramentas do Agnes
/exit — Sair
O shortcoder usa ~/.config/shortcoder/config.json para todas as configuracoes.
O arquivo e criado automaticamente na primeira execucao e NUNCA sobrescrito.
/config — Ver configuracao atual
/config set <p> <v> — Definir valor (ex: /config set agents.ernesto.timeout 120)
/config reset — Reseta para padroes
/reload — Recarrega config do disco
Valores configuraveis:
| Caminho | Tipo | Padrao | Descricao |
|---|---|---|---|
defaults.model | string | lfm25-1b-uncensored:latest | Modelo LLM padrao |
defaults.agent | string | ollama | Agente padrao |
defaults.mem0_user | string | default | User ID do mem0 |
agents.<name>.enabled | bool | true | Habilitar/desabilitar agente |
agents.<name>.timeout | int | variavel | Timeout HTTP em segundos |
agents.<name>.url | string | variavel | URL do endpoint |
theme.colors.* | string | variavel | Codigos ANSI SGR |
theme.border_style | string | box | box ou double |
theme.banner_style | string | ascii | ascii ou text |
routing.ernesto_keywords | array | lista completa | Palavras-chave para roteamento ernesto |
features.history_max_entries | int | 100 | Limite de entradas no historico |
agents.agnes.tools_enabled | bool | true | Habilita o harness de ferramentas do Agnes |
agents.agnes.tools_max_tokens | int | 4096 | max_tokens nas chamadas com ferramentas |
agents.agnes.workdir | string | $HOME | Diretorio de trabalho (validado pelo IsWithinWorkdir) |
agents.agnes.max_tool_iterations | int | 12 | Limite de iteracoes do loop tool_calls |
agents.agnes.tool_timeout | int | 60 | Timeout (s) de cada ferramenta de shell |
agents.agnes.max_tool_output | int | 8000 | Cap de caracteres por resultado de ferramenta |
agents.agnes.max_history | int | 60 | Limite de mensagens na historia do loop |
agents.agnes.load_skills | bool | true | Indexa skills_dir no system prompt |
agents.agnes.skills_dir | string | $HOME/.claude/skills | Diretorio de SKILL.md para load_skill |
Em terminal interativo (não em pipe/redirect), o prompt suporta os atalhos comuns de shell/readline:
| Atalho | Ação |
|---|---|
↑ / ↓ | Navega o histórico dos últimos 20 comandos digitados |
← / → | Move o cursor na linha |
Ctrl+A / Ctrl+E | Vai para início / fim da linha |
Ctrl+U / Ctrl+K | Apaga até o início / fim da linha |
Backspace / Delete | Apaga o caractere antes / depois do cursor |
Ctrl+L | Limpa a tela, mantém a linha em edição |
Ctrl+C | Cancela a linha atual (não sai do programa) |
Ctrl+D | Sai (só em linha vazia, como no bash) |
| Agente | Backend | Velocidade | Uso |
|---|---|---|---|
| ollama | :11434/v1/chat | ~1-3s | Conversas rapidas |
| mem0 | :9081/memories/ | <1s | Memoria persistente |
| ernesto | :9081/v1/chat | >30s (timeout) | RAG + contexto |
| agnes | apihub.agnes-ai.com/v1/chat/completions | remoto (cloud) | Agnes 2.5 Flash — requer AGNES_API_KEY (ver docs) |
| orchestrator | Agnes decide + :11434 local + Agnes revisa | ~2 chamadas remotas + 1 local (async) | Agnes 2.5 Flash roteia a pergunta para o melhor modelo Ollama local (via job assíncrono do AdvPP) e revisa a resposta antes de exibir. Requer AGNES_API_KEY e Ollama local rodando. |
Quando agents.agnes.tools_enabled está habilitado (padrão), o agente Agnes
(selecionado via /agent → opção 4, ou defaults.agent: "agnes") roda num
loop de ferramentas: o modelo decide que ferramenta chamar, o shortcoder
executa a ferramenta num job isolado (FWJOBSTART → FWJOBDONE →
FWJOBPOLL) e devolve o resultado de volta ao modelo, até chegar na resposta
final.
As 11 ferramentas disponíveis:
| Ferramenta | Descricao |
|---|---|
read_file | Le um arquivo dentro do workdir |
write_file | Cria/sobrescreve um arquivo dentro do workdir |
edit_file | Substitui a primeira ocorrencia de old_string por new_string |
bash | Executa um comando de shell no workdir |
glob | Lista arquivos que casam com um glob (via find) |
grep | Busca regex nos arquivos do workdir |
list_dir | Lista um diretorio (1 nivel) |
rag_search | Consulta a base vetorial AdvPL/Protheus (agents.ernesto.url) |
mem0_search | Busca memorias cross-agent (listagem por usuario) |
web_fetch | HTTP GET de uma URL |
load_skill | Carrega <skills_dir>/<name>/SKILL.md |
Chaves de configuracao (agents.agnes.*): tools_enabled, tools_max_tokens,
workdir, max_tool_iterations, tool_timeout, max_tool_output,
max_history, load_skills, skills_dir. Todas tem fallback no
ConfigGet, entao configs existentes funcionam sem migracao.
- Caminhos: toda ferramenta de arquivo valida o caminho com
IsWithinWorkdir(cWorkDir, cPath)antes de tocar no disco. Aceita absolutos sob o workdir e relativos (normalizados contra o workdir); rejeita..acima do workdir e absolutos fora dele. - Shell:
bash,globegrepexecutam comandos no workdir (cd). O modelo controla o comando — sao confiaveis por convencao, nao por sandbox. Limitacao de seguranca documentada. - Nenhuma ferramenta expoe rede/UI: a VM do job retorna apenas string, e o loop exibe na VM principal.
/tools selftest roda o auto-teste do harness: parse do JSON de definicoes,
IsWithinWorkdir (aceite/recusa), roundtrip write/read/edit, shell tools e
TruncateHistory. Tambem automatizado em tests/tools-tests.sh.
Requer um checkout do AdvPP (ADVPP_SRC ou rodar de
dentro do próprio repositório do compilador) e toolchain Go + C (CGO obrigatório).
O fonte é modular: shortcoder.prw é apenas o agregador com #include dos módulos em
src/*.prw (config, ui, texto, agentes, memória, comandos, modelos e pickers). A compilação
continua sendo de um único arquivo:
cd~/Projetos/shortcoder
advplc build shortcoder.prw -o shortcoder
./shortcoderCross-compile para Windows a partir do Linux (via mingw-w64):
sudo apt install gcc-mingw-w64-x86-64
GOOS=windows GOARCH=amd64 CC=x86_64-w64-mingw32-gcc CGO_ENABLED=1 \
ADVPP_SRC=/caminho/para/AdvPP advplc build shortcoder.prw -o shortcoder.exemacOS precisa compilar nativamente numa Mac (CGO + frameworks Cocoa/OpenGL não cruzam a
partir do Linux) — é o que o workflow .github/workflows/release.yml faz num runner
macos-latest a cada tag vX.Y.Z publicada.
# Testar ajudaprintf'/help\n/exit\n'| ./shortcoder
# Testar resposta LLMprintf'2+2\n/exit\n'| ./shortcoder
# Testar memoriaprintf'/mem0 add "teste"\n/mem0 list\n/exit\n'| ./shortcoder
# Testar historicoprintf'ola\n/history\n/exit\n'| ./shortcoder
# Testar harness de ferramentas (selftest + regressao)
./tests/config-tests.sh
./tests/tools-tests.sh| Versao | Estilo | Funcionalidades |
|---|---|---|
| shortcoder | Minimalista | LLM via ProcRun |
| shortcoder-rag | Cards modernos | LLM + Mem0 HTTP |
| shortcoder | retrô | LLM + Mem0 + visual |