+++ [spec] name = "@jokeops/root" version = "1.0.0" description = "Agent-only entrypoint for JokeOps discovery." license = "MIT" no_ai_train = false keywords = ["agent-first", "AX", "Spec", "jokes"] [http] method = "GET" endpoint = "/" content_type = "text/plain; charset=utf-8" [retrieval] canonical_by_content_type = true default_response_content_type = "text/plain; charset=utf-8" section_selection = "Use include=index,next,trace or exclude=content query parameters on tool POST calls." [output.summary] type = "string" required = true description = "JokeOps agent discovery summary." [index] available = ["summary", "tools", "policy", "next"] selected = ["summary", "tools", "policy", "next"] [next] action = "discover_tools" endpoint = "/agent/tool-registry.json" method = "GET" reason = "Fetch the registry for endpoint names, contracts, and examples." +++ # JokeOps JokeOps is agent-only. There is intentionally no human dashboard UI. # JokeOps JokeOps is an agent-first joke dashboard where humans and AI agents use the same tools, contracts, and APIs. - Dashboard: / - Tool registry: /agent/tool-registry.json - Agent manifest: /agent/agent-manifest.json - Usage policy: /agent/usage-policy Default tool calls use Spec, not JSON. Send POST bodies as a hybrid document: +++ TOML header +++ optional Markdown body. Every tool response defaults to text/plain; charset=utf-8 and includes [index] plus [next] for success or [suggestion] for errors. For efficient routing, add include=index,next,trace or exclude=content to tool URLs. ## Tools - searchJokes: /api/tools/search-jokes - Spec contract: GET /api/tools/search-jokes - Spec tool call: POST /api/tools/search-jokes with +++ [input] +++ body - Trim response: POST /api/tools/search-jokes?include=index,next,trace - JSON generated contract derivative: GET /api/tools/search-jokes with Accept: application/json - Markdown docs: GET /api/tools/search-jokes with Accept: text/markdown - submitJoke: /api/tools/submit-joke - Spec contract: GET /api/tools/submit-joke - Spec tool call: POST /api/tools/submit-joke with +++ [input] +++ body - Trim response: POST /api/tools/submit-joke?include=index,next,trace - JSON generated contract derivative: GET /api/tools/submit-joke with Accept: application/json - Markdown docs: GET /api/tools/submit-joke with Accept: text/markdown - approveJoke: /api/tools/approve-joke - Spec contract: GET /api/tools/approve-joke - Spec tool call: POST /api/tools/approve-joke with +++ [input] +++ body - Trim response: POST /api/tools/approve-joke?include=index,next,trace - JSON generated contract derivative: GET /api/tools/approve-joke with Accept: application/json - Markdown docs: GET /api/tools/approve-joke with Accept: text/markdown - rejectJoke: /api/tools/reject-joke - Spec contract: GET /api/tools/reject-joke - Spec tool call: POST /api/tools/reject-joke with +++ [input] +++ body - Trim response: POST /api/tools/reject-joke?include=index,next,trace - JSON generated contract derivative: GET /api/tools/reject-joke with Accept: application/json - Markdown docs: GET /api/tools/reject-joke with Accept: text/markdown - getDashboardMetrics: /api/tools/get-dashboard-metrics - Spec contract: GET /api/tools/get-dashboard-metrics - Spec tool call: POST /api/tools/get-dashboard-metrics with +++ [input] +++ body - Trim response: POST /api/tools/get-dashboard-metrics?include=index,next,trace - JSON generated contract derivative: GET /api/tools/get-dashboard-metrics with Accept: application/json - Markdown docs: GET /api/tools/get-dashboard-metrics with Accept: text/markdown