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

PlataformaArquiteturaAsset
Linuxamd64shortcoder-linux-amd64.tar.gz
macOSarm64 (Apple Silicon)shortcoder-macos-arm64.tar.gz
Windowsamd64shortcoder-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:

CaminhoTipoPadraoDescricao
defaults.modelstringlfm25-1b-uncensored:latestModelo LLM padrao
defaults.agentstringollamaAgente padrao
defaults.mem0_userstringdefaultUser ID do mem0
agents.<name>.enabledbooltrueHabilitar/desabilitar agente
agents.<name>.timeoutintvariavelTimeout HTTP em segundos
agents.<name>.urlstringvariavelURL do endpoint
theme.colors.*stringvariavelCodigos ANSI SGR
theme.border_stylestringboxbox ou double
theme.banner_stylestringasciiascii ou text
routing.ernesto_keywordsarraylista completaPalavras-chave para roteamento ernesto
features.history_max_entriesint100Limite de entradas no historico
agents.agnes.tools_enabledbooltrueHabilita o harness de ferramentas do Agnes
agents.agnes.tools_max_tokensint4096max_tokens nas chamadas com ferramentas
agents.agnes.workdirstring$HOMEDiretorio de trabalho (validado pelo IsWithinWorkdir)
agents.agnes.max_tool_iterationsint12Limite de iteracoes do loop tool_calls
agents.agnes.tool_timeoutint60Timeout (s) de cada ferramenta de shell
agents.agnes.max_tool_outputint8000Cap de caracteres por resultado de ferramenta
agents.agnes.max_historyint60Limite de mensagens na historia do loop
agents.agnes.load_skillsbooltrueIndexa skills_dir no system prompt
agents.agnes.skills_dirstring$HOME/.claude/skillsDiretorio 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:

AtalhoAção
/ Navega o histórico dos últimos 20 comandos digitados
/ Move o cursor na linha
Ctrl+A / Ctrl+EVai para início / fim da linha
Ctrl+U / Ctrl+KApaga até o início / fim da linha
Backspace / DeleteApaga o caractere antes / depois do cursor
Ctrl+LLimpa a tela, mantém a linha em edição
Ctrl+CCancela a linha atual (não sai do programa)
Ctrl+DSai (só em linha vazia, como no bash)

Agentes

AgenteBackendVelocidadeUso
ollama:11434/v1/chat~1-3sConversas rapidas
mem0:9081/memories/<1sMemoria persistente
ernesto:9081/v1/chat>30s (timeout)RAG + contexto
agnesapihub.agnes-ai.com/v1/chat/completionsremoto (cloud)Agnes 2.5 Flash — requer AGNES_API_KEY (ver docs)
orchestratorAgnes 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:

FerramentaDescricao
read_fileLe um arquivo dentro do workdir
write_fileCria/sobrescreve um arquivo dentro do workdir
edit_fileSubstitui a primeira ocorrencia de old_string por new_string
bashExecuta um comando de shell no workdir
globLista arquivos que casam com um glob (via find)
grepBusca regex nos arquivos do workdir
list_dirLista um diretorio (1 nivel)
rag_searchConsulta a base vetorial AdvPL/Protheus (agents.ernesto.url)
mem0_searchBusca memorias cross-agent (listagem por usuario)
web_fetchHTTP GET de uma URL
load_skillCarrega <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 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

Comparacao com Versoes Anteriores

VersaoEstiloFuncionalidades
shortcoderMinimalistaLLM via ProcRun
shortcoder-ragCards modernosLLM + Mem0 HTTP
shortcoderretrôLLM + Mem0 + visual

Releases

Packages

Contributors

Languages