Solo comandos. Orden: proxy primero, Hermes después.
git clone https://github.com/dekrezz/FreeDeepseekAPI
cd FreeDeepseekAPI
# Login en DeepSeek Web (solo la primera vez)
CHROME_PATH="$(command -v chromium)" npm run auth
# Proxy + panel: dejar esta terminal abierta
npm run dashboard
# alternativa sin panel: npm start (no correr los dos)
Otra terminal:
cd FreeDeepseekAPI
npm run doctor
curl -i http://127.0.0.1:9655/readyz
curl -s http://127.0.0.1:9655/v1/models | jq -r '.data[].id'
Esperado:
HTTP/1.1 200 OK
{"ready":true,"ready_accounts":1,"total_accounts":1}
deepseek-v4-flash
deepseek-v4-flash-thinking
deepseek-v4-flash-nosearch
deepseek-v4-flash-thinking-nosearch
Panel: http://127.0.0.1:9655/dashboard
Smoke test sin agente:
curl -sS http://127.0.0.1:9655/v1/chat/completions \
-H 'Content-Type: application/json' \
-H 'Authorization: Bearer local' \
-d '{"model":"deepseek-v4-flash","messages":[{"role":"user","content":"Responde solo: OK"}],"max_tokens":20}'
Generar config para Hermes:
npm run setup:agents -- --target hermes
cat ~/.hermes/freedeepseek.yaml
model:
default: deepseek-v4-flash
provider: custom
base_url: http://127.0.0.1:9655/v1
api_key: local
api_mode: chat_completions
Hermes NO carga ese archivo solo: hay que copiarlo a un perfil (paso 4).
curl -fsSL https://hermes-agent.nousresearch.com/install.sh -o /tmp/hermes-install.sh
less /tmp/hermes-install.sh
bash /tmp/hermes-install.sh \
--skip-setup \
--skip-browser \
--skip-computer-use \
--non-interactive
hermes --version
Actualizar:
hermes update --check
hermes update
# Bash/Zsh
export PATH="$HOME/.local/bin:$PATH"
# Fish
fish_add_path "$HOME/.local/bin"
command -v hermes
hermes --version
hermes profile create deepseek-web
hermes profile list
mkdir -p ~/.hermes/profiles/deepseek-web
cp ~/.hermes/freedeepseek.yaml ~/.hermes/profiles/deepseek-web/config.yaml
O con la CLI:
hermes -p deepseek-web config set model.provider custom
hermes -p deepseek-web config set model.default deepseek-v4-flash
hermes -p deepseek-web config set model.base_url http://127.0.0.1:9655/v1
hermes -p deepseek-web config set model.api_key local
hermes -p deepseek-web config set model.api_mode chat_completions
Verificar:
hermes -p deepseek-web config get model
hermes -p deepseek-web config path
hermes -p deepseek-web config check
hermes -p deepseek-web doctor
hermes -p deepseek-web doctor --fix # opcional
Avisos de otros providers y vulnerabilidades npm: ignorar.
mkdir -p /tmp/hermes-deepseek-test
cd /tmp/hermes-deepseek-test
cat > prompt.txt <<'EOF'
Necesito que realices una tarea, no que me expliques cómo hacerla.
1. Utilizá write_file para crear prueba.txt.
2. Escribí exactamente: HERMES DEEPSEEK FUNCIONA
3. Utilizá read_file para leerlo.
4. Utilizá terminal para ejecutar: cat prueba.txt && sha256sum prueba.txt
5. Comprobá que el contenido sea correcto.
Informame qué herramientas ejecutaste y sus resultados.
EOF
timeout 540 hermes -p deepseek-web chat \
-t "file,terminal" \
--query-file prompt.txt \
--oneshot --max-turns 15 --run-budget 420 -Q
Verificar afuera:
cat prueba.txt
sha256sum prueba.txt
HERMES DEEPSEEK FUNCIONA
9145dd1e754ce9333d41b7d8c2e2c73f8ffa7bf1622d9e6e3a377285700a1c0b prueba.txt
mkdir -p /tmp/hermes-deepseek-test/ciclo2
cd /tmp/hermes-deepseek-test/ciclo2
cat > prompt.txt <<'EOF'
Tarea real, ejecutá las herramientas. No expliques de antemano.
1. write_file: creá suma_cuadrados.py que imprima la suma de los cuadrados del 1 al 10.
2. terminal: ejecutá `python3 suma_cuadrados.py`.
3. write_file: creá resultado.txt con la línea `resultado=<valor>`.
4. read_file: leé resultado.txt.
5. terminal: ejecutá `ls -l && cat resultado.txt && python3 -c "print(sum(i*i for i in range(1,11)))"`.
Al final informá: valor esperado, valor obtenido, y si coinciden.
EOF
timeout 540 hermes -p deepseek-web chat \
-t "file,terminal" \
--query-file prompt.txt \
--oneshot --max-turns 20 --run-budget 420 -Q
python3 suma_cuadrados.py
cat resultado.txt
Resultado: 385 y resultado=385.
python3 -c se bloquea en one-shot. Diagnosticar:
hermes -p deepseek-web approvals test "python3 -c 'print(1)'"
hermes -p deepseek-web approvals test "python3 suma_cuadrados.py"
verdict : ask-approval (script execution via -e/-c flag)
verdict : allow
Permitir:
hermes -p deepseek-web approvals suggest
# ~/.hermes/profiles/deepseek-web/config.yaml
command_allowlist:
- "python3 -c *"
O en interactivo: aprobar una vez. --yolo desactiva todo (no recomendado).
sqlite3 -line ~/.hermes/profiles/deepseek-web/state.db \
"select model, billing_provider, billing_base_url, api_call_count, estimated_cost_usd
from session_model_usage order by rowid desc limit 2;"
model: deepseek-v4-flash
billing_provider: custom
billing_base_url: http://127.0.0.1:9655/v1
api_call_count: 3
estimated_cost_usd: 0.0
hermes -p deepseek-web chat -t "file,terminal"
deepseek-web chat -t "file,terminal" # alias
hermes chat # perfil habitual
hermes -p deepseek-web config set model.default deepseek-v4-flash-thinking
hermes -p deepseek-web model
hermes -p deepseek-web chat --reasoning high
hermes -p deepseek-web chat --continue
hermes -p deepseek-web chat --resume latest
hermes gateway status
hermes -p deepseek-web gateway status
# hermes: command not found
export PATH="$HOME/.local/bin:$PATH"
# connection refused :9655
cd FreeDeepseekAPI && npm run dashboard
# ready:false -> volver a loguear
CHROME_PATH="$(command -v chromium)" npm run auth
# 401
hermes -p deepseek-web config set model.api_key local # o tu PROXY_API_KEY
# modelo inexistente
curl -s http://127.0.0.1:9655/v1/models | jq -r '.data[].id'
# config vieja
hermes -p deepseek-web config migrate
# aprobación denegada en one-shot
hermes -p deepseek-web approvals suggest
# probar siempre en /tmp
mkdir -p /tmp/hermes-deepseek-test && cd /tmp/hermes-deepseek-test
El perfil no es sandbox: terminal corre con tus permisos. --yolo solo en entornos descartables.