<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Mitko Tschimev</title>
    <description>The latest articles on DEV Community by Mitko Tschimev (@mitkotschimev).</description>
    <link>https://dev.to/mitkotschimev</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F374069%2Fc49d74ec-c219-475b-aaf0-c028ae2e86a6.jpeg</url>
      <title>DEV Community: Mitko Tschimev</title>
      <link>https://dev.to/mitkotschimev</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/mitkotschimev"/>
    <language>en</language>
    <item>
      <title>AI Agents Write Production Code in CI — Full Test Pyramid, Multi-Perspective Review, and Bug Investigation</title>
      <dc:creator>Mitko Tschimev</dc:creator>
      <pubDate>Wed, 08 Apr 2026 15:10:34 +0000</pubDate>
      <link>https://dev.to/mitkotschimev/ai-agents-write-production-code-in-ci-full-test-pyramid-multi-perspective-review-and-bug-44bd</link>
      <guid>https://dev.to/mitkotschimev/ai-agents-write-production-code-in-ci-full-test-pyramid-multi-perspective-review-and-bug-44bd</guid>
      <description>&lt;h1&gt;
  
  
  AI Agents Write Production Code in CI — Full Test Pyramid, Multi-Perspective Review, and Bug Investigation
&lt;/h1&gt;

&lt;p&gt;Your team gets a refined Jira ticket with a full Execution Plan. Who implements it?&lt;/p&gt;

&lt;p&gt;Not you. A CI agent does.&lt;/p&gt;

&lt;p&gt;We built a GitHub Actions workflow that takes a Jira ticket and delivers a ready-to-review pull request. No human writes the code. The agent does. Then it reviews its own work from seven perspectives before pushing.&lt;/p&gt;

&lt;p&gt;This is &lt;strong&gt;Part 3&lt;/strong&gt; of our Jira-agent automation series. Parts 1–2 covered ticket creation and refinement. Part 3 explains how we delegate implementation to Cursor CLI agents in CI.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why CI-Based Agents?
&lt;/h2&gt;

&lt;p&gt;Most agent demos run on a developer's laptop. That breaks when you need:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Secrets&lt;/strong&gt; — Jira, Confluence, API tokens&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Integration tests&lt;/strong&gt; — Postgres, Redis, Kafka, ClickHouse&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;E2E tests&lt;/strong&gt; — Playwright against a running stack&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Environment parity&lt;/strong&gt; — same as production&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;We run on a &lt;strong&gt;self-hosted runner&lt;/strong&gt; with the full ecosystem. The agent doesn't just write unit tests — it validates against production-like dependencies.&lt;/p&gt;

&lt;p&gt;Our CI environment includes:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Services&lt;/strong&gt;: Postgres 15, Redis, ClickHouse 23.3, Kafka (Apache Kafka in KRaft mode)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Tooling&lt;/strong&gt;: Typesense for search, NGINX proxy for internal APIs, Foundry Anvil for blockchain minting E2E tests&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Test pyramid&lt;/strong&gt;: Unit tests (Jest/Go), integration tests (real databases), E2E tests (Playwright)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;When the agent writes code, it can run the full test suite immediately. No "works on my machine" excuses.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Agent Chain
&lt;/h2&gt;

&lt;p&gt;The integration job in our GitHub Actions workflow orchestrates multiple agents:&lt;/p&gt;

&lt;h3&gt;
  
  
  1. Implement Agent
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Model&lt;/strong&gt;: Cursor CLI with &lt;code&gt;composer-2-fast&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Inputs&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;.agent-context.md&lt;/code&gt; — Jira ticket key, summary, description, issue type&lt;/li&gt;
&lt;li&gt;Execution Plan from Confluence (fetched in CI, appended to context)&lt;/li&gt;
&lt;li&gt;PR review comments (if the branch/PR already exists from a re-run)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Deliverables&lt;/strong&gt; (from &lt;code&gt;implement-SKILL.md&lt;/code&gt;):&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Implementation&lt;/strong&gt; — Analyze ticket and Execution Plan, implement changes, run lint and tests&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Tests&lt;/strong&gt; — Unit, integration, or E2E (decide based on feasibility)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Documentation&lt;/strong&gt; — Create or update &lt;code&gt;CLAUDE.md&lt;/code&gt; in each affected directory&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Self-review gate&lt;/strong&gt; — Run &lt;code&gt;git diff&lt;/code&gt;, check against code review checklist. Do NOT commit until review passes.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;PR description&lt;/strong&gt; — Write &lt;code&gt;.pr-description.md&lt;/code&gt; with H1 title (becomes GitHub PR title) and body&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Commit&lt;/strong&gt; — Conventional format: &lt;code&gt;feat(DPA2-1234): description&lt;/code&gt; or &lt;code&gt;fix(DPA2-1234): description&lt;/code&gt; for bugs&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The agent does NOT push. The workflow handles that after internal review.&lt;/p&gt;

&lt;h3&gt;
  
  
  2. Internal Review Agents
&lt;/h3&gt;

&lt;p&gt;After the implement agent commits, the workflow builds &lt;code&gt;pr-context/&lt;/code&gt; (diff.patch, files.json, description.md).&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Perspective classification&lt;/strong&gt;: Based on changed files, the workflow determines which review perspectives are active:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Frontend&lt;/strong&gt; — if &lt;code&gt;apps/*-webapp/*&lt;/code&gt; or &lt;code&gt;libs/ui-*/*&lt;/code&gt; changed&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Backend&lt;/strong&gt; — if &lt;code&gt;apps/*&lt;/code&gt; (non-webapp) or &lt;code&gt;libs/shared-nestjs/*&lt;/code&gt; or &lt;code&gt;libs/go-*/*&lt;/code&gt; changed&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Architecture&lt;/strong&gt; — if backend code changed&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Security&lt;/strong&gt; — if app code changed AND (backend code OR security-relevant files)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Observability&lt;/strong&gt; — if app code changed AND observability-relevant files&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;QA&lt;/strong&gt; — if any app code changed&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;PO&lt;/strong&gt; — if any Jira ticket is linked&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Model&lt;/strong&gt;: &lt;code&gt;claude-4.6-opus-high&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Each perspective agent writes &lt;code&gt;result-&amp;lt;perspective&amp;gt;.json&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"perspective"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Senior Backend Engineer"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"action"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"changes_required"&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;|&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"clean"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"summary"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"One paragraph."&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"comments"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"path"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"apps/portal-backend/src/service.ts"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"line"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;42&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"side"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"RIGHT"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"body"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"[Backend] [Critical] Missing error handling for Prisma query"&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Rules:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Max 3 inline comments per perspective&lt;/li&gt;
&lt;li&gt;Only &lt;code&gt;[Critical]&lt;/code&gt; and &lt;code&gt;[Major]&lt;/code&gt; get inline comments&lt;/li&gt;
&lt;li&gt;Findings only — no praise&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  3. Synthesize Review Results
&lt;/h3&gt;

&lt;p&gt;The workflow merges inline comments from all perspectives:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Deduplicate by &lt;code&gt;path + line + side&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Sort by severity (&lt;code&gt;[Critical]&lt;/code&gt; first, then &lt;code&gt;[Major]&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;Merge tags when multiple perspectives flag the same line&lt;/li&gt;
&lt;li&gt;Cap at 10 inline comments&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Output: &lt;code&gt;synthesized-comments.json&lt;/code&gt; and &lt;code&gt;.review-feedback.md&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;If any perspective returned &lt;code&gt;action: "changes_required"&lt;/code&gt;, the workflow runs the fix agent.&lt;/p&gt;

&lt;h3&gt;
  
  
  4. Fix Agent
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Model&lt;/strong&gt;: Cursor CLI with &lt;code&gt;composer-2-fast&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Inputs&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;.review-feedback.md&lt;/code&gt; — perspective summaries + synthesized inline comments&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Deliverables&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Address each finding&lt;/li&gt;
&lt;li&gt;Run &lt;code&gt;pnpm nx format:write&lt;/code&gt;, lint, tests&lt;/li&gt;
&lt;li&gt;Commit with &lt;code&gt;fix(DPA2-XXXX): address code review findings&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  5. Push PR and Transition Jira
&lt;/h3&gt;

&lt;p&gt;The workflow:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Applies &lt;code&gt;pnpm nx format&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Pushes the branch&lt;/li&gt;
&lt;li&gt;Creates a PR with title/body from &lt;code&gt;.pr-description.md&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Dispatches &lt;code&gt;build-pr.yaml&lt;/code&gt; workflow (full CI with E2E tests)&lt;/li&gt;
&lt;li&gt;Transitions Jira to "In Review"&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Bug Investigation Flow
&lt;/h2&gt;

&lt;p&gt;For Bug tickets, the refine agent (runs before implement) gets special treatment.&lt;/p&gt;

&lt;p&gt;If the issue type is Bug AND the Grafana MCP server is configured, the refine agent:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Reads &lt;code&gt;investigate-SKILL.md&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Calls Grafana MCP tools:

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;list_datasources&lt;/code&gt; — get Loki, Prometheus, Tempo UIDs&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;query_loki_logs&lt;/code&gt; — fetch error logs&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;query_prometheus&lt;/code&gt; — error rates, latency&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;tempo_traceql-search&lt;/code&gt; — find error traces&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Creates a Confluence Investigation Report with:

&lt;ul&gt;
&lt;li&gt;Error log analysis (categorized patterns with sample log lines)&lt;/li&gt;
&lt;li&gt;Metric analysis (error rate trends, latency changes, Grafana Explore deeplinks)&lt;/li&gt;
&lt;li&gt;Trace analysis (representative error traces showing failure path)&lt;/li&gt;
&lt;li&gt;Root cause hypothesis (ranked with confidence levels)&lt;/li&gt;
&lt;li&gt;Reproduction steps (derived from traces and logs)&lt;/li&gt;
&lt;li&gt;Recommended fix strategy&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Links the Investigation Report to the Jira ticket&lt;/li&gt;
&lt;li&gt;Writes &lt;code&gt;investigation-report-url.txt&lt;/code&gt; for the refine skill to reference in the Execution Plan&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Evidence-based fixes, not guesses.&lt;/p&gt;

&lt;h2&gt;
  
  
  What We Learned
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Agent-written PRs need structure
&lt;/h3&gt;

&lt;p&gt;Skills (&lt;code&gt;implement-SKILL.md&lt;/code&gt;, &lt;code&gt;fix-review-SKILL.md&lt;/code&gt;) guide agents through deliverables. Freeform prompts produce junk.&lt;/p&gt;

&lt;h3&gt;
  
  
  Review loops need synthesis
&lt;/h3&gt;

&lt;p&gt;Seven separate reviews → one merged feedback doc. Deduplicated, tagged by perspective, capped at 10 inline comments. Users don't read seven JSON files. They read one markdown summary.&lt;/p&gt;

&lt;h3&gt;
  
  
  Environment setup is heavyweight
&lt;/h3&gt;

&lt;p&gt;Postgres, Redis, Kafka, ClickHouse, typesense, NGINX proxy, Foundry Anvil. Self-hosted runner pays off.&lt;/p&gt;

&lt;h3&gt;
  
  
  Full ecosystem in CI enables meaningful test coverage
&lt;/h3&gt;

&lt;p&gt;Most agent demos stop at unit tests. Our agent writes unit, integration, AND E2E tests against production-like dependencies.&lt;/p&gt;

&lt;h3&gt;
  
  
  Bug investigation flow is a forcing function
&lt;/h3&gt;

&lt;p&gt;Without the Investigation Report, developers guess. With it, they have error patterns, traces, metrics, and a ranked root cause hypothesis.&lt;/p&gt;

&lt;h2&gt;
  
  
  From Ticket to PR in One Workflow Run
&lt;/h2&gt;

&lt;p&gt;The workflow runs from Jira ticket to GitHub PR without human intervention. The agent:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;✅ Reads ticket and Execution Plan&lt;/li&gt;
&lt;li&gt;✅ Implements changes&lt;/li&gt;
&lt;li&gt;✅ Writes unit, integration, and E2E tests&lt;/li&gt;
&lt;li&gt;✅ Self-reviews&lt;/li&gt;
&lt;li&gt;✅ Runs internal review (7 perspectives)&lt;/li&gt;
&lt;li&gt;✅ Addresses review findings&lt;/li&gt;
&lt;li&gt;✅ Pushes branch and creates PR&lt;/li&gt;
&lt;li&gt;✅ Transitions Jira to "In Review"&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Your team reviews the PR, not the ticket.&lt;/p&gt;

&lt;h2&gt;
  
  
  What Breaks When You Try This?
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Environment setup&lt;/strong&gt; — You need a self-hosted runner with services. GitHub-hosted runners won't cut it.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Agent commit quality&lt;/strong&gt; — Skills and deliverables are mandatory. Freeform prompts produce junk.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Reviewer trust&lt;/strong&gt; — Do your reviewers trust the agent less than junior devs? After 20 PRs, ours stopped caring who wrote the code.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This is Part 3 of our Jira-agent automation series. Part 4 (coming soon) will cover PR review automation and merge policies.&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;Mitko Tschimev&lt;/strong&gt; — Technical lead at 1inch. I write about engineering leadership, architecture, and automation.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;X: &lt;a href="https://x.com/MTschimev" rel="noopener noreferrer"&gt;https://x.com/MTschimev&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;LinkedIn: &lt;a href="https://linkedin.com/in/mitko-tschimev" rel="noopener noreferrer"&gt;https://linkedin.com/in/mitko-tschimev&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>cicd</category>
      <category>ai</category>
      <category>githubactions</category>
      <category>testing</category>
    </item>
    <item>
      <title>The Five Stages That Make AI Task Automation Work (Part 2)</title>
      <dc:creator>Mitko Tschimev</dc:creator>
      <pubDate>Mon, 06 Apr 2026 15:35:07 +0000</pubDate>
      <link>https://dev.to/mitkotschimev/the-five-stages-that-make-ai-task-automation-work-part-2-1l2n</link>
      <guid>https://dev.to/mitkotschimev/the-five-stages-that-make-ai-task-automation-work-part-2-1l2n</guid>
      <description>&lt;p&gt;In &lt;a href="https://dev.to/mitkotschimev/how-we-built-ai-task-automation-that-actually-works-1laf"&gt;Part 1&lt;/a&gt;, I walked through the architecture: JIRA webhooks → GitHub → Cursor agent. Today I'm covering the &lt;strong&gt;process&lt;/strong&gt; — the five stages that turn a rough ticket into a merged PR without losing human oversight.&lt;/p&gt;

&lt;p&gt;Most teams try "ticket → AI → code" and it breaks. The agent misunderstands the requirement, or devs lose trust after one bad PR. The fix isn't better prompts — it's &lt;strong&gt;structured handoffs&lt;/strong&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Five Transitions
&lt;/h2&gt;

&lt;p&gt;We built this with &lt;strong&gt;two agent stages&lt;/strong&gt; and &lt;strong&gt;three human review gates&lt;/strong&gt;. Agents never jump from a vague ticket straight to implementation.&lt;/p&gt;

&lt;h3&gt;
  
  
  1. Refinement (human)
&lt;/h3&gt;

&lt;p&gt;A team member (BA, PO, or dev) writes the initial ticket. It can be rough:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"Add error handling for the payment webhook timeout case."&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Status: &lt;strong&gt;Refinement&lt;/strong&gt;. Next step: agent formatting.&lt;/p&gt;

&lt;h3&gt;
  
  
  2. Agent: Refine
&lt;/h3&gt;

&lt;p&gt;A Cursor agent reads the ticket and generates:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Acceptance criteria&lt;/strong&gt; (pass/fail conditions)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Definition of Done&lt;/strong&gt; (checklist: tests, docs, deploy)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;How to test&lt;/strong&gt; (manual or automated outline)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Implementation plan&lt;/strong&gt; (file-by-file breakdown, like Cursor's plan mode)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Everything saves to a &lt;strong&gt;Confluence page&lt;/strong&gt; linked from JIRA. The agent clarifies &lt;em&gt;what&lt;/em&gt; we're building, but doesn't write code yet.&lt;/p&gt;

&lt;p&gt;Ticket moves to: &lt;strong&gt;Plan: Review&lt;/strong&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  3. Plan: Review (human)
&lt;/h3&gt;

&lt;p&gt;Team reviews the Confluence plan. If something's off — wrong approach, missing edge case, unclear criteria — we comment in JIRA or Confluence.&lt;/p&gt;

&lt;p&gt;Then we move the ticket &lt;strong&gt;back&lt;/strong&gt; to &lt;strong&gt;Agent: Refine&lt;/strong&gt;. The agent reads feedback, updates the plan. This loop can run multiple times.&lt;/p&gt;

&lt;p&gt;Once approved, ticket moves to: &lt;strong&gt;Agent: Implement&lt;/strong&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  4. Agent: Implement
&lt;/h3&gt;

&lt;p&gt;Agent writes code using the Confluence plan. Runs tests (if configured), opens a &lt;strong&gt;pull request&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;PR links to the JIRA ticket and Confluence plan. Reviewers see the requirement, approach, and code changes — all connected.&lt;/p&gt;

&lt;p&gt;If the PR needs changes, devs comment in GitHub and move the ticket &lt;strong&gt;back&lt;/strong&gt; to &lt;strong&gt;Agent: Implement&lt;/strong&gt;. Agent reads PR feedback, updates code, pushes a new commit.&lt;/p&gt;

&lt;h3&gt;
  
  
  5. Review (human)
&lt;/h3&gt;

&lt;p&gt;Standard code review. If it's good, merge. If not, send back to step 4 with feedback.&lt;/p&gt;

&lt;p&gt;After merge, ticket moves to &lt;strong&gt;Test&lt;/strong&gt; (outside this workflow), then &lt;strong&gt;Done&lt;/strong&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why This Works
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Agents work from approved plans.&lt;/strong&gt; They don't guess. When they get it wrong, they iterate based on structured feedback.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Humans review before code is written.&lt;/strong&gt; Step 3 (plan review) catches bad approaches early. A 10-minute review saves hours of rework.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Feedback loops are cheap.&lt;/strong&gt; Sending a ticket back to "Agent: Refine" or "Agent: Implement" takes minutes. Agent re-runs with context. No senior dev escalation needed.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Trust builds gradually.&lt;/strong&gt; Start with small tickets. Expand to complex work as the team gains confidence.&lt;/p&gt;

&lt;h2&gt;
  
  
  What We Learned
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Rovo didn't cut it.&lt;/strong&gt; Atlassian's AI tooling was unusable for our workflow. Cursor agents + GitHub gave us the control we needed.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Plan review is not optional.&lt;/strong&gt; Skipping step 3 always backfires. It's the cheapest gate and the highest ROI.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;PR comments &amp;gt; ticket comments for implementation feedback.&lt;/strong&gt; Devs already write PR comments. The agent reads them natively. No translation layer.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Confluence as the plan artifact is key.&lt;/strong&gt; JIRA description fields are too limited. Confluence gives us version history, inline comments, and space for a real implementation roadmap.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  What's Next
&lt;/h2&gt;

&lt;p&gt;In Part 3, I'll dive into the &lt;strong&gt;Agent: Implement&lt;/strong&gt; stage — how we configure the Cursor agent, the repo structure (rules, skills, agents), and how it generates PRs that don't need heavy rewrites.&lt;/p&gt;

&lt;p&gt;For now, if you're automating dev work with AI: &lt;strong&gt;Don't let agents write code until you've reviewed their plan.&lt;/strong&gt; That one gate will save you more debugging time than any other optimization.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Find me on &lt;a href="https://x.com/MTschimev" rel="noopener noreferrer"&gt;X&lt;/a&gt; or &lt;a href="https://linkedin.com/in/mitko-tschimev" rel="noopener noreferrer"&gt;LinkedIn&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>automation</category>
      <category>ai</category>
      <category>workflow</category>
      <category>architecture</category>
    </item>
    <item>
      <title>How We Built AI Task Automation That Actually Works</title>
      <dc:creator>Mitko Tschimev</dc:creator>
      <pubDate>Sat, 04 Apr 2026 01:11:15 +0000</pubDate>
      <link>https://dev.to/mitkotschimev/how-we-built-ai-task-automation-that-actually-works-1laf</link>
      <guid>https://dev.to/mitkotschimev/how-we-built-ai-task-automation-that-actually-works-1laf</guid>
      <description>&lt;h2&gt;
  
  
  The Problem with AI Task Automation
&lt;/h2&gt;

&lt;p&gt;AI-powered task automation tools promise seamless integration: understand JIRA tickets, connect to your codebase, ship features faster. For engineering teams, this sounds like the answer to constant context-switching and manual ticket translation.&lt;/p&gt;

&lt;p&gt;In practice? They struggle with nuanced tickets, miss team conventions, and need constant supervision. Tools optimize for demos, not production complexity.&lt;/p&gt;

&lt;p&gt;At 1inch, we built this:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;JIRA automation&lt;/strong&gt; → &lt;strong&gt;GitHub webhook&lt;/strong&gt; → &lt;strong&gt;GitHub runner&lt;/strong&gt; → &lt;strong&gt;Cursor agent&lt;/strong&gt; (with full repo context)&lt;/p&gt;

&lt;h2&gt;
  
  
  The Flow
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;JIRA fires a webhook&lt;/strong&gt; on specific ticket events&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;GitHub receives it&lt;/strong&gt; and triggers a custom runner&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Cursor agent&lt;/strong&gt; (pre-configured with rules, skills, and context) connects to the repo&lt;/li&gt;
&lt;li&gt;Agent reads the ticket, understands the codebase, and &lt;strong&gt;ships a PR&lt;/strong&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;No manual handoff. No "AI tried but got confused." Just working automation.&lt;/p&gt;

&lt;h2&gt;
  
  
  Where the Real Magic Happens
&lt;/h2&gt;

&lt;p&gt;The webhook setup is straightforward. The breakthrough is the &lt;strong&gt;repo design&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Cursor and Claude are only as good as the context you provide. Our Cursor agent succeeds because the repo is &lt;strong&gt;designed for AI collaboration&lt;/strong&gt;:&lt;/p&gt;

&lt;h3&gt;
  
  
  1. Cursor Rules (&lt;code&gt;.cursorrules&lt;/code&gt;)
&lt;/h3&gt;

&lt;p&gt;We define:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Coding standards&lt;/li&gt;
&lt;li&gt;Naming conventions&lt;/li&gt;
&lt;li&gt;Testing requirements&lt;/li&gt;
&lt;li&gt;Architectural patterns&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;When the agent writes code, it already knows:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;What our API responses look like&lt;/li&gt;
&lt;li&gt;How we structure components&lt;/li&gt;
&lt;li&gt;Commit message format&lt;/li&gt;
&lt;li&gt;Which libraries to use (and avoid)&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  2. Skills Directory (&lt;code&gt;skills/&lt;/code&gt;)
&lt;/h3&gt;

&lt;p&gt;Domain knowledge documentation:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Common patterns (auth flows, error handling)&lt;/li&gt;
&lt;li&gt;Edge cases we've solved&lt;/li&gt;
&lt;li&gt;Integration quirks (third-party APIs, legacy systems)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The agent references this before touching code—it's not guessing, it's using institutional knowledge.&lt;/p&gt;

&lt;h3&gt;
  
  
  3. Agent Context (ADRs + Architecture)
&lt;/h3&gt;

&lt;p&gt;We include:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Architecture decision records&lt;/li&gt;
&lt;li&gt;Service boundaries&lt;/li&gt;
&lt;li&gt;Deployment constraints&lt;/li&gt;
&lt;li&gt;Performance considerations&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;When evaluating a JIRA ticket, the agent understands &lt;strong&gt;why&lt;/strong&gt; our system is shaped the way it is—not just what the code does.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why This Works
&lt;/h2&gt;

&lt;p&gt;AI tools try to be everything to everyone. They promise "AI that understands your business" but deliver:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Shallow codebase context&lt;/li&gt;
&lt;li&gt;Generic responses that miss team conventions&lt;/li&gt;
&lt;li&gt;Product demo polish, not production depth&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Our approach inverts the problem: &lt;strong&gt;we shaped our repo to work with AI&lt;/strong&gt; instead of waiting for vendors to catch up.&lt;/p&gt;

&lt;p&gt;The result? Cursor agents that:&lt;/p&gt;

&lt;p&gt;✅ Understand our architecture from day one&lt;br&gt;&lt;br&gt;
✅ Write code that passes review without major rewrites&lt;br&gt;&lt;br&gt;
✅ Learn from documented patterns instead of re-inventing solutions  &lt;/p&gt;

&lt;h2&gt;
  
  
  Real Results
&lt;/h2&gt;

&lt;p&gt;Since deploying this system:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Faster ticket-to-PR cycles:&lt;/strong&gt; Initial PRs ship within minutes, not hours&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Fewer review cycles:&lt;/strong&gt; PRs match our conventions—reviewers focus on logic, not style&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Better knowledge capture:&lt;/strong&gt; Writing skills and rules forced us to document tribal knowledge&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The system isn't perfect. The agent still needs human review. But it shifts work from "write the code" to "review and refine"—a massive productivity gain.&lt;/p&gt;

&lt;h2&gt;
  
  
  Key Takeaways
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;AI tools optimize for demos, not production complexity&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;The breakthrough is repo design, not webhook plumbing&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Context (rules + skills + architecture) makes AI useful&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Build the glue yourself—don't wait for vendors&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  What's Next
&lt;/h2&gt;

&lt;p&gt;This is Part 1 of a series. Coming up:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Part 2:&lt;/strong&gt; The JIRA → GitHub webhook architecture (setup, failures, wins)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Part 3:&lt;/strong&gt; GitHub runner + Cursor agent config (rules, skills, agent setup)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Part 4:&lt;/strong&gt; Results, trade-offs, and iterations&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  The Lesson
&lt;/h2&gt;

&lt;p&gt;If you're building AI automation, the lesson is simple: &lt;strong&gt;design your systems to work with AI, not against it.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Tools optimize for breadth. You need depth. The pieces exist (GitHub, JIRA, Cursor, Claude). The missing part is &lt;strong&gt;context design&lt;/strong&gt;—and that's something only you can build.&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;Have you built AI automation for your team? What worked (or didn't)?&lt;/strong&gt; Drop a comment—we'd love to hear what other teams are doing.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>automation</category>
      <category>devops</category>
      <category>architecture</category>
    </item>
    <item>
      <title>Why Atlassian Rovo Failed Us (and What We Built Instead)</title>
      <dc:creator>Mitko Tschimev</dc:creator>
      <pubDate>Fri, 03 Apr 2026 15:11:27 +0000</pubDate>
      <link>https://dev.to/mitkotschimev/why-atlassian-rovo-failed-us-and-what-we-built-instead-4anh</link>
      <guid>https://dev.to/mitkotschimev/why-atlassian-rovo-failed-us-and-what-we-built-instead-4anh</guid>
      <description>&lt;h1&gt;
  
  
  Why Atlassian Rovo Failed Us (and What We Built Instead)
&lt;/h1&gt;

&lt;h2&gt;
  
  
  The Problem with AI Task Automation
&lt;/h2&gt;

&lt;p&gt;Atlassian Rovo promised seamless AI-driven task automation: understand JIRA tickets, connect to your codebase, ship features faster. For engineering teams, this sounded like the answer to constant context-switching and manual ticket translation.&lt;/p&gt;

&lt;p&gt;As technical lead at 1inch, we tried it. It didn't work.&lt;/p&gt;

&lt;p&gt;Rovo is polished in demos but struggles in production. It can't handle nuanced tickets, doesn't understand team conventions, and needs constant supervision. For a tool marketed as "AI automation," it felt like another integration to babysit.&lt;/p&gt;

&lt;h2&gt;
  
  
  What We Built Instead
&lt;/h2&gt;

&lt;p&gt;After weeks of frustration, I stopped waiting for enterprise tools and built this:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;JIRA automation&lt;/strong&gt; → &lt;strong&gt;GitHub webhook&lt;/strong&gt; → &lt;strong&gt;GitHub runner&lt;/strong&gt; → &lt;strong&gt;Cursor agent&lt;/strong&gt; (with full repo context)&lt;/p&gt;

&lt;h3&gt;
  
  
  The Flow
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;JIRA fires a webhook&lt;/strong&gt; when a ticket hits "Ready for Dev" or gets updated with specs&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;GitHub receives it&lt;/strong&gt; and triggers a custom runner&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Cursor agent&lt;/strong&gt; (pre-configured with rules, skills, and context) connects to the repo&lt;/li&gt;
&lt;li&gt;Agent reads the ticket, understands the codebase, and &lt;strong&gt;ships a PR&lt;/strong&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;No manual handoff. No "AI tried but got confused." Just working automation.&lt;/p&gt;

&lt;h2&gt;
  
  
  Where the Real Magic Happens
&lt;/h2&gt;

&lt;p&gt;The webhook setup is straightforward. The breakthrough is the &lt;strong&gt;repo design&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Cursor and Claude are only as good as the context you provide. Rovo fails because it tries to be everything. Our Cursor agent succeeds because the repo is &lt;strong&gt;designed for AI collaboration&lt;/strong&gt;:&lt;/p&gt;

&lt;h3&gt;
  
  
  1. Cursor Rules (&lt;code&gt;.cursorrules&lt;/code&gt;)
&lt;/h3&gt;

&lt;p&gt;We define:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Coding standards&lt;/li&gt;
&lt;li&gt;Naming conventions&lt;/li&gt;
&lt;li&gt;Testing requirements&lt;/li&gt;
&lt;li&gt;Architectural patterns&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;When the agent writes code, it already knows:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;What our API responses look like&lt;/li&gt;
&lt;li&gt;How we structure components&lt;/li&gt;
&lt;li&gt;Commit message format&lt;/li&gt;
&lt;li&gt;Which libraries to use (and avoid)&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  2. Skills Directory (&lt;code&gt;skills/&lt;/code&gt;)
&lt;/h3&gt;

&lt;p&gt;Domain knowledge documentation:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Common patterns (auth flows, error handling)&lt;/li&gt;
&lt;li&gt;Edge cases we've solved&lt;/li&gt;
&lt;li&gt;Integration quirks (third-party APIs, legacy systems)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The agent references this before touching code—it's not guessing, it's using institutional knowledge.&lt;/p&gt;

&lt;h3&gt;
  
  
  3. Agent Context (ADRs + Architecture)
&lt;/h3&gt;

&lt;p&gt;We include:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Architecture decision records&lt;/li&gt;
&lt;li&gt;Service boundaries&lt;/li&gt;
&lt;li&gt;Deployment constraints&lt;/li&gt;
&lt;li&gt;Performance considerations&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;When evaluating a JIRA ticket, the agent understands &lt;strong&gt;why&lt;/strong&gt; our system is shaped the way it is—not just what the code does.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why This Beats Enterprise Tools
&lt;/h2&gt;

&lt;p&gt;Rovo and similar tools try to be everything to everyone. They promise "AI that understands your business" but deliver:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Shallow codebase context&lt;/li&gt;
&lt;li&gt;Generic responses that miss team conventions&lt;/li&gt;
&lt;li&gt;Product demo polish, not production depth&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Our approach inverts the problem: &lt;strong&gt;we shaped our repo to work with AI&lt;/strong&gt; instead of waiting for vendors to catch up.&lt;/p&gt;

&lt;p&gt;The result? Cursor agents that:&lt;/p&gt;

&lt;p&gt;✅ Understand our architecture from day one&lt;br&gt;&lt;br&gt;
✅ Write code that passes review without major rewrites&lt;br&gt;&lt;br&gt;
✅ Learn from documented patterns instead of re-inventing solutions  &lt;/p&gt;

&lt;h2&gt;
  
  
  Key Takeaways
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Enterprise AI tools optimize for demos, not production complexity&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;The breakthrough is repo design, not webhook plumbing&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Context (rules + skills + architecture) makes AI useful&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Build the glue yourself—don't wait for vendors&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  What's Next
&lt;/h2&gt;

&lt;p&gt;This is Part 1 of a series. Coming up:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Part 2:&lt;/strong&gt; The JIRA → GitHub webhook architecture (setup, failures, wins)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Part 3:&lt;/strong&gt; GitHub runner + Cursor agent config (rules, skills, agent setup)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Part 4:&lt;/strong&gt; Results, trade-offs, and iterations&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If you're building AI automation, the lesson is simple: &lt;strong&gt;design your systems to work with AI, not against it.&lt;/strong&gt;&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;Have you tried Rovo or built your own automation? What worked (or didn't)?&lt;/strong&gt; Drop a comment—I'd love to hear what other teams are doing.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>automation</category>
      <category>devops</category>
      <category>architecture</category>
    </item>
    <item>
      <title>Why Atlassian Rovo Failed Us (and What We Built Instead)</title>
      <dc:creator>Mitko Tschimev</dc:creator>
      <pubDate>Fri, 03 Apr 2026 14:53:10 +0000</pubDate>
      <link>https://dev.to/mitkotschimev/why-atlassian-rovo-failed-us-and-what-we-built-instead-2e19</link>
      <guid>https://dev.to/mitkotschimev/why-atlassian-rovo-failed-us-and-what-we-built-instead-2e19</guid>
      <description>&lt;h1&gt;
  
  
  Why Atlassian Rovo Failed Us (and What We Built Instead)
&lt;/h1&gt;

&lt;h2&gt;
  
  
  The Problem with AI Task Automation
&lt;/h2&gt;

&lt;p&gt;Atlassian Rovo promised seamless AI-driven task automation: understand JIRA tickets, connect to your codebase, ship features faster. For engineering teams, this sounded like the answer to constant context-switching and manual ticket translation.&lt;/p&gt;

&lt;p&gt;We tried it. It didn't work.&lt;/p&gt;

&lt;p&gt;Rovo is polished in demos but struggles in production. It can't handle nuanced tickets, doesn't understand team conventions, and needs constant supervision. For a tool marketed as "AI automation," it felt like another integration to babysit.&lt;/p&gt;

&lt;h2&gt;
  
  
  What We Built Instead
&lt;/h2&gt;

&lt;p&gt;After weeks of frustration, I stopped waiting for enterprise tools and built this:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;JIRA automation&lt;/strong&gt; → &lt;strong&gt;GitHub webhook&lt;/strong&gt; → &lt;strong&gt;GitHub runner&lt;/strong&gt; → &lt;strong&gt;Cursor agent&lt;/strong&gt; (with full repo context)&lt;/p&gt;

&lt;h3&gt;
  
  
  The Flow
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;JIRA fires a webhook&lt;/strong&gt; when a ticket hits "Ready for Dev" or gets updated with specs&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;GitHub receives it&lt;/strong&gt; and triggers a custom runner&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Cursor agent&lt;/strong&gt; (pre-configured with rules, skills, and context) connects to the repo&lt;/li&gt;
&lt;li&gt;Agent reads the ticket, understands the codebase, and &lt;strong&gt;ships a PR&lt;/strong&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;No manual handoff. No "AI tried but got confused." Just working automation.&lt;/p&gt;

&lt;h2&gt;
  
  
  Where the Real Magic Happens
&lt;/h2&gt;

&lt;p&gt;The webhook setup is straightforward. The breakthrough is the &lt;strong&gt;repo design&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Cursor and Claude are only as good as the context you provide. Rovo fails because it tries to be everything. Our Cursor agent succeeds because the repo is &lt;strong&gt;designed for AI collaboration&lt;/strong&gt;:&lt;/p&gt;

&lt;h3&gt;
  
  
  1. Cursor Rules (&lt;code&gt;.cursorrules&lt;/code&gt;)
&lt;/h3&gt;

&lt;p&gt;We define:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Coding standards&lt;/li&gt;
&lt;li&gt;Naming conventions&lt;/li&gt;
&lt;li&gt;Testing requirements&lt;/li&gt;
&lt;li&gt;Architectural patterns&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;When the agent writes code, it already knows:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;What our API responses look like&lt;/li&gt;
&lt;li&gt;How we structure components&lt;/li&gt;
&lt;li&gt;Commit message format&lt;/li&gt;
&lt;li&gt;Which libraries to use (and avoid)&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  2. Skills Directory (&lt;code&gt;skills/&lt;/code&gt;)
&lt;/h3&gt;

&lt;p&gt;Domain knowledge documentation:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Common patterns (auth flows, error handling)&lt;/li&gt;
&lt;li&gt;Edge cases we've solved&lt;/li&gt;
&lt;li&gt;Integration quirks (third-party APIs, legacy systems)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The agent references this before touching code—it's not guessing, it's using institutional knowledge.&lt;/p&gt;

&lt;h3&gt;
  
  
  3. Agent Context (ADRs + Architecture)
&lt;/h3&gt;

&lt;p&gt;We include:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Architecture decision records&lt;/li&gt;
&lt;li&gt;Service boundaries&lt;/li&gt;
&lt;li&gt;Deployment constraints&lt;/li&gt;
&lt;li&gt;Performance considerations&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;When evaluating a JIRA ticket, the agent understands &lt;strong&gt;why&lt;/strong&gt; our system is shaped the way it is—not just what the code does.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why This Beats Enterprise Tools
&lt;/h2&gt;

&lt;p&gt;Rovo and similar tools try to be everything to everyone. They promise "AI that understands your business" but deliver:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Shallow codebase context&lt;/li&gt;
&lt;li&gt;Generic responses that miss team conventions&lt;/li&gt;
&lt;li&gt;Product demo polish, not production depth&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Our approach inverts the problem: &lt;strong&gt;we shaped our repo to work with AI&lt;/strong&gt; instead of waiting for vendors to catch up.&lt;/p&gt;

&lt;p&gt;The result? Cursor agents that:&lt;/p&gt;

&lt;p&gt;✅ Understand our architecture from day one&lt;br&gt;&lt;br&gt;
✅ Write code that passes review without major rewrites&lt;br&gt;&lt;br&gt;
✅ Learn from documented patterns instead of re-inventing solutions  &lt;/p&gt;

&lt;h2&gt;
  
  
  Key Takeaways
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Enterprise AI tools optimize for demos, not production complexity&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;The breakthrough is repo design, not webhook plumbing&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Context (rules + skills + architecture) makes AI useful&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Build the glue yourself—don't wait for vendors&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  What's Next
&lt;/h2&gt;

&lt;p&gt;This is Part 1 of a series. Coming up:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Part 2:&lt;/strong&gt; The JIRA → GitHub webhook architecture (setup, failures, wins)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Part 3:&lt;/strong&gt; GitHub runner + Cursor agent config (rules, skills, agent setup)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Part 4:&lt;/strong&gt; Results, trade-offs, and iterations&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If you're building AI automation, the lesson is simple: &lt;strong&gt;design your systems to work with AI, not against it.&lt;/strong&gt;&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;Have you tried Rovo or built your own automation? What worked (or didn't)?&lt;/strong&gt; Drop a comment—I'd love to hear what other teams are doing.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>automation</category>
      <category>devops</category>
      <category>architecture</category>
    </item>
  </channel>
</rss>
