Show HN: Clai.chat – Agents as JSON, config and (multi-vendor) transcript sync A Show HN post introduced clai.chat, a command-line AI tool that defines agents as JSON profiles combining a model, prompt, tools, MCP servers and skills, and can route requests to any of twelve vendors or a local Ollama instance. The post's example profile, cchub:clai/cloud-medic@3, runs as an on-call engineering agent that uses Sentry, GitHub and kubectl-style commands to diagnose service errors and open draft fix PRs, while a cmd-ban list blocks commands such as git push, rm, kubectl delete and terraform apply before the agent spawns them. Profiles can be chained with pipes, and skills are fetched from the Hub, GitHub or any URL and pinned by hash, such as cchub:clai/clai-subagents@1. clai is command line artificial intelligence: pipe data in, get data out. Give it a profile and it is a full agent, with tools, MCP servers, skills and workers of its own. Build agents with alias,chain them with |. A profile is a model, a prompt, tools, MCP servers and skills, plus what the agent may never do. This on-call agent is a real one from the Hub. cchub:clai/cloud-medic@3Copy, then run it in a clone of your service, with GITHUB TOKEN set clai -profile-path cchub:clai/cloud-medic@3 -query-summary query Modelmodel gpt-6.1-sol Which vendor answers: any of twelve, or local Ollama. -cm swaps it for one run. Promptprompt You are the on-call engineer for the service whose code is in the current directory. The rest of it works out where the service runs and where its errors show up, sends parallel investigator workers after what hurts users most, opens a draft fix PR when the cause is in this code, and keeps a status note so the next run picks up where it left off. Toolstools date cat ls find rg git rows between line count cmd write file mkdir mcp slivingdoc mcp sentry mcp github async cmd+ await, logs, status, cancel banned: git push banned: rm banned: kubectl delete banned: kubectl apply +35 more What it may do, and with cmd-ban what it never may: it can read your cluster and your deploys, but clai refuses any command line that pushes, deletes, deploys or changes them, before it spawns. MCP serversmcp servers slivingdocoptional sentry githubneeds GITHUB TOKEN slivingdoc for its status note, Sentry for the errors, GitHub for CI and the draft fix. The token is named by its variable, never written in the file. Skillsskills clai-subagentscchub:clai/clai-subagents@1, pinned SKILL.md skills from the Hub, GitHub or any URL, fetched and trusted with the profile. This one teaches the agent how to start, await and read clai workers. Show the JSON { "description": "On-call agent for the repo you are in: works out where the service runs and where its errors show up Sentry, GitHub Actions, and kubectl, wrangler, fly, gcloud or aws when you are signed in , finds the root cause of what hurts users most with parallel investigator workers, and opens a draft fix PR. Keeps a status note in slivingdoc, so each run follows up instead of starting over. Run it in a clone: 'clai -profile-path cchub:clai/cloud-medic -query-summary query'. Needs GITHUB TOKEN contents and pull requests write and npx; slivingdoc memory signs you in on the first run in a terminal or set SLIVINGDOC TOKEN , and the agent runs without memory where it cannot sign in. The first run in a terminal opens your browser to sign in to Sentry.", "model": "gpt-6.1-sol", "use tools": true, "save-reply-as-conv": true, "tools": "date", "cat", "ls", "find", "rg", "git", "rows between", "line count", "cmd", "write file", "mkdir", "mcp slivingdoc ", "mcp sentry ", "mcp github ", "async cmd", "async cmd await", "async cmd logs", "async cmd status", "async cmd cancel" , "cmd-ban": "git push", "rm", "kubectl delete", "kubectl apply", "kubectl create", "kubectl edit", "kubectl patch", "kubectl replace", "kubectl scale", "kubectl rollout", "kubectl drain", "kubectl cordon", "kubectl exec", "kubectl config use-context", "helm install", "helm upgrade", "helm uninstall", "helm rollback", "wrangler deploy", "wrangler delete", "wrangler rollback", "wrangler secret", "wrangler d1", "wrangler r2", "wrangler kv", "fly deploy", "fly scale", "fly secrets", "flyctl deploy", "flyctl scale", "flyctl secrets", "gcloud auth", "aws configure", "tofu apply", "tofu destroy", "terraform apply", "terraform destroy", "gh pr merge", "gh api" , "skills": "cchub:clai/clai-subagents@1 sha256=bf52c25be2989453e5fec1ad7528560f7b2999a9df86572e7ed168ba33947283" , "mcp servers": { "slivingdoc": { "command": "npx", "args": "-y", "slivingdoc@1.3.0", "serve", "--writable-paths", "clai/cloud-medic" , "timeout seconds": 120, "startup": "lazy", "connect timeout seconds": 180, "optional": true }, "sentry": { "url": "https://mcp.sentry.dev/mcp", "timeout seconds": 120, "startup": "lazy", "connect timeout seconds": 180 }, "github": { "url": "https://api.githubcopilot.com/mcp/", "auth": { "token env": "GITHUB TOKEN" }, "auth timeout seconds": 0, "timeout seconds": 120 } }, "prompt": "You are the on-call engineer for the service whose code is in the current directory. You find out yourself where it runs and where its errors and failures show up, check every place you can reach, find the root cause of what hurts users most, open a draft fix when the cause is in this code, and keep a status note so the next run picks up where you left off. The user message may name a focus an error, a service, a time range, org/project , owner/repo ; usually it is empty and you decide.\n\nNever ask the user anything. Never change production: you read logs, metrics, issues and code, and the only thing you write outside your status note is a draft pull request.\n\n 1. Recall\n\nCall date . Call mcp slivingdoc notes pull : its result names the notebook directory. Your status note is