Run a worker
A worker is a DeepSeek Harness plugin that shares the models already installed on this machine, at a price you set. It runs Ollama locally; there is no cloud API key and no metered inference bill.
Requirements
- DeepSeek Harness
0.2.2-rc.1or newer, and Node 22+. - Ollama with at least one model pulled
(
ollama pull qwen3:8b, for example). - A Base Sepolia wallet with a little test ETH for gas. The plugin generates one for you.
There is no GenKaKu token and no staking. You earn USDC; you spend ETH for gas.
Install
In DeepSeek Harness open Plugins → Add plugin, paste:
@genkaku/dsh-worker-plugin
Leave the install source on Default registry (registry.npmjs.org), confirm,
and restart DeepSeek Harness. The same thing from a shell:
dsh plugin add @genkaku/dsh-worker-plugin
A GenKaKu worker entry appears in the sidebar.
First start
The plugin looks for Ollama at http://127.0.0.1:11434 and starts
ollama serve itself if it is installed but not running. The first panel
section shows whether Ollama is running and how many models it found.
When the offer board is empty, the plugin lists every local model at
defaultPricePerHour, which is 0 by default. That is deliberate: a machine
whose owner has not set a price should not put a price on their hardware.
Set a price
Open Models offered in the panel and give each model an hourly price in
USDC, as an integer with 6 decimals of precision (so 250000 is
0.25 USDC/hour). Leave it at 0 to serve the model for free.
- A paid model opens a USDC escrow per session and settles with a signed receipt.
- A free model is served without touching the chain: no escrow, no gas, no transaction.
Billing accrues per started minute of a session, so a two-minute job pays two minutes at the hourly rate, not a full hour.
Publish on-chain (optional)
The Directory switch writes your peer ID and locator into
WorkerRegistry, so users can find you without knowing your address in
advance.
It is off by default, and it only turns on when this machine has a globally dialable address. A listing whose address nobody can dial is worse than no listing. Publishing costs one transaction, and a locator is permanent once it is on-chain — a hostname or IP written there cannot be withdrawn, only replaced.
Peers on the same LAN can connect without a registry entry, using a manual multiaddr in the user plugin.
Wallet and payout
The Wallet section shows:
- the worker address,
- ETH (gas) and USDC (earnings) balances,
- unclaimed in escrow — settled income that is already yours but still
sits inside
JobEscrow, - a Claim button that moves that balance into the wallet.
Claiming is a transaction, so the wallet needs a little ETH. USDC is what the worker earns, not what it spends.
The private key is stored in plain text, mode 0600, at
~/.dsh/genkaku/genkaku.keys.json. It signs receipts and binds the on-chain
directory entry: back it up before moving the machine to a new disk, and treat
anyone who can read that file as the owner of the wallet.
Model tiers
The marketplace labels each model from Ollama's reported capabilities and parameter count:
| Tier | Meaning |
|---|---|
agent | Has tools and at least 9B parameters — suitable for an agent loop |
light | Has tools but is small or of unknown size — tool calls may be unreliable |
chat | No tools capability — not suitable for agents |
The tier is a label, never a filter. Nothing stops you listing a chat model;
the user just sees that it cannot drive an agent.
Thinking models run with think: false by default so a single request does not
spend its budget on hidden reasoning. Set GENKAKU_OLLAMA_THINK=1 before
starting DeepSeek Harness to keep Ollama's default behaviour.
Ports and networking
- libp2p listens on
/ip4/0.0.0.0/tcp/4001and/ip6/::/tcp/4002by default. Open the TCP ports you configure if you want direct connections. - The local status server binds the first free port in 47821–47826. Two DSH profiles on one machine each need their own port; if you see "Loading worker status…" forever, another profile probably owns the range.
- On Windows, allow Node through the firewall when the worker first starts.
Troubleshooting
Ollama is not detected. Run ollama serve once, or press Start Ollama in
the panel. If Ollama lives elsewhere, change ollamaHost in the plugin
settings.
The Directory switch is greyed out. The machine has no globally dialable address. Same-LAN peers can still connect by multiaddr; otherwise the session will have to go through the seed relay.
A session was served but the balance did not move. Settlement credits
accrued inside the contract. Press Claim; the figure then appears as the
wallet's USDC balance.
Nothing is listed on npm? Check that you are on
registry.npmjs.org, not a mirror that has not synced yet.