{"slug": "how-i-built-a-kiro-crew-app-in-5-minutes-full-tutorial-with-code", "title": "How I Built a Kiro Crew App in 5 Minutes - Full Tutorial With Code", "summary": "Kiro Crew, an AI agent platform, now includes an App Store that lets developers build and publish full apps with agents, skills, cron jobs, and UI pages. A developer, sarvar_04, created a Daily Standup Bot in five minutes using five files, demonstrating the platform's ease of use. The app reads git commits and generates standup notes automatically.", "body_md": "Parts 1-4 showed you what Kiro Crew can do. Investigate incidents. Automate weekly toil. Block dangerous commands. All using the built-in agent.\n\nBut here's what nobody's talking about: Kiro Crew has an App Store. And you can build your own apps for it. In five minutes.\n\nNot plugins. Not scripts. Full apps with their own agents, skills, cron jobs, and dashboard pages. Package them. Publish them. Other users install with one click.\n\nI built one. A Daily Standup Bot. It reads my git commits every morning and generates standup notes so I never have to write \"worked on X\" again. Let me show you how.\n\nAn app is a package that contributes any combination of:\n\n| Component | What it does |\n|---|---|\nAgents |\nCustom AI agent with its own model, prompt, and tool access |\nSkills |\nOn-demand knowledge files that teach the agent specific capabilities |\nMCP servers |\nNew tools the LLM can call |\nCron jobs |\nScheduled tasks the app owns |\nUI pages |\nCustom pages in the dashboard sidebar |\nBackend processes |\nHTTP servers reverse-proxied through the gateway |\n\nAn app that only ships a skill is one markdown file. An app that ships everything is a full project. You decide the scope.\n\nThe key difference from \"just adding a skill\": apps are installable, versioned, publishable, and isolated. Crew manages their lifecycle. Users install from the App Store with one click.\n\nA **Daily Standup Bot** that:\n\nFive files. Five minutes. A real app you'd actually use.\n\n```\nstandup-bot/\n├── app.json                    ← manifest (identity + resources)\n├── agents/\n│   └── standup-agent.json      ← agent definition\n├── skills/\n│   └── standup-format/\n│       └── SKILL.md            ← formatting rules\n└── ui/\n    └── src/App.tsx             ← dashboard page\n```\n\nEvery app needs one file: `app.json`\n\n. This is the single source of truth.\n\n```\n{\n  \"name\": \"standup-bot\",\n  \"version\": \"1.0.0\",\n  \"displayName\": \"Daily Standup Bot\",\n  \"description\": \"Auto-generates standup notes from git commits.\",\n  \"author\": \"sarvar_04\",\n  \"agents\": [\"agents/standup-agent.json\"],\n  \"skills\": [\"skills/standup-format\"],\n  \"ui\": {\n    \"entry\": \"dist/index.mjs\",\n    \"pages\": [{\n      \"route\": \"/apps/standup-bot\",\n      \"label\": \"Standups\",\n      \"icon\": \"ClipboardList\"\n    }]\n  },\n  \"crons\": [{\n    \"name\": \"morning-standup\",\n    \"cron_expr\": \"0 9 * * 1-5\",\n    \"message\": \"Generate today's standup summary from yesterday's git activity\",\n    \"agent\": \"standup-agent\"\n  }]\n}\n```\n\nThat's agents, skills, a dashboard page, and a cron job. All declared in one file. Crew reads this and wires everything up.\n\n`agents/standup-agent.json`\n\n:\n\n```\n{\n  \"name\": \"standup-agent\",\n  \"model\": \"auto\",\n  \"description\": \"Generates standup summaries from git activity\",\n  \"prompt\": \"You are a standup summary assistant. Analyze git commits from the last 24 hours and generate concise standup notes. Format: What I Did, What's Blocked, What's Next.\",\n  \"tools\": [\"@kirocrew-core\"]\n}\n```\n\nEight lines. The `@kirocrew-core`\n\ntool reference gives it access to spawn processes, read files, and interact with the system. The `model: \"auto\"`\n\nlets Crew pick the best available model.\n\n`skills/standup-format/SKILL.md`\n\n:\n\n```\n---\nname: standup-format\ndescription: How to format daily standup updates\ntriggers: [standup, daily, summary, morning]\nalways: false\n---\n\n# Standup Format\n\nWhen generating standup notes:\n\n1. **What I did** - List completed work from git commits (group by feature/fix)\n2. **What's blocked** - Identify stale PRs, failing CI, unresolved issues\n3. **What's next** - Infer from branch names and open issues\n\nRules:\n- One line per bullet\n- Past tense for \"did\", present for \"blocked\", future for \"next\"\n- Group related commits into one bullet\n- Skip merge commits and dependency bumps\n- Flag anything unmerged for >24 hours\n```\n\nSkills are markdown. They load on-demand when trigger words appear in the conversation. No code. No compilation. Just knowledge the agent uses when relevant.\n\n`ui/src/App.tsx`\n\n:\n\n``` js\nimport { useAppApi, useAppEvents } from '@kirocrew/app-sdk'\nimport { Card, CardTitle, PageHeader, StatCard, Badge } from '@kirocrew/app-sdk/ui'\nimport { useState, useEffect } from 'react'\n\nexport default function StandupDashboard() {\n  const api = useAppApi()\n  const [standups, setStandups] = useState([])\n\n  useEffect(() => {\n    api.get('/api/apps/standup-bot/history').then(setStandups)\n  }, [])\n\n  return (\n    <>\n      <PageHeader title=\"Daily Standups\" subtitle=\"Auto-generated from git activity\" />\n      <div className=\"px-6 pb-8\">\n        <div className=\"grid gap-3.5 grid-cols-4 mb-6\">\n          <StatCard label=\"Today\" value=\"Pending\" accent />\n          <StatCard label=\"This Week\" value={`${standups.length} standups`} />\n          <StatCard label=\"Total Commits\" value=\"0\" />\n          <StatCard label=\"Next Run\" value=\"Mon 9:00 AM\" />\n        </div>\n      </div>\n    </>\n  )\n}\n```\n\nYou don't `npm install @kirocrew/app-sdk`\n\n. The dashboard provides it at runtime. Your app stays tiny. Build with Vite, mark Crew's SDK as external, output a single `.mjs`\n\nfile.\n\nAlready declared in `app.json`\n\n:\n\n```\n\"crons\": [{\n  \"name\": \"morning-standup\",\n  \"cron_expr\": \"0 9 * * 1-5\",\n  \"message\": \"Generate today's standup summary from yesterday's git activity\",\n  \"agent\": \"standup-agent\"\n}]\n```\n\nCrew registers the cron on enable. Deregisters on disable. Every weekday at 9 AM, it spawns a session, runs the message through `standup-agent`\n\n, and stores the result. No daemon. No systemd timer. Just a line in your manifest.\n\n```\n# Get your auth token\nTOKEN=$(kirocrew token | grep -oP 'token=\\K[^&]+')\n\n# Install (one command - point to your app directory)\ncurl -s -X POST \"http://localhost:5476/api/apps/install?token=$TOKEN\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\"source\": \"./standup-bot\"}' | python3 -m json.tool\n\n# Enable - agents, skills, crons all activate\ncurl -s -X POST \"http://localhost:5476/api/apps/standup-bot/enable?token=$TOKEN\" \\\n  | python3 -m json.tool\n```\n\nResponse:\n\n```\n{\n    \"ok\": true,\n    \"name\": \"standup-bot\",\n    \"message\": \"enabled standup-bot\",\n    \"registration\": {\n        \"agents\": [\"standup-bot/standup-agent\"],\n        \"skills\": [\"standup-bot/standup-format\"],\n        \"crons\": [\"standup-bot/morning-standup\"],\n        \"mcp_servers\": [],\n        \"errors\": []\n    },\n    \"hooks\": {\n        \"crons_registered\": [\"standup-bot/morning-standup\"]\n    }\n}\n```\n\nAgent registered. Skill loaded. Cron scheduled. Dashboard page live.\n\nRefresh the dashboard. \"Standups\" is now in your sidebar. That's it.\n\nAfter installation, \"Standups\" appears in the sidebar. The dashboard shows stat cards and an empty state waiting for the first standup.\n\nTrigger it manually in a chat session:\n\n```\nUse the standup-agent to generate today's standup from ~/projects/payment-api.\nRun git log, analyze every commit, group by feature area.\n```\n\nThe agent runs `git log --since=\"24 hours ago\" --oneline --no-merges`\n\n, analyzes each commit, and produces:\n\n**What I Did:**\n\nPayment Processing:\n\nAPI & Docs:\n\nInfrastructure:\n\n**What's Blocked:**\n\n**What's Next:**\n\n11 commits analyzed. 9 seconds. Navigate to the Standups page - it's already there.\n\nThe App Store is a curated registry. Publishing means opening a PR:\n\n```\n// In app-registry.json:\n{\n  \"name\": \"standup-bot\",\n  \"gitUrl\": \"https://github.com/simplynadaf/kiro-crew-standup-bot\",\n  \"branch\": \"main\"\n}\n```\n\nOnce merged, your app shows up in Explore → Library for all Crew users. Search \"standup\" and there it is:\n\n```\nDaily Standup Bot\nv1.0.0 · Enabled · Registry\n\nAuto-generates standup notes from git commits. Runs daily at 9 AM Mon-Fri.\n\nsarvar_04\n1 agent · 1 skill · 1 cron · 1 page\n\n[Open]  [Disable]  [Sync]  [Uninstall]\n```\n\nYour app sits alongside the built-in ones - Code Review Sage, Research Lab, Task Runner. First-class citizen. Teams can also host private registries for internal apps that shouldn't be public.\n\nThe standup bot took 5 files and 5 minutes. Here's what's possible with the same pattern:\n\n| App idea | Components |\n|---|---|\nPR Review Bot |\nAgent + skill (code review rules) + cron (check PRs hourly) |\nIncident Postmortem Generator |\nAgent + skill (postmortem template) + UI (history page) |\nCost Anomaly Alerter |\nAgent + cron (daily AWS cost check) + Slack notification |\nOnboarding Buddy |\nAgent + skill (team knowledge) + UI (progress tracker) |\nSprint Health Monitor |\nAgent + cron (daily Jira check) + UI (burndown chart) |\n\nAny workflow that's \"check something + format it + deliver it on schedule\" is a Crew app waiting to happen.\n\nKiro Crew is open source (Apache 2.0). The standup-bot code is in this article.\n\n```\n# Install Crew\ncurl -fsSL https://download.crew.kiro.dev/cli.sh | sh\nkirocrew gateway\n\n# Enable third-party apps\n# In ~/.kiro/crew/config.json set: \"apps_allow_third_party\": true\n\n# Create the app\nmkdir -p standup-bot/agents standup-bot/skills/standup-format standup-bot/ui/src\n# Create the 5 files shown above (app.json, agent, skill, UI, vite config)\n\n# Build UI\ncd standup-bot/ui && npm install && npm run build && cd ../..\n\n# Install + enable\nTOKEN=$(kirocrew token | grep -oP 'token=\\K[^&]+')\ncurl -s -X POST \"http://localhost:5476/api/apps/install?token=$TOKEN\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\"source\": \"./standup-bot\"}'\ncurl -s -X POST \"http://localhost:5476/api/apps/standup-bot/enable?token=$TOKEN\"\n\n# Open dashboard - \"Standups\" is in the sidebar\nkirocrew open\n```\n\nThe full app code and docs: [Build your first app](https://kiro.dev/docs/crew/apps/build-first-app/)\n\n**5 files. 5 minutes. Never write \"worked on X\" again.**\n\nAn AI agent that reads your git commits every morning and generates formatted standup notes - installed with one command on [Kiro Crew](https://github.com/kirodotdev/KiroCrew).\n\n[📺 Watch the Demo](https://youtu.be/-TkMTNAKcAY) · [🚀 Quick Start](https://github.com/simplynadaf/kiro-crew-standup-bot#-quick-start) · [📦 App Structure](https://github.com/simplynadaf/kiro-crew-standup-bot#-app-structure) · [📝 Article](https://dev.to/sarvar_04/i-built-a-custom-kiro-crew-app-in-5-minutes-the-app-kit-nobodys-talking-about)\n\n| Component | What It Does |\n|---|---|\n🤖 Agent\n|\nReads git commits from the last 24 hours, groups by feature area |\n📚 Skill\n|\nTeaches the agent the standup format (What I Did / Blocked / Next) |\n⏰ Cron\n|\nRuns every weekday at 9 AM automatically |\n📊 Dashboard\n|\nShows standup history, stats, and today's summary in the sidebar |\n\n```\n# Prerequisites: Kiro Crew running\ncurl -fsSL https://download.crew.kiro.dev/cli.sh | sh\nkirocrew gateway\n```\n\n…\n**A persistent workspace for development work that self-improves and continues beyond one session.**\n\nKiro Crew is an open source development workspace that runs locally or remotely on your hardware. It is persistent, self-learning, and self-evolving. Work with it from the desktop app, web dashboard, and CLI, or continue the same work through connection tools like Slack and Discord Your multi-step tasks can run unattended, recurring jobs run on your schedule and heartbeats monitor systems until something needs attention. Kiro Crew Apps tailor that experience to a specific job, combining a purpose-built interface with agents, skills, schedules, integrations, and backend services.\n\n[Quick start](https://github.com/kirodotdev/KiroCrew#quick-start) ·\n[Build from source](https://github.com/kirodotdev/KiroCrew#build-from-source) ·\n[Why Kiro Crew](https://github.com/kirodotdev/KiroCrew#why-kiro-crew) ·\n[Capabilities](https://github.com/kirodotdev/KiroCrew#what-kiro-crew-does) ·\n[How it works](https://github.com/kirodotdev/KiroCrew#how-it-works) ·\n[Security](https://github.com/kirodotdev/KiroCrew#security-and-control) ·\n[Install](https://github.com/kirodotdev/KiroCrew#install-configure-and-operate) ·\n[Telemetry](https://github.com/kirodotdev/KiroCrew#anonymous-usage-telemetry) ·\n[Docs](https://github.com/kirodotdev/KiroCrew#docs-and-contributing)\n\nYou choose how to run Kiro Crew: the desktop app with automatic updates, a one-line install on your machine or a remote…\n\nPart 6 will show the multi-interface story. Start a task on CLI. Continue it on Slack. Check progress on the dashboard. Get notified on your phone. Same agent, same memory, zero context loss.\n\nThe App Kit is what turns Kiro Crew from \"my AI coding assistant\" into \"my team's AI platform.\" The store is empty right now. First movers win.\n\nWhat would you build? A PR reviewer? A docs-from-code generator? An automated changelog? Drop it in the comments. If it's interesting enough, I'll build it in Part 7.\n\n*Follow me for more on AWS architecture, DevOps, and AI Infrastructure:*\n\n[Portfolio](https://sarvarnadaf.com) | [LinkedIn](https://www.linkedin.com/in/sarvar04/) | [Dev.to](https://dev.to/sarvar_04) | [YouTube](https://www.youtube.com/@TechwithSarvar) | [Email](mailto:simplynadaf@gmail.com) | [AWS Builder Center](https://builder.aws.com/community/@sarvar) | [X](https://x.com/SarvarN_04)", "url": "https://wpnews.pro/news/how-i-built-a-kiro-crew-app-in-5-minutes-full-tutorial-with-code", "canonical_source": "https://dev.to/aws-builders/how-i-built-a-kiro-crew-app-in-5-minutes-full-tutorial-with-code-3el0", "published_at": "2026-08-18 12:05:57+00:00", "updated_at": "2026-08-18 12:14:21.221387+00:00", "lang": "en", "topics": ["ai-agents", "developer-tools", "ai-products"], "entities": ["Kiro Crew", "sarvar_04"], "alternates": {"html": "https://wpnews.pro/news/how-i-built-a-kiro-crew-app-in-5-minutes-full-tutorial-with-code", "markdown": "https://wpnews.pro/news/how-i-built-a-kiro-crew-app-in-5-minutes-full-tutorial-with-code.md", "text": "https://wpnews.pro/news/how-i-built-a-kiro-crew-app-in-5-minutes-full-tutorial-with-code.txt", "jsonld": "https://wpnews.pro/news/how-i-built-a-kiro-crew-app-in-5-minutes-full-tutorial-with-code.jsonld"}}