Start with DashClaw-hosted Azure SaaS, or run your own control plane when you need full deployment ownership.
What this page is
Hosted SaaS changes who runs the platform. Self-hosting changes where governance data and operational responsibility live. In both cases, the runtime depth you reach still depends on how your agents are integrated across evidence import, advisory governance, approval orchestration, and runtime enforcement.
Best for design partners and customer rollout. DashClaw operates the platform, Admin Console, billing, and support workflows while your team focuses on onboarding agents and using governed operations.
Best for internal evaluation, partner pilots in customer-owned environments, or teams that want full deployment and data-plane control.
Your DashClaw instance ships with the DashClaw control plane: policy evaluation, approvals, replay, evidence, trust, and operator workflows. The governance depth you reach still depends on how your agents are integrated at runtime.
All features are free, self-hosted, and work without any external AI provider. The only optional LLM feature is the llm_judge scorer type in the Evaluation Framework.
Skills are an open standard for giving agents specialized capabilities. Any agent that supports the skill framework can load this skill and become a OSuite platform expert -- with knowledge of 177+ SDK methods across 29 categories.
Works with Claude Code, and the growing ecosystem of skill-compatible agents.
osuite-platform-intelligence/
|-- SKILL.md # 15 guided workflows (v2.3)
|-- scripts/
| |-- validate-integration.mjs # End-to-end connectivity test
| |-- diagnose.mjs # 5-phase platform diagnostics
| `-- bootstrap-agent-quick.mjs # Agent workspace importer
`-- references/
|-- api-surface.md # 140+ routes, 29 categories
|-- platform-knowledge.md # Architecture, auth chain, ID prefixes
`-- troubleshooting.md # Error resolution guideThe skill includes 15 guided workflows. Your agent picks the right one from the decision tree based on what you ask:
Full SDK integration with action recording and guard checks
5 scorer types: regex, keywords, numeric range, custom, LLM judge
Template registry with mustache variables and version history
Structured ratings with auto-sentiment and auto-tagging
Multi-framework bundles with evidence packaging
Statistical baselines and z-score deviation alerts
Velocity scoring and 6-level maturity model
Weighted quality profiles and risk templates
Guard rules for cost ceilings and risk thresholds
Auto-discover and import existing agent workspace data
Full-stack scaffold guide for adding new API routes
Generate a OSuite SDK in any language from OpenAPI
Approve and deny agent actions from the terminal with osuite approvals
Govern Claude Code tool calls via PreToolUse and PostToolUse lifecycle hooks
Guided error resolution for auth and rate limits
.claude/skills/ for Claude Code)The installer generates secrets, writes .env.local, installs dependencies, and prints the API key your agents should use.
./install-windows.bat
bash ./install-mac.sh
When it finishes, open http://localhost:3000.
If you want cryptographic identity binding, your agent generates a keypair and prints a one-click pairing URL. You approve once (or approve-all).
# Optional: sign actions with a private key OSUITE_PRIVATE_KEY_PATH=./secrets/cinder-private.jwk # Optional: server-side enforcement (set on the dashboard host) ENFORCE_AGENT_SIGNATURES=true
The goal is: no manual public key uploads. Pairing registers the matching public key automatically.
Self-hosting the control plane does not choose the runtime pathway for you. Use one of these guides when you are ready to instrument a specific runtime surface.
This section is the self-host path. If you want DashClaw-hosted Azure SaaS, use the operator-run onboarding and keep infrastructure inside the managed service boundary.
Governance workflow templates
Reusable operator playbooks that turn agent setup into governed, replayable workflows.
First Governed Agent
Connect one runtime, send one guarded action, and confirm decision replay is visible.
Install SDK or hooks
Proof: connect surface
Send first guarded action
Proof: decision replay
Terminal Approval Channel
Enable CLI approvals so operators can approve one live action end-to-end.
Install @osuite/cli
Proof: terminal approval
Approve one live action
Proof: approval event
Use Neon for the fastest self-serve path, or bring your own Postgres if you are mapping to Azure or another managed host.
postgresql://user:pass@host:5432/databaseYou'll paste this as DATABASE_URL in the next step.
Use Vercel for the quickest self-serve route, or map the same environment variables into Azure Container Apps or another Node.js host.
OSUITE_API_KEY is your bootstrap admin key — it authenticates agents and seeds your first organization. After you sign in, you can create and manage additional API keys from the dashboard at /api-keys.Tables are created automatically on first request.
No OAuth app required. Add one environment variable and you can sign in immediately.
In your deployment environment settings, add:
Then redeploy. Visit your app and sign in with your password on the login page.
Use a strong password. This grants full admin access. You can add OAuth later when you want to invite teammates.
Use Redis for cross-instance events, background coordination, and production-safe realtime delivery.
Upstash is a fast path, but any production Redis that exposes a standard connection string works.
For SaaS-style operations, run a separate worker process so background billing, trial, and webhook jobs are decoupled from the web process.
If you deploy outside a single all-in-one container, keep the web app focused on HTTP traffic and run the platform job worker independently.
OSUITE_PLATFORM_WORKER_MODE=dedicated OSUITE_PLATFORM_JOB_BACKEND=database OSUITE_PLATFORM_WORKER_POLL_MS=5000 npm run worker:platform
The included docker-compose.yml now runs both the web service and a dedicated worker service. In cloud environments, map this same command to a second process/container.
Agents only need a base URL + API key. Once connected, they can record decisions, enforce policies, score outputs, define quality profiles, manage prompts, and track learning -- all through the SDK.
OSUITE_BASE_URL=https://your-app.example.com OSUITE_API_KEY=<your-secret-api-key> OSUITE_AGENT_ID=my-agent
Your DashClaw app uses host-level environment variables. Your agent uses its own environment variables.
import { OSuite } from 'osuite';
const dc = new OSuite({
baseUrl: process.env.OSUITE_BASE_URL,
apiKey: process.env.OSUITE_API_KEY,
agentId: 'my-agent',
guardMode: 'warn',
});
// Record a decision
const action = await dc.createAction({
actionType: 'deploy',
declaredGoal: 'Ship auth-service v2.1',
riskScore: 40,
});
// Guard check (policy enforcement)
const decision = await dc.guard({
actionType: 'deploy',
content: 'Deploying to production',
riskScore: 40,
});
// Score the output quality
await dc.scoreOutput({
scorer_id: 'es_your_scorer',
output: deployResult,
action_id: action.action_id,
});
// Score against your custom quality profile
const profileScore = await dc.scoreWithProfile('sp_your_profile', {
duration_ms: deployResult.duration,
confidence: deployResult.confidence,
action_id: action.action_id,
});
// Update outcome
await dc.updateOutcome(action.action_id, {
status: 'completed',
outputSummary: 'Deployed successfully',
});from osuite import Osuite
dc = OSuite(
base_url=os.environ["OSUITE_BASE_URL"],
api_key=os.environ["OSUITE_API_KEY"],
agent_id="my-agent",
guard_mode="warn",
)
# Record a decision
action = dc.create_action(
action_type="deploy",
declared_goal="Ship auth-service v2.1",
risk_score=40,
)
# Guard check (policy enforcement)
decision = dc.guard(
action_type="deploy",
content="Deploying to production",
risk_score=40,
)
# Score the output quality
dc.score_output(
scorer_id="es_your_scorer",
output=deploy_result,
action_id=action["action_id"],
)
# Score against your custom quality profile
profile_score = dc.score_with_profile("sp_your_profile", {
"duration_ms": deploy_result["duration"],
"confidence": deploy_result["confidence"],
"action_id": action["action_id"],
})
# Update outcome
dc.update_outcome(action["action_id"],
status="completed",
output_summary="Deployed successfully",
)