Local Composer against EDGE dev
SkillAI & modelsRun a local Composer against the shared EDGE dev environment over HTTPS at https://local.composer.space/, sign in with a passkey, and connect the dev MCP server (mcp.dev.dxos.network) so the agent can read and write the same dev spaces. Use when asked to point local Composer at dev, to work against the dev MCP, to set up the local HTTPS cert, or when the dev MCP answers `whoami` but lists no operations.
Instructions available. Your AI can read the instructions. Execution depends on the setup they require.
Account requirements not reviewed. Check the skill instructions before use; ahel provides instructions and does not run this skill.
Add ahel to your AI once: Claude, ChatGPT, Cursor, Claude Code or Codex. Then ask it to use this.
Then ask your AI: use the Local Composer against EDGE dev skill
What this skill tells your AI
The instructions your AI receives, as published by dxos/dxos in .agents/skills/composer-dev-env/SKILL.md and read by ahel’s review.
The chain is: local Composer (HTTPS, trusted cert) → EDGE dev (hub, auth, sync) → dev MCP server
reading the same identity's spaces. The dxos plugin's composer MCP points at production
(composer.dxos.network/mcp); the dev MCP is a separate server and a separate identity.
1. Certificate (once per machine)
local.composer.space resolves to 127.0.0.1. Vite loads key.pem / cert.pem from the repo
root of the worktree it serves when HTTPS=true (packages/apps/composer-app/vite.config.ts);
*.pem is gitignored.
mkcert -install
mkcert -cert-file cert.pem -key-file key.pem local.composer.space localhost 127.0.0.1 ::1
chmod 600 key.pem
Each worktree needs its own copy (or a copy of the pair) at its root.
2. Serve against dev on port 443
Vite defaults to 5173; --port 443 makes the bare URL work (macOS lets an unprivileged user bind
443). Run it in the background — the first start builds dependencies for a minute or more.
HTTPS=true DX_EDGE_BASE_URL=https://dev.dxos.network/ DX_HUB_URL=https://dev.dxos.network/hub/ DX_AUTH_URL=https://account.dev.composer.space moon run composer-app:serve -- --port 443 --strictPort
Ready when the log prints Local: https://local.composer.space:443/. Verify without -k, which
also proves the cert is trusted: curl -s -o /dev/null -w '%{http_code}' https://local.composer.space/
→ 200. host: true in the config also exposes it on the LAN address.
3. Account and passkey (the user does this)
The agent cannot sign in or create passkeys — hand these to the user:
- Open https://local.composer.space/ and log in with a test email — this creates the account on dev.
- Create a passkey, then use it.
4. Connect the dev MCP
claude mcp add --transport http composer-dev https://mcp.dev.dxos.network/mcp
This writes the project-local scope of ~/.claude.json, not the repo. The user authorizes it
with the passkey (/mcp in an interactive claude terminal, or the app's connector settings); a
new session is needed for the tools to load. An unauthenticated POST returns 401 with OAuth
metadata at /.well-known/oauth-protected-resource — that means reachable, not broken.
Verify: whoami returns an identity different from the prod composer MCP, with the dev
spaces; then queryOperations (no arguments) lists org.dxos.operation.space.addObject and friends.
Troubleshooting: whoami works but queryOperations / loadSkill return []
whoami, createUpload and createDownload are static; everything else comes from EDGE's
operation-service over RPC. When that RPC fails, mcp-space-service serves an empty registry
(edge/packages/services/mcp-space-service/src/mcp/gateway.ts). Invoking by key then answers
Unknown operation. Confirm in SigNoz (the claude.ai SigNoz connector):
mcp-space-service, bodyoperation registry unavailable; serving the static surface only.- The cause, in
operation-servicelogs: filterresource.deployment.environment = 'dev' AND service.name = 'operation-service' AND severity_text IN ('error', 'warn'). APluginInitializationErrornames the plugin that failed to activate; one failing plugin empties the whole registry.
A bundle path containing .local-pack means the deployed worker was built with
pnpm link-packages from a local dxos checkout; a version skew there is the usual culprit.
The fix is redeploying the dev worker from a consistent build — that touches the shared dev
environment, so confirm with the user first.
Troubleshooting: an operation fails with Query execution failed (queryCount=N)
The message drops the cause. wrangler tail shows it, but only for requests made while the tail
is connected, so start it and then repeat the call:
cd ../edge/packages/services/operation-service && npx wrangler tail operation-service --format json
Look for the query failed log line and its error field. QueryError: Query too complex means
db-service's planner cannot run that query shape. The child-of query that Task.collectTree
issues broke tasks.update (starting or claiming a task) and tasks.addArtifact (attaching a
pull request) until dxos/edge#1192.
Dev is deployed by hand, and deploys overwrite each other
No workflow deploys dev: every dev worker is whatever was last deployed from someone's checkout. A fix that worked an hour ago can disappear when someone deploys a branch without it. Before concluding that a fix does not work, check that it is still live:
npx wrangler deployments list --name db-service # likewise operation-service, mcp-space-service
Deploy from a checkout of edge with moon run <service>:deploy -- --env dev, after merging
edge's main into your branch so the deploy rolls nobody's landed change back.
Signals
- GitHub stars
- 525
- Forks
- 49
- Last commit
- Sep 2026
Advanced
- Item type
- skill
- Key
composer-dev-env- Source
- github.com/dxos/dxos
Related picks
Skill · mattpocock
The pick for TypeScripttypescript-pro
Skill · jeffallan
The pick for TypeScriptcloudflare
Skill · cloudflare
The pick for Cloudflareskill-creator
Skill · anthropics
More in AI & modelswayfinder
Skill · mattpocock
More in AI & modelsalgorithmic-art
Skill · anthropics
More in AI & models