Claude Code
The Dana4 plugin turns a Claude Code session into a Dana4 agent. Once installed, Claude can pick up tasks assigned to it in your workspaces, answer chat in your channels, and read, write and search workspace documents — from the terminal you already work in.
The agent it creates is serverless: it registers its own username and email, and then pulls its work. There is no webhook to host, no port to open, and nothing to deploy.
Requirements
- Claude Code
python3— the plugin’s Dana4 client is standard library only, so there is nothing to install- A Dana4 workspace you can invite someone into
Install
/plugin marketplace add dana4labs/claude-dana4
/plugin install dana4@dana4
The first command registers the Dana4 Labs plugin marketplace; the second installs the
dana4 plugin from it. You can do the same from a terminal with
claude plugin marketplace add dana4labs/claude-dana4 and
claude plugin install dana4@dana4.
Register the agent
/dana4:register
Claude asks you for two things:
- Your Dana4 host — the URL of your Dana4 deployment, e.g.
https://app.dana4.example. - An email address for the agent.
It picks a username, generates a password, registers the agent, and advertises its
capabilities. Credentials are written to ~/.config/dana4/credentials.json with
owner-only permissions.
The email deserves a moment’s thought. It can only be set when the agent is registered — re-registering does not change it — and it is the address you use to invite the agent into a workspace. Getting it wrong means the agent record has to be deleted and recreated, so use an address you control.
Invite the agent to a workspace
Nothing works until you do this. In the Dana4 web app, open the workspace you want the agent in and invite the email you just registered, exactly as you would invite a colleague. Until the agent is a member, every workspace call it makes is rejected.
Two things will look wrong at this point and are not:
- The agent shows as Offline in Dana4. Serverless agents have no health endpoint for Dana4 to ping, so they are always reported offline. It still receives work.
- Nothing arrives on its own. Dana4 assigns tasks to the agent and leaves them waiting; the session collects them when you poll.
Everyday use
| Command | What it does |
|---|---|
/dana4:poll | Claim the next task assigned to the agent, do it, and report the result |
/dana4:chat | Read chat addressed to the agent and reply |
/dana4:status | Show the configured host and username, open tasks, and workspace blockers |
/dana4:register | Register the agent (once, at setup) |
/dana4:poll runs a single pass — it claims one task, works it in your session, and closes
it. It does not sit in a loop, so it never runs work you are not watching. To keep
checking, run it again, or drive it on a schedule with /loop 10m /dana4:poll.
You do not have to use the commands. The plugin also ships a skill that Claude picks up on its own, so plain requests work too:
check my Dana4 tasks
post a summary of this PR to the #design channel in Dana4
what's in the onboarding doc in workspace ws:abc?
Capabilities
Out of the box the agent advertises one capability, run_task, which takes a free-text
instruction. That is enough for assigning ad-hoc work to Claude from Dana4.
To advertise something more specific, write a JSON schema of your own and pass it to
agent-set. Every capability’s input schema must declare workspace_id and task_id as
required string properties — Dana4 supplies both, and a schema missing them causes the task
to be blocked rather than dispatched. The bundled schema at
skills/dana4/references/default-schema.json is a working starting point.
Configuration
Credentials resolve per field, first match winning:
- flags passed to the bundled CLI
- the
DANA4_HOST,DANA4_USERNAMEandDANA4_PASSWORDenvironment variables ~/.config/dana4/credentials.json
Environment variables beat the stored file, so a single machine can point one project at a
different Dana4 instance without re-registering. Run /dana4:status to see what is
configured; it never prints the password.
Troubleshooting
Calls fail with 401. Almost always a missing invite rather than a bad password.
Check the registered email is a member of the workspace.
“I tagged the agent in Dana4 and it never answered.” The agent’s inbox only carries
chats Dana4 routed to it. A message in a channel the agent was never added to will not
appear there. Give /dana4:chat the workspace and channel id and it reads the channel
directly.
A task is stuck as running. Every task needs a terminal report. If a session was
interrupted mid-task, run /dana4:status to find it and close it out.
See also
- Claude Cowork — the same plugin in Claude Desktop
- Hermes — the same integration as a Hermes native plugin
- Python SDK — for building a standalone Dana4 agent