Skip to content

Repository files navigation

shortcoder — Interface Retrô

Versao do shortcoder com estetica (Bulletin Board System) classica dos anos 90.

Instalacao rapida

Linux (x86_64) e macOS (Apple Silicon):

curl -fsSL https://raw.githubusercontent.com/peder1981/shortcoder/master/install.sh | bash

Instala 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.

Visual

  • 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

Comandos

/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

Configuracao

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

Atalhos de teclado

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)

Agentes

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.

Ferramentas do Agnes

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 (FWJOBSTARTFWJOBDONEFWJOBPOLL) 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.

Modelo de seguranca

  • 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, glob e grep executam 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.

Selftest

/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.

Como Compilar (a partir do fonte)

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
./shortcoder

Cross-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.exe

macOS 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.

Testes

# Testar ajuda
printf '/help\n/exit\n' | ./shortcoder

# Testar resposta LLM
printf '2+2\n/exit\n' | ./shortcoder

# Testar memoria
printf '/mem0 add "teste"\n/mem0 list\n/exit\n' | ./shortcoder

# Testar historico
printf 'ola\n/history\n/exit\n' | ./shortcoder

# Testar harness de ferramentas (selftest + regressao)
./tests/config-tests.sh
./tests/tools-tests.sh

Comparacao com Versoes Anteriores

Versao Estilo Funcionalidades
shortcoder Minimalista LLM via ProcRun
shortcoder-rag Cards modernos LLM + Mem0 HTTP
shortcoder retrô LLM + Mem0 + visual

Releases

Packages

Contributors

Languages