{"id":49075908,"url":"https://github.com/skrun-dev/skrun","last_synced_at":"2026-05-06T15:00:44.408Z","repository":{"id":351160367,"uuid":"1196485993","full_name":"skrun-dev/skrun","owner":"skrun-dev","description":"Deploy any Agent Skill as an API via POST /run. Multi-model, stateful, open source.","archived":false,"fork":false,"pushed_at":"2026-04-13T20:07:59.000Z","size":206,"stargazers_count":127,"open_issues_count":5,"forks_count":11,"subscribers_count":1,"default_branch":"main","last_synced_at":"2026-04-13T22:12:18.329Z","etag":null,"topics":["agent-skills","ai-agents","api","cli","llm","mcp","multi-model","runtime","tool-calling","typescript"],"latest_commit_sha":null,"homepage":"https://skrun.sh","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/skrun-dev.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":"CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":".github/CODEOWNERS","security":"SECURITY.md","support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-03-30T18:42:16.000Z","updated_at":"2026-04-13T20:32:45.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/skrun-dev/skrun","commit_stats":null,"previous_names":["skrun-dev/skrun"],"tags_count":2,"template":false,"template_full_name":null,"purl":"pkg:github/skrun-dev/skrun","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/skrun-dev%2Fskrun","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/skrun-dev%2Fskrun/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/skrun-dev%2Fskrun/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/skrun-dev%2Fskrun/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/skrun-dev","download_url":"https://codeload.github.com/skrun-dev/skrun/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/skrun-dev%2Fskrun/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":32699302,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-06T08:33:17.875Z","status":"ssl_error","status_checked_at":"2026-05-06T08:33:17.221Z","response_time":117,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.6:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["agent-skills","ai-agents","api","cli","llm","mcp","multi-model","runtime","tool-calling","typescript"],"created_at":"2026-04-20T10:00:24.199Z","updated_at":"2026-05-06T15:00:44.400Z","avatar_url":"https://github.com/skrun-dev.png","language":"TypeScript","funding_links":[],"categories":["TypeScript"],"sub_categories":[],"readme":"\u003cp align=\"center\"\u003e\n  \u003cimg src=\"assets/banner.svg\" alt=\"Skrun — Deploy any Agent Skill as an API\" width=\"600\"\u003e\n\u003c/p\u003e\n\n\u003ch1 align=\"center\"\u003eSkrun\u003c/h1\u003e\n\n\u003cp align=\"center\"\u003e\n  \u003cb\u003eDeploy any Agent as an API via \u003ccode\u003ePOST /run\u003c/code\u003e.\u003c/b\u003e\u003cbr\u003e\n  The open, multi-model runtime for AI agents — works with any LLM, on any infrastructure.\n\u003c/p\u003e\n\n\u003cp align=\"center\"\u003e\n  \u003csub\u003eThe open-source alternative to Claude Managed Agents (CMA) and Google's\n  Gemini Enterprise Agent Platform (GEAP) — multi-model, self-hostable, MIT.\u003c/sub\u003e\n\u003c/p\u003e\n\n\u003cp align=\"center\"\u003e\n  \u003ca href=\"https://github.com/skrun-dev/skrun/actions\"\u003e\u003cimg alt=\"CI\" src=\"https://img.shields.io/github/actions/workflow/status/skrun-dev/skrun/ci.yml?branch=main\u0026style=for-the-badge\u0026logo=github\u0026label=CI\"\u003e\u003c/a\u003e\n  \u003ca href=\"https://www.npmjs.com/package/@skrun-dev/cli\"\u003e\u003cimg alt=\"npm CLI\" src=\"https://img.shields.io/npm/v/@skrun-dev/cli?style=for-the-badge\u0026logo=npm\u0026label=CLI\u0026color=CB3837\"\u003e\u003c/a\u003e\n  \u003ca href=\"https://www.npmjs.com/package/@skrun-dev/sdk\"\u003e\u003cimg alt=\"npm SDK\" src=\"https://img.shields.io/npm/v/@skrun-dev/sdk?style=for-the-badge\u0026logo=npm\u0026label=SDK\u0026color=CB3837\"\u003e\u003c/a\u003e\n  \u003ca href=\"https://github.com/skrun-dev/skrun/stargazers\"\u003e\u003cimg alt=\"GitHub stars\" src=\"https://img.shields.io/github/stars/skrun-dev/skrun?style=for-the-badge\u0026logo=github\u0026color=FFD700\"\u003e\u003c/a\u003e\n  \u003ca href=\"LICENSE\"\u003e\u003cimg alt=\"License\" src=\"https://img.shields.io/badge/License-MIT-blue?style=for-the-badge\"\u003e\u003c/a\u003e\n\u003c/p\u003e\n\n\u003cp align=\"center\"\u003e\n  \u003cimg alt=\"Node\" src=\"https://img.shields.io/badge/Node-%E2%89%A520-339933?style=for-the-badge\u0026logo=node.js\u0026logoColor=white\"\u003e\n  \u003cimg alt=\"TypeScript\" src=\"https://img.shields.io/badge/TypeScript-strict-3178C6?style=for-the-badge\u0026logo=typescript\u0026logoColor=white\"\u003e\n  \u003cimg alt=\"MCP\" src=\"https://img.shields.io/badge/MCP-compatible-8B5CF6?style=for-the-badge\"\u003e\n\u003c/p\u003e\n\n\u003cp align=\"center\"\u003e\n  \u003ca href=\"#-why-skrun\"\u003eWhy\u003c/a\u003e ·\n  \u003ca href=\"#️-use-cases\"\u003eUse Cases\u003c/a\u003e ·\n  \u003ca href=\"#-quick-start\"\u003eQuick Start\u003c/a\u003e ·\n  \u003ca href=\"#-dashboard\"\u003eDashboard\u003c/a\u003e ·\n  \u003ca href=\"#-sdk\"\u003eSDK\u003c/a\u003e ·\n  \u003ca href=\"#-features\"\u003eFeatures\u003c/a\u003e ·\n  \u003ca href=\"#-documentation\"\u003eDocs\u003c/a\u003e\n\u003c/p\u003e\n\n\u003cp align=\"center\"\u003e\n  \u003cimg src=\"docs/assets/flow.gif\" alt=\"Skrun demo: push an agent, explore the dashboard, run it in the playground\" width=\"800\"\u003e\n\u003c/p\u003e\n\n\u003cp align=\"center\"\u003e\u003csub\u003e\n  \u003cb\u003e4 steps:\u003c/b\u003e (1) \u003ccode\u003eskrun deploy -m \"initial release\"\u003c/code\u003e from your terminal →\n  (2) the agent appears in the dashboard →\n  (3) open the Playground, fill the input →\n  (4) click Run, watch SSE events stream in real time, see the result.\n\u003c/sub\u003e\u003c/p\u003e\n\n---\n\n## 🎯 Why Skrun?\n\nYou shipped an AI capability. It works on your machine. But every user, every customer, every new model brings new plumbing.\n\n**Skrun is the open agent runtime.** Turn your skill — declared as `SKILL.md`, `AGENTS.md`, or your own format — into a `POST /run` endpoint. Without building your own agent loop. Without picking a vendor. Without locking your users behind a wall.\n\n**Any model. Any cloud. BYOK. MIT.** Your skill stays portable.\n\n### What you get\n\n- ✅ Your skill stays in your repo, in the format you choose. Skrun is a deployment target — your repo stays the source of truth.\n- ✅ Compatible with the [Agent Skills open standard](https://agentskills.io) (`SKILL.md`) and [AGENTS.md](https://agents.md) (Linux Foundation). Your existing skill works.\n- ✅ Users bring their own LLM keys. You're never on the hook for their costs.\n- ✅ Self-host on your infrastructure (Node 20+, SQLite or Postgres). [Self-hosting guide](docs/self-hosting.md). Cloud (coming soon).\n- ✅ MIT. Multi-model: Claude, GPT, Gemini, Mistral, Groq, Ollama.\n- ✅ Wrap existing scripts gradually. No big-bang rewrite required.\n\n### Skrun vs vendor runtimes\n\n| | Skrun | CMA / GEAP / Vendor runtimes |\n|--|-------|-----------------|\n| **Models** | Claude, GPT, Gemini, Mistral, Groq + any OpenAI-compatible endpoint (DeepSeek, Kimi, Qwen, Ollama, vLLM…) | One provider only |\n| **Deployment** | Self-hosted (Node + SQLite/Postgres) or our cloud (coming soon) | Vendor cloud only |\n| **Format** | `SKILL.md` ([agentskills.io](https://agentskills.io), 40+ platforms), `AGENTS.md` ([Linux Foundation](https://agents.md)), or your own | Proprietary |\n| **Streaming** | SSE + async webhooks | Varies |\n| **License** | MIT | Closed |\n| **Auth** | GitHub OAuth + API keys — multi-tenant namespaces | Vendor console only |\n| **LLM keys** | Bring your own keys | Vendor billing only |\n\n---\n\n## 🏗️ Use Cases\n\n### 🚀 For OSS skill maintainers — close the issues you can't answer today\n\nYou wrote `changelog-generator` (or `research-to-brief`, or `incident-postmortem`). It works in Claude Code. Stars are climbing. Then someone opens issue #34: *\"How do I run this from a CI pipeline?\"* Issue #41: *\"Can I integrate this with Linear?\"* Issue #58: *\"My status-page automation needs this.\"*\n\nToday you respond: *\"Sorry, this is a SKILL.md — you need Claude Code installed.\"* Half abandon.\n\n**With Skrun:** `skrun deploy`, you reply with a curl command. Issue closed in 5 minutes instead of 3 hours of setup. The drop-off between \"starred it\" and \"actually running it\" disappears.\n\n### 🛠️ For internal AI platforms — visibility and standardization without rewriting\n\nYour team has accumulated 12 LLM-powered scripts in 2 years. Each engineer rolled their own. One left last week — three of his scripts are crashing silently. Your LLM bill went 5x without explanation. The board asked twice \"what's our AI strategy?\" — you don't have one.\n\n**With Skrun:** wrap existing scripts gradually as skills (or `AGENTS.md`, or your own format). No big-bang rewrite. One dashboard for all AI calls — cost per feature, failure modes, ownership. Your team standardizes on one declarative format. New engineers read a manifest in 30 seconds instead of reverse-engineering 800 lines.\n\n### 🎯 For freelance \u0026 agencies — stop bricolating per-client AI deliveries\n\nEach new client means 2-3 weeks of build. You glue Express + Anthropic SDK + Vercel for each delivery. The plumbing is identical 70% of the time. Worse: when a client wants to switch from Anthropic to OpenAI 3 months later, you're back rewriting auth + retry + fallback logic.\n\n**With Skrun:** same skill format, deploy per client. Model swap is a YAML edit. Your client gets a stable `POST /run` endpoint **they own** — they can host on their infra, swap models, take over anytime. You ship the skill, not a server you maintain.\n\n---\n\n## 💬 What would *you* deploy?\n\nWhat skill would you turn into an API tomorrow? What's missing in your current agent setup?\n\n**[Tell us in Discussions](https://github.com/skrun-dev/skrun/discussions)** — we read every post, and it shapes the roadmap.\n\n---\n\n## 🚀 Quick Start\n\n```bash\nnpm install -g @skrun-dev/cli\n\nskrun init --from-skill ./my-skill    # or: skrun init my-agent\nskrun deploy -m \"initial release\"     # build + push + get your API URL\n```\n\nThat's it. Your agent is now callable via `POST /run`:\n\n```bash\ncurl -X POST http://localhost:4000/api/agents/dev/my-skill/run \\\n  -H \"Authorization: Bearer dev-token\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\"input\": {\"query\": \"analyze this\"}}'\n```\n\n\u003e `dev-token` is for local development. In production, authenticate via [GitHub OAuth or API keys](docs/api.md#authentication) — your GitHub username becomes your namespace.\n\n→ **[10-minute tutorial](docs/getting-started.md)** · **[Concepts](docs/concepts.md)** · **[API reference](docs/api.md)**\n\n---\n\n## 📊 Dashboard\n\n\u003cp align=\"center\"\u003e\n  \u003cimg src=\"docs/assets/dashboard/home.png\" alt=\"Skrun Operator Dashboard — Home\" width=\"900\"\u003e\n\u003c/p\u003e\n\nEvery Skrun registry ships with a full operator dashboard at `/dashboard`. No separate install, no extra env var.\n\n- **Home** — workspace stats, 24h/7d toggles, recent activity, top agents.\n- **Agents** — sortable list with run counts, token usage, verification status.\n- **Agent detail** — per-agent metrics, versions with notes, metadata, try-it curl.\n- **Runs** — every execution across all agents, filterable by agent/ID/status/model.\n- **Run detail** — full I/O, tokens, cost, model, event timeline (tool calls, LLM calls).\n- **Playground** — call any agent interactively, watch SSE events live, save outputs.\n- **Settings** — profile + API keys (`sk_live_*`) with one-shot reveal and revocation.\n\n→ **[Screenshot tour of all 7 pages](docs/getting-started.md#6-explore-the-dashboard)**\n\n---\n\n## 📦 SDK\n\n```bash\nnpm install @skrun-dev/sdk\n```\n\n```typescript\nimport { SkrunClient } from \"@skrun-dev/sdk\";\n\nconst client = new SkrunClient({\n  baseUrl: \"http://localhost:4000\",\n  token: \"dev-token\",\n});\n\n// Sync — get the result\nconst result = await client.run(\"dev/code-review\", { code: \"const x = 1;\" });\nconsole.log(result.output);\n\n// Stream — real-time events\nfor await (const event of client.stream(\"dev/code-review\", { code: \"...\" })) {\n  console.log(event.type); // run_start, tool_call, llm_complete, run_complete\n}\n\n// Async — fire and forget with webhook callback\nconst { run_id } = await client.runAsync(\"dev/agent\", input, \"https://your-app.com/hook\");\n\n// Pin a specific agent version — reproducible, no silent drift\nconst pinned = await client.run(\"dev/code-review\", input, { version: \"1.2.0\" });\nconsole.log(pinned.agent_version); // \"1.2.0\" — always echoed back\n\n// Push with a note (like a git commit message)\nawait client.push(\"dev/code-review\", bundle, \"1.3.0\", { message: \"Added retry logic\" });\n```\n\n9 methods: `run`, `stream`, `runAsync`, `push`, `pull`, `list`, `getAgent`, `getVersions`, `verify`. **Zero runtime dependencies**, Node.js 20+.\n\n---\n\n## ✨ Features\n\n| Feature | Description |\n|---------|-------------|\n| 🤖 **Multi-model** | 5 built-in providers + any OpenAI-compatible endpoint (DeepSeek, Kimi, Qwen, Ollama, vLLM…) — with automatic fallback |\n| 🔧 **Tool calling** | Local scripts (`scripts/`) + MCP servers (`npx`) — same ecosystem as Claude Desktop |\n| 💾 **Stateful** | Agents remember across runs via key-value state |\n| 📡 **Streaming** | SSE real-time events (`run_start` → `tool_call` → `run_complete`) + async webhooks |\n| 📦 **Typed SDK** | `npm install @skrun-dev/sdk` — `run()`, `stream()`, `runAsync()` + 6 more methods |\n| 📊 **Operator Dashboard** | Web UI at `/dashboard` — agents, runs, stats, settings, integrated playground with SSE streaming |\n| 📖 **Interactive API docs** | OpenAPI 3.1 schema + Scalar explorer at `GET /docs` |\n| 🔐 **Production auth** | GitHub OAuth login + API keys (`sk_live_*`) + multi-tenant namespaces |\n| 🗄️ **Persistent storage** | Pluggable database — SQLite for local dev (zero-config, file-based), Supabase PostgreSQL for production |\n| 🔑 **Caller keys** | Users bring their own LLM keys via `X-LLM-API-Key` — zero cost for operators |\n| ✅ **Agent verification** | Verified flag controls script execution — safe for third-party agents |\n| 📌 **Version pinning + notes** | Pin a specific agent version per call (`version: \"1.2.0\"`) or attach a note at push (`-m \"...\"`) — reproducible integrations, visible changelog |\n| 🌍 **Environment separation** | Agent behavior (model, tools) separated from runtime environment (networking, timeout, sandbox). Per-run overrides via POST /run body |\n| 📁 **Files API** | Agents produce files (PDF, images, data) — callers download via `GET /api/runs/:run_id/files/:filename` |\n| 📊 **Structured logs** | JSON to stdout via pino — pipe to Axiom, Datadog, ELK. `LOG_LEVEL` env var controls verbosity |\n\n---\n\n## 🧪 Demo agents\n\nEight runnable demos under [`agents/`](./agents/) — each produces a real, downloadable artifact (PDF, XLSX, PPTX, ZIP, CSV, MD). All use Google Gemini Flash by default (free tier). Change the `model` section in `agent.yaml` to use any [supported provider](#-features).\n\n### For OSS developers\n\n| Agent | What it does | Artifact |\n|-------|--------------|----------|\n| 📝 [changelog-generator](agents/changelog-generator/) | Reads your local `git log` between two tags, groups commits by Conventional Commit type, drafts release notes | `CHANGELOG.md` + `release-notes.md` |\n| 📐 [adr-writer](agents/adr-writer/) | Captures an architectural decision (context / options / decision / consequences) as a numbered Markdown ADR — auto-numbers from your existing `adrs/` folder | `NNNN-\u003cslug\u003e.md` |\n\n### For internal-platform / engineering teams\n\n| Agent | What it does | Artifact |\n|-------|--------------|----------|\n| 🎯 [meeting-transcript-to-action-items](agents/meeting-transcript-to-action-items/) | Extracts decisions + action items from a Zoom/Teams transcript. **Stateful** — auto-resolves prior actions when next meeting mentions them as done | `actions.csv` + `recap.md` |\n| 🛡️ [semgrep-rule-creator](agents/semgrep-rule-creator/) | Turns a CVE description + bad-code snippet into a complete Semgrep rule bundle (rule + tests + rationale) | `rule.yml` + `tests.md` + `README.md` |\n\n### For freelancers / analysts / biz operators\n\n| Agent | What it does | Artifact |\n|-------|--------------|----------|\n| 📊 [csv-to-executive-report](agents/csv-to-executive-report/) | CSV → analyzed multi-page PDF with charts + narrative + summary table | `report.pdf` |\n| 🎤 [slide-deck-generator](agents/slide-deck-generator/) | Markdown outline → polished `.pptx` with brand color, title/content/closing layouts, speaker notes | `deck.pptx` |\n| 🧾 [receipts-to-expenses](agents/receipts-to-expenses/) | Folder of receipt text files + optional bank statement → categorized expense workbook + summary PDF | `expenses.xlsx` + `monthly.pdf` |\n\n### Universal\n\n| Agent | What it does | Artifact |\n|-------|--------------|----------|\n| 🧠 [knowledge-base-from-vault](agents/knowledge-base-from-vault/) | Folder of Markdown notes (Obsidian/Notion/raw) → navigable static HTML site. **Stateful** — concept index densifies across runs | `kb.zip` (HTML+CSS) |\n\n\u003cdetails\u003e\n\u003csummary\u003e\u003cb\u003eEarlier minimal demos\u003c/b\u003e\u003c/summary\u003e\n\nShorter examples that each illustrate one primitive (model fallback, MCP, state, scripts) without producing artifacts:\n\n[code-review](agents/code-review/) · [pdf-processing](agents/pdf-processing/) · [seo-audit](agents/seo-audit/) · [data-analyst](agents/data-analyst/) · [email-drafter](agents/email-drafter/) · [web-scraper](agents/web-scraper/)\n\n\u003c/details\u003e\n\n\u003cdetails\u003e\n\u003csummary\u003e\u003cb\u003eTry one locally\u003c/b\u003e\u003c/summary\u003e\n\n```bash\n# 1. Start the registry (uses SQLite — data persists across restarts)\ncp .env.example .env          # add your GOOGLE_API_KEY\npnpm dev:registry              # keep this terminal open\n\n# 2. In another terminal — pick any agent (changelog-generator is the lightest)\nskrun login --token dev-token\ncd agents/changelog-generator\nskrun build \u0026\u0026 skrun push -m \"v1 — first push\"\n\n# 3. Call it (uses the bundled fixture — no real git repo needed)\ncurl -X POST http://localhost:4000/api/agents/dev/changelog-generator/run \\\n  -H \"Authorization: Bearer dev-token\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\"input\": {\"repo_path\": \"./fixtures/sample-repo.git-log.txt\", \"project_name\": \"demo\"}}'\n\n# 4. Download the artifacts via the Files API (run_id from response)\ncurl http://localhost:4000/api/runs/\u003crun_id\u003e/files/CHANGELOG.md \\\n  -H \"Authorization: Bearer dev-token\" -o CHANGELOG.md\n```\n\n\u003e **Windows (PowerShell):** use `curl.exe` instead of `curl`, and pass `-d \"@input.json\"` for the body.\n\u003e **Python demos** (slide-deck-generator, csv-to-executive-report, receipts-to-expenses): run `pip install -r requirements.txt` once in the agent's directory before pushing.\n\n\u003c/details\u003e\n\n---\n\n## 💻 CLI\n\n| Command | Description |\n|---------|-------------|\n| `skrun init [dir]` | Create a new agent |\n| `skrun init --from-skill \u003cpath\u003e` | Import existing skill |\n| `skrun dev` | Local server with POST /run (mock, free) |\n| `skrun test` | Run agent tests (real LLM) |\n| `skrun build` | Package `.agent` bundle |\n| `skrun push -m \"note\"` | Push with a version note |\n| `skrun deploy -m \"note\"` | Build + push + live URL |\n| `skrun pull \u003cagent\u003e` | Download agent bundle |\n| `skrun login` / `logout` | Authentication (OAuth or token) |\n| `skrun logs \u003cagent\u003e` | Execution logs (planned) |\n\n→ **[Full CLI reference](docs/cli.md)**\n\n---\n\n## 🌐 Self-hosting\n\nSkrun is MIT — deploy anywhere.\n\n- **SQLite (default)** — zero config, file-based, survives restarts. Good for local dev and single-node.\n- **Supabase** — production-grade PostgreSQL. Set `DATABASE_URL` + `SUPABASE_KEY`.\n- **Any cloud** — Fly.io, AWS, GCP, Hetzner, bare metal. Caddy or nginx in front.\n- **GitHub OAuth** — users sign in with GitHub, their username becomes their namespace.\n\n→ **[Self-hosting guide](docs/self-hosting.md)** — step-by-step with env vars, reverse proxy, migrations.\n\n---\n\n## 📚 Documentation\n\n- 📖 **[Getting Started](docs/getting-started.md)** — 10-minute tutorial with dashboard screenshots\n- 🧠 **[Concepts](docs/concepts.md)** — vocabulary reference (agent, skill, run, namespace…)\n- 🌐 **[Self-hosting](docs/self-hosting.md)** — deploy on your own infrastructure\n- 🔧 [agent.yaml](docs/agent-yaml.md) · [CLI](docs/cli.md) · [API](docs/api.md) — full references\n- 🎮 [Interactive API explorer](http://localhost:4000/docs) — live Scalar UI (start the registry first)\n- 📋 [OpenAPI schema](http://localhost:4000/openapi.json) — import into Postman / Insomnia\n- 📝 [Changelog](CHANGELOG.md) · 🤝 [Contributing](CONTRIBUTING.md)\n\n---\n\n## 👥 Community\n\n- 💬 [GitHub Discussions](https://github.com/skrun-dev/skrun/discussions) — ask questions, share agents\n- 🐛 [Issues](https://github.com/skrun-dev/skrun/issues) — report bugs, request features\n- ⭐ [Star the repo](https://github.com/skrun-dev/skrun) if you like the project!\n\n---\n\n## 🤝 Contributing\n\n```bash\ngit clone https://github.com/skrun-dev/skrun.git\ncd skrun\npnpm install \u0026\u0026 pnpm build \u0026\u0026 pnpm test\n```\n\nSee [CONTRIBUTING.md](CONTRIBUTING.md) for conventions and setup.\n\n---\n\n## 📜 License\n\n[MIT](LICENSE) — free to use, modify, self-host, and build on top.\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fskrun-dev%2Fskrun","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fskrun-dev%2Fskrun","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fskrun-dev%2Fskrun/lists"}