{"id":51440522,"url":"https://github.com/yujiachen-y/agent-bundle","last_synced_at":"2026-07-05T11:01:28.189Z","repository":{"id":343502234,"uuid":"1159834148","full_name":"yujiachen-y/agent-bundle","owner":"yujiachen-y","description":"Bundle agent skills into a single deployable agent — sandboxed execution, token-scoped data access, type-safe build output.","archived":false,"fork":false,"pushed_at":"2026-06-21T17:42:01.000Z","size":6652,"stargazers_count":10,"open_issues_count":1,"forks_count":2,"subscribers_count":1,"default_branch":"main","last_synced_at":"2026-06-21T19:17:26.055Z","etag":null,"topics":["ai-agent","anthropic","cli","code-generation","developer-tools","devops","e2b","kubernetes","llm","mcp","openai","sandbox","typescript"],"latest_commit_sha":null,"homepage":"https://agent-bundle.com/","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/yujiachen-y.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":"AGENTS.md","dco":null,"cla":null}},"created_at":"2026-02-17T08:08:44.000Z","updated_at":"2026-06-21T17:42:01.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/yujiachen-y/agent-bundle","commit_stats":null,"previous_names":["yujiachen-y/agent-bundle"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/yujiachen-y/agent-bundle","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/yujiachen-y%2Fagent-bundle","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/yujiachen-y%2Fagent-bundle/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/yujiachen-y%2Fagent-bundle/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/yujiachen-y%2Fagent-bundle/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/yujiachen-y","download_url":"https://codeload.github.com/yujiachen-y/agent-bundle/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/yujiachen-y%2Fagent-bundle/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":35151638,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-07-05T02:00:06.290Z","response_time":100,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"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":["ai-agent","anthropic","cli","code-generation","developer-tools","devops","e2b","kubernetes","llm","mcp","openai","sandbox","typescript"],"created_at":"2026-07-05T11:01:27.162Z","updated_at":"2026-07-05T11:01:28.184Z","avatar_url":"https://github.com/yujiachen-y.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# agent-bundle\n\n[![npm](https://img.shields.io/npm/v/agent-bundle)](https://www.npmjs.com/package/agent-bundle)\n[![npm downloads](https://img.shields.io/npm/dm/agent-bundle)](https://www.npmjs.com/package/agent-bundle)\n[![CI](https://github.com/yujiachen-y/agent-bundle/actions/workflows/ci.yml/badge.svg)](https://github.com/yujiachen-y/agent-bundle/actions/workflows/ci.yml)\n[![codecov](https://codecov.io/gh/yujiachen-y/agent-bundle/graph/badge.svg?token=NW998X95RW)](https://codecov.io/gh/yujiachen-y/agent-bundle)\n[![License: MIT](https://img.shields.io/badge/License-MIT-blue.svg)](./LICENSE)\n[![Node](https://img.shields.io/badge/Node-%3E%3D20-green.svg)](https://nodejs.org/)\n[![Website](https://img.shields.io/badge/Website-agent--bundle.com-8b5cf6)](https://agent-bundle.com)\n\n\u003e Define agent skills in YAML. Generate a production-ready agent service.\n\n**Anthropic · OpenAI · Gemini · Ollama · OpenRouter** — **E2B · Kubernetes sandboxes** — **AWS ECS Fargate deploy** _(beta)_\n\n---\n\n## The Pipeline\n\n**1. Define** — one YAML file describes your entire agent:\n\n```yaml\n# agent-bundle.yaml\nname: personalized-recommend\n\nmodel:\n  provider: openrouter\n  model: qwen/qwen3.5-397b-a17b\n\nprompt:\n  system: |\n    You are a personalization assistant.\n    Use the filesystem tools to read/write user profile memory.\n    Recommend relevant products with concise reasons.\n\nsandbox:\n  provider: e2b\n  e2b:\n    template: base\n    build:\n      dockerfile: ./Dockerfile\n\nmcp:\n  servers:\n    - name: fs\n      transport: stdio\n      command: npx\n      args: [\"@modelcontextprotocol/server-filesystem\", \"/data\", \"/memory\"]\n\nskills:\n  - path: ./skills/update-memory\n  - path: ./skills/recommend\n```\n\n**2. Generate** — Prisma-style typed codegen:\n\n```bash\nnpx agent-bundle generate\n```\n\n```\nnode_modules/@agent-bundle/personalized-recommend/\n├── index.ts      ← typed agent factory\n├── types.ts      ← type definitions\n├── bundle.json   ← resolved config snapshot\n└── package.json  ← scoped package metadata\n```\n\n**3. Use** — import the generated package and embed it in your own service:\n\n```typescript\n// server.ts — your own Hono / Express / Fastify app\nimport { PersonalizedRecommend } from \"@agent-bundle/personalized-recommend\";\n\nconst agent = await PersonalizedRecommend.init();\n\napp.post(\"/api/events\", async (c) =\u003e {\n  const { userId, event } = await c.req.json();\n  const result = await agent.respond([\n    { role: \"user\", content: `Update profile for ${userId}: ${event}` },\n  ]);\n  return c.json({ userId, response: result.output });\n});\n\napp.get(\"/api/recommendations/:userId\", async (c) =\u003e {\n  const result = await agent.respond([\n    { role: \"user\", content: `Recommend products for ${c.req.param(\"userId\")}` },\n  ]);\n  return c.json(result.output);\n});\n```\n\nNo special runtime, no sidecar — it's a regular TypeScript import. Deploy it however you deploy your service.\n\n---\n\n## Why\n\nAgent skills work great inside local coding agents. Deploying them to production means rewriting everything.\n\n|  | Without agent-bundle | With agent-bundle |\n|--|---------------------|-------------------|\n| **Define** | Scattered scripts and prompts | Single YAML config — version it, diff it, review it |\n| **Generate** | Hand-wire LLM calls, no type safety | `npx agent-bundle generate` — typed factory you can import like any package |\n| **Ship** | Rewrite into a service from scratch | Import the generated package into your own service — zero rewrite |\n| **Behave** | Dev and prod diverge silently | Same sandbox runtime in dev, serve, and build |\n\n---\n\n## Quick Start\n\n### Try an existing demo\n\n```bash\ngit clone https://github.com/yujiachen-y/agent-bundle.git\ncd agent-bundle/demo/personalized-recommend\nnpm run setup\n```\n\n### Start your own project\n\n```bash\nnpm install agent-bundle          # add to your project\nnpx agent-bundle generate         # generate typed client from agent-bundle.yaml\n```\n\nThen import and use in your code:\n\n```typescript\nimport { PersonalizedRecommend } from \"@agent-bundle/personalized-recommend\";\n```\n\nSee [Configuration Guide](./docs/configuration.md) for all YAML options and [Agent Skills](https://github.com/agent-skills/spec) for the skill format.\n\n---\n\n## Features\n\n### Type-safe codegen\n\nPrisma-style `generate` command. Your YAML config becomes a typed TypeScript package in `node_modules/@agent-bundle/\u003cname\u003e` — import it like any other dependency. When you use prompt variables, their names are checked at compile time.\n\n### Dev-prod parity\n\n`dev`, `serve`, and `build` share the same sandbox abstraction. What passes locally ships as-is. No environment-specific surprises.\n\n### No vendor lock-in\n\nSwap model providers or sandbox backends with one line of YAML. Run locally with Ollama — no API key needed:\n\n```yaml\nmodel:\n  provider: ollama\n  model: llama3\n```\n\nOr use any cloud provider:\n\n```yaml\nmodel:\n  provider: anthropic            # or: openai, gemini, openrouter\n  model: claude-sonnet-4-20250514\n```\n\n### Plugins — turn any plugin into an agent\n\nPull skills and commands from a plugin marketplace and compose them into a single agent:\n\n```yaml\nskills:\n  - path: ./skills/report-formatter\n\ncommands:\n  - path: ./commands/quick-analysis\n\nplugins:\n  - marketplace: anthropics/knowledge-work-plugins\n    name: finance\n    skills:\n      - variance-analysis\n      - close-management\n```\n\nLocal skills, local commands, and marketplace plugins — all merged into one typed bundle. See the [`financial-plugin`](./demo/financial-plugin) demo.\n\n### Live sandbox view\n\n`npx agent-bundle dev` opens a WebUI at localhost:3000 — watch the agent's file tree, preview generated files, inspect the full LLM transcript, and monitor token usage and tool call metrics. No more black boxes.\n\n| Workspace | File Preview | Transcript | Metrics |\n|:-:|:-:|:-:|:-:|\n| ![Workspace](.github/webui-workspace.png) | ![Preview](.github/webui-preview.png) | ![Transcript](.github/webui-transcript.png) | ![Metrics](.github/webui-metrics.png) |\n\nOpenTelemetry tracing and metrics are also supported for production deployments.\n\n### Session recovery\n\nAgent crashes mid-run? Resume from its last conversation state.\n\n### Token-scoped MCP\n\nConnect to internal services via MCP servers. Even under prompt injection, the agent cannot exceed what the MCP server permits for that token.\n\n---\n\n## Deploy\n\n### AWS ECS Fargate _(beta)_\n\n```bash\nnpx agent-bundle deploy --target aws --secret API_KEY\n```\n\nPushes to ECR and deploys to ECS Fargate — no Terraform or CloudFormation required. See [Deploy docs](./docs/configuration.md#deploy-beta) for details.\n\n---\n\n## Architecture\n\n![Architecture](.github/architecture.png)\n\nThe agent orchestrator routes between the LLM provider, sandbox, and MCP servers. All three interfaces share the same abstraction across `dev`, `serve`, and `build` modes.\n\n---\n\n## Demos\n\n| Demo | What It Shows |\n|---|---|\n| [`code-formatter/e2b`](./demo/code-formatter/e2b) | Config-only agent with E2B sandbox |\n| [`code-formatter/k8s`](./demo/code-formatter/k8s) | Config-only agent with Kubernetes sandbox |\n| [`financial-plugin`](./demo/financial-plugin) | Plugins + custom commands |\n| [`data-analyst-e2b`](./demo/data-analyst-e2b) | WebUI dev mode with data analysis |\n| [`pdf-to-deck`](./demo/pdf-to-deck) | PDF to presentation deck (skills.sh skills) |\n| [`personalized-recommend`](./demo/personalized-recommend) | `generate` + custom server + MCP integration |\n| [`observability-demo`](./demo/observability-demo) | OpenTelemetry tracing and metrics |\n\n---\n\nIf agent-bundle is useful to you, consider giving it a star. It helps others discover the project.\n\n---\n\n## Roadmap\n\n- [ ] `deploy --target aws` GA — currently beta, stability not guaranteed\n- [ ] GCP Cloud Run deploy target\n- [ ] Pluggable agent loop engines — Claude Code, Codex via process bridge\n- [ ] Fine-grained Docker sandbox isolation\n\n---\n\n## Contributing\n\nContributions welcome! See [CONTRIBUTING.md](./CONTRIBUTING.md) for guidelines.\n\n---\n\n## License\n\n[MIT](./LICENSE)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fyujiachen-y%2Fagent-bundle","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fyujiachen-y%2Fagent-bundle","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fyujiachen-y%2Fagent-bundle/lists"}