actual-setup skill
Set up Actual Computer (actual.inc) inference in Hermes.
Is the actual-setup skill safe?
Read the findings before you install it. We read 2 files in the folder on 2026-10-25.
- high
SKILL.md:41Downloads a script and runs it in one step, so what runs is whatever that server sends that day. Common for installers, and still worth a look at the address.
(`curl -fsSL "https://actual.inc/install" | bash`) and completed device
Install the actual-setup skill
A skill is a folder. Copy it into your agent's skills folder and the agent loads it when the task matches its description.
git clone --depth 1 https://github.com/NousResearch/hermes-agent.git /tmp/hermes-agent mkdir -p ~/.claude/skills cp -r /tmp/hermes-agent/optional-skills/devops/actual-setup ~/.claude/skills/actual-setup
In the Claude apps, zip the folder and upload it from the Skills settings. The folder on GitHub
The instructions your agent would load
SKILL.md as published, without the frontmatter. Read it on GitHub
Actual Computer Setup Skill
Sets up actual.inc (Actual Computer) as a Hermes inference provider. Actual turns the user's own hardware into a private inference cluster and exposes an OpenAI-compatible API two ways: a hosted end-to-end-encrypted relay at https://api.actual.inc (authenticated with an ac_ key), and a local on-device daemon at http://127.0.0.1:8080 (no auth on loopback). This skill does not install the Actual daemon for the user — device authorization requires a human in a browser.
When to Use
- User wants to add actual.inc as an inference provider (cloud relay or local).
- User has an ac_ key and wants Hermes routed through their Actual cluster.
- User wants fully-local, on-device inference via the Actual daemon.
- Troubleshooting: Actual requests failing with cryptic 400s or empty streams.
Prerequisites
aliases actual-computer, actualcomputer, aci). Do NOT configure Actual as a customproviders / providers.actual. entry on current Hermes — the built-in provider owns the name and handles base-url normalization, the Responses transport, and local no-auth automatically.
- Hermes has first-class actual provider support (provider id actual,
https://actual.inc/user/keys.
- Relay mode: an Actual account and an ac_ inference key from
(curl -fsSL "https://actual.inc/install" | bash) and completed device authorization by running actual once and opening the printed https://actual.inc/device?code=... URL in a browser. Relay that URL to the user and WAIT — never invent an email or authorize on their behalf. Codes expire in 5 minutes; re-run actual for a fresh one.
- Local mode: the user has installed the daemon
How to Run
Relay / API mode
append ACTUALAPIKEY=ac_... to ~/.hermes/.env.
- Put the key in .env (secrets only — never config.yaml):
- Verify the key and discover models with terminal:
curl -s https://api.actual.inc/v1/models -H "Authorization: Bearer $ACTUAL_API_KEY"- Select provider + model:
hermes config set model.provider actual
hermes config set model.default "MODEL_ID_FROM_DISCOVERY"- Verify end-to-end:
hermes chat -Q -q "Reply with exactly: ACTUAL_OK" --provider actual -m MODEL_IDLocal mode
- Human has installed + authorized the daemon (see Prerequisites).
- Download and load a model (scriptable once authorized):
actual models search "qwen2.5 0.5b instruct gguf" --limit 8 --no-prompt
# Downloads REQUIRE an explicit quantization (409 ambiguous_model_download otherwise):
actual models download "Qwen/Qwen2.5-0.5B-Instruct-GGUF/Q4_K_M"
actual models list # note the INSTALLED name (differs from download id)
actual models load "qwen2.5-0.5b-instruct-q4_k_m" # load by installed namebuilt-in provider into local no-auth mode automatically — no key needed: append ACTUALBASEURL=http://127.0.0.1:8080 to ~/.hermes/.env, then:
- Point Hermes at the daemon. ACTUALBASEURL with a loopback host flips the
hermes config set model.provider actual
hermes config set model.default "INSTALLED_MODEL_NAME"- Verify (reduced toolset — see context-window pitfall below):
hermes chat -Q -q "Reply with exactly: LOCAL_OK" --provider actual -m INSTALLED_NAME -t file,webQuick Reference
Pitfalls
Actual's SGLang/vLLM backends accept only none/low/medium/high/max; xhigh/ultra used to fail with a cryptic Expecting value: line 1 column 1 (char 0) (a wrapped HTTP 400). The built-in provider clamps xhigh→high and ultra→max on the wire. If a request still 400s this way on an old Hermes, set a per-model cap: agent.reasoning_overrides.: high in config.yaml.
- reasoningeffort trap (handled by Hermes since the first-class provider).**
is ~26k tokens of schemas plus a ~9k-token system prompt. A model loaded with a 32k context overflows before the first turn, and llama.cpp-family servers emit a bare data: [DONE] — Hermes reports Provider returned an empty stream with no finishreason. This is NOT an SSE bug. Fixes: restrict tools (-t file,web), load the model with a larger nctx, or pick a >=64k-context model for the full toolset. Upstream tracking: #51448 (do not file new issues; add evidence there). Related but distinct: #65631 (HTTP-200 SSE carrying a 400), #56516 (reasoning-only streams).
- Context-window overflow on small local models. Hermes' default toolset
repo/QUANT and 409s without an explicit quantization; actual models load takes the INSTALLED name from actual models list.
- Download ids vs installed names. actual models download takes
emit thinking in a separate reasoning field and can burn a small maxtokens entirely on reasoning. Give generous maxtokens before assuming failure.
- Reasoning models returning empty content. GLM/Qwen reasoning variants
(pre first-class support) wrote providers.actual.* config blocks. On current Hermes the built-in provider wins the name; stale custom blocks are ignored or conflict. Remove them and use the env vars + model.provider flow above.
- Do not create a custom provider named actual. Older setup guides
Verification
# Relay:
hermes chat -Q -q "Reply with exactly: ACTUAL_OK" --provider actual -m MODEL
# Local (small model — reduced toolset):
hermes chat -Q -q "Reply with exactly: LOCAL_OK" --provider actual -m MODEL -t file,web
# Provider status (local no-auth shows key_source=local-offline):
hermes statusFor other OpenAI-compatible clients (e.g. OpenCode), see references/opencode.md.
More skills from NousResearch/hermes-agent
- A1passwordSet up op CLI, sign in, and read or inject secrets.
- A3-statement-modelBuild integrated IS/BS/CF financial workbooks in Excel.
- AaccelerateRun PyTorch training across GPUs with minimal changes.
- Aadversarial-ux-testRoleplay a hostile user to find and triage UX pain points.
- Aagent-merge-conflict-arbiterNeutral arbiter for merge conflicts between two agents.
- AagentmailUse when an agent needs AgentMail CLI email inboxes.
- Aai-presenter-videoMake a verified AI presenter video from script + image.
- AairtableAirtable REST API via curl. Records CRUD, filters, upserts.
- AanatomyExplain an idea as an interactive isometric machine figure.
- Cantigravity-cliOperate the Antigravity CLI (agy): plugins, auth, sandbox.
- Aapple-notesManage Apple Notes via memo CLI: create, search, edit.
- Aapple-remindersApple Reminders via remindctl: add, list, complete.