From dreamsolve
Manage projects, tasks, their files, and run agents in DreamSolve
How this skill is triggered — by the user, by Claude, or both
Slash command
/dreamsolve:dreamsolveThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
Use DreamSolve to manage projects, tasks, nodes, files, and AI agents.
Use DreamSolve to manage projects, tasks, nodes, files, and AI agents.
Nodes are the core building blocks. Company, Project, and Task are the most used. Other Types include: Action, Assignment, BusinessUnit, Context, Decision, Delta, Experiment, File, Hypothesis, Issue, KnowledgeTuple, Log, Memory, Module, Package, Person, Problem, Resource, Team.
type and name. Optional: description, parentId, status (pending/running/completed/onhold), data.includeChildren: true to fetch child nodes.includeTypes.query (full-text on name/description), type, status, parentId, containerId. Default limit: 50, max: 200.nodeId and plan (free-form text or bullet points).taskId with either assigneeId or assigneeName.nodeId and fileId.nodeId and name. Optional: description, content, mimeType.query or category (e.g., Researcher, Planner, Critic).conversational or node-assignment mode. Requires agentId, mode, and userInput. Use nodeId for node-assignment mode. Use conversationId to continue a conversation.The default connection uses OAuth via mcp-remote, which opens a browser for the user to sign in. For autonomous agents running on separate systems from their user (e.g., headless servers, CI/CD pipelines, unattended automation), use Ed25519 key pair authentication instead. This replaces the browser-based OAuth flow with a keypair registration and JWT token exchange.
Use agent authentication when:
For interactive use where the user is present, use the default OAuth flow (no extra setup needed).
Generate a key pair and extract the raw 32-byte public key as base64url:
openssl genpkey -algorithm Ed25519 -out agent_private.pem
PK=$(openssl pkey -in agent_private.pem -pubout -outform DER | tail -c 32 | basenc --base64url | tr -d '=')
echo "Public key: $PK"
Store agent_private.pem securely. It is the agent's identity.
Construct the URL and share it with a human who has access to the target organization:
https://dreamsolve.ai/invitations/agent/organization/<ORG_ID>/register?pk=<PK>&name=<AGENT_NAME>
ORG_ID — target organization ID (the user can find this in their DreamSolve organization settings)PK — the base64url public key from Step 1name — a human-readable label for the agent (optional)Ask the user to open this URL, sign in, select a role for the agent, and approve. After approval the page displays an agentUserId — the user must share this value back.
Sign a short-lived JWT with the private key and exchange it for bearer tokens:
AGENT_USER_ID="<agentUserId from the user>"
# Build and sign the JWT
JWT=$(python3 -c "
import json, time, base64, subprocess, tempfile, os
def b64u(data): return base64.urlsafe_b64encode(data).rstrip(b'=').decode()
header = b64u(json.dumps({'alg':'EdDSA','typ':'JWT'}).encode())
now = int(time.time())
payload = b64u(json.dumps({'sub':'$AGENT_USER_ID','iat':now,'exp':now+300}).encode())
msg = f'{header}.{payload}'.encode()
tmp = tempfile.NamedTemporaryFile(delete=False)
tmp.write(msg); tmp.close()
sig = subprocess.check_output(['openssl','pkeyutl','-sign','-inkey','agent_private.pem','-rawin','-in',tmp.name])
os.unlink(tmp.name)
print(f'{header}.{payload}.{b64u(sig)}')
")
# Exchange for access and refresh tokens
curl -s -X POST https://dreamsolve.ai/api/v1/agents/auth/token \
-H "Content-Type: application/json" \
-d "{\"agent_jwt\": \"$JWT\"}"
The response contains access_token (valid 1 hour, mcp_ prefix) and refresh_token (valid 30 days, mcpr_ prefix).
Use the access token as a Bearer token on the MCP server endpoint:
curl -s -X POST https://dreamsolve.ai/api/mcp/server \
-H "Authorization: Bearer $ACCESS_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"jsonrpc": "2.0", "id": 1,
"method": "tools/call",
"params": {"name": "searchNodes", "arguments": {"query": "my project"}}
}'
All the same MCP tools listed above (createNode, searchNodes, assignTask, etc.) work identically with agent tokens.
Before the access token expires, refresh it:
curl -s -X POST https://dreamsolve.ai/api/v1/agents/auth/refresh \
-H "Content-Type: application/json" \
-d "{\"refresh_token\": \"$REFRESH_TOKEN\"}"
This returns a new access_token. Refresh proactively before the 1-hour expiry to avoid interruptions.
When an agent is removed from an organization (via organization settings), its key is immediately deactivated. The agent can be re-registered with a new key pair.
desiredState).mcp-remote) when the user is present. Only use agent key pair authentication for headless or unattended operation on a separate system.Creates, edits, and optimizes skills for Claude Code, including drafting, evaluating with test prompts, iterating on performance, and improving skill descriptions for better triggering accuracy.
npx claudepluginhub difflabai/marketplace --plugin dreamsolve