hermes-skills/arifos/arifos-three-surface-audit/SKILL.md
Audit and build the three public surfaces — arif-fazil.com (human root), arifos.arif-fazil.com (MCP Observatory), aaa.arif-fazil.com (A2A gateway). Verify protocol contracts, Caddyfile routing, and documentation drift.
npx skillsauth add ariffazil/openclaw-workspace arifos-three-surface-auditInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
Audit or build the three public surfaces: arif-fazil.com, arifos.arif-fazil.com, aaa.arif-fazil.com. Run this when deploying new endpoints, checking for documentation drift, or verifying protocol compliance.
| Surface | Canonical job | Must have |
|---------|--------------|-----------|
| arif-fazil.com | Human identity root | /, /000, /999, /llms.txt, cross-links to MCP + A2A |
| arifos.arif-fazil.com | MCP Observatory + Streamable HTTP /mcp | /mcp (POST+GET), /mcp-server-card.json, /observatory/, /api/catalog/{tools,resources,prompts}, /api/status/summary |
| aaa.arif-fazil.com | A2A Agent Gateway | /.well-known/agent-card.json, /skills, /validator, message:send + message:stream endpoints |
| mcp.arif-fazil.com | Migration alias only | 308 redirect to arifos.arif-fazil.com/mcp/ |
/root/arifOS/Caddyfile — active on VPS (arifOS compose stack)/root/compose/Caddyfile — federation stack/root/Caddyfile — standalonearifos.arif-fazil.com {
root * /var/www/html/arif/observatory
file_server
@arifosAPI {
header Authorization *Bearer*
header Content-Type application/json
}
handle /api/* {
reverse_proxy localhost:8888
}
}
aaa.arif-fazil.com {
root * /var/www/html/aaa
file_server
@a2aRPC {
header Content-Type application/json
}
handle /message:send* {
reverse_proxy localhost:9999
}
handle /message:stream* {
reverse_proxy localhost:9999
}
}
mcp.arif-fazil.com {
redir https://arifos.arif-fazil.com/mcp/ 308
}
handle PATH matches exactly — handle /api does NOT match /api/foo. Use named matchers with header conditions instead:
@myapi {
path /api/*
}
handle @myapi {
reverse_proxy localhost:8888
}
Hand-curated tool counts, protocol versions, and capability lists drift from live runtime. Every catalog endpoint must be generated from runtime, never hand-written.
The minimum live-generated endpoints needed:
GET /api/catalog/tools — from tools/list MCP callGET /api/catalog/resources — from resources/list MCP callGET /api/catalog/prompts — from prompts/list MCP callGET /api/status/summary — from /health + runtime vitalsThe blueprint flagged: federation-health.json says "A2A v0.3.0" but mcp.arif-fazil.com says "Planned". If /federation-health.json returns HTML, it means the static JSON file is missing from the doc root. Check:
curl -s "https://arif-fazil.com/federation-health.json" | jq .
mkdir -p /var/www/html/aaa /var/www/html/arif/observatory/api/api/ endpoints)docker exec caddy caddy reload or docker restart caddy--max-time suppress errors, check exit codes)# All three surfaces
curl -s https://aaa.arif-fazil.com/ -o /dev/null -w "%{http_code}\n"
curl -s https://arifos.arif-fazil.com/observatory/ -o /dev/null -w "%{http_code}\n"
curl -s https://mcp.arif-fazil.com/ -o /dev/null -w "%{http_code} %{redirect_url}\n"
# Protocol contracts
curl -s https://aaa.arif-fazil.com/.well-known/agent-card.json | jq .
curl -s https://arifos.arif-fazil.com/mcp-server-card.json | jq .
# Runtime catalogs
curl -s https://arifos.arif-fazil.com/api/mcp/tools.json | jq '.tools | length'
curl -s https://arifos.arif-fazil.com/api/catalog/resources | jq .
curl -s https://arifos.arif-fazil.com/api/status/summary | jq .
# A2A endpoints
curl -s https://aaa.arif-fazil.com/a2a -X POST \
-H "Content-Type: application/json" \
-d '{"jsonrpc":"2.0","method":"message:send","params":{...},"id":1}' \
-w "\nHTTP %{http_code}"
If Cloudflare is proxying and returning stale 404s after Caddy reload:
# Get Cloudflare Zone ID from dashboard, then:
curl -X POST "https://api.cloudflare.com/client/v4/zones/$ZONE_ID/purge_cache" \
-H "Authorization: Bearer $CF_TOKEN" \
-H "Content-Type: application/json" \
-d '{"files":["https://arifos.arif-fazil.com/observatory/","https://arifos.arif-fazil.com/mcp-server-card.json"]}'
If token lacks purge rights, use Cloudflare dashboard → Caching → Purge Everything.
testing
OpenClaw edge agent bridge — operational triage, doctor, restart, and A2A bridge routing for the federation edge (Telegram surface). USE WHEN: "openclaw unhealthy", "gateway down", "edge bot not responding", "a2a bridge disconnected", "watchdog tripped", "openclaw doctor", "openclaw restart". NOT for token/security audit — use FORGE-telegram-audit.
tools
Generate images, videos, TTS, voice clone, and music via MiniMax MCP server. Use when user asks to "draw", "generate image", "create picture", "make a photo", "text to image", "image generation".
testing
Single load-bearing constitutional-judgment skill. Routes all F1–F13, verdict, hold, seal, scope, authority and floor-check calls through the live arif_judge surface. Replaces 7 overlapping predecessors (arifos-constitutional-judge, arifos-constitutional-judge, arifos-constitutional-judge, arifos-constitutional-judge, arifos-constitutional-judge, arifos-constitutional-judge, arifos-constitutional-judge).
development
MANDATORY LSP grounding gate BEFORE any code mutation on .ts, .py, .js, .tsx, .jsx files. Forces the agent to read real-time compiler diagnostics and structural project context before editing — eliminating blind guesses and anchoring every mutation in F2 (TRUTH). Routes through arifOS kernel (:8088) for centralized gate logic.