<!-- mobian-agent-page publisher="dailydev" canonical="https://daily.dev/posts/local-ai-inner-loop-with-pull-requests-ght8soubi" -->

---
title: Local AI “Inner Loop” with Pull Requests | daily.dev
description: When multiple AI coding agents work against a shared repository, they flood GitHub with intermediate pull requests and overwhelm CI queues sized for human...
canonical: https://daily.dev/posts/local-ai-inner-loop-with-pull-requests-ght8soubi
twitter:card: summary_large_image
twitter:site: @dailydotdev
og:type: website
og:site_name: daily.dev
og:title: Local AI “Inner Loop” with Pull Requests | daily.dev
og:description: When multiple AI coding agents work against a shared repository, they flood GitHub with intermediate pull requests and overwhelm CI queues sized for human...
og:url: https://daily.dev/posts/local-ai-inner-loop-with-pull-requests-ght8soubi
og:image: https://api.daily.dev/og/posts/GhT8soUbi.png
og:image:alt: Local AI “Inner Loop” with Pull Requests
og:image:width: 1200
og:image:height: 630
og:locale: en
---

> ## Documentation Index
> Fetch the complete documentation index at: https://daily.dev/llms.txt
> Use this file to discover all available pages before exploring further.

# Local AI “Inner Loop” with Pull Requests

**[Medium](https://daily.dev/sources/medium_js)** · 9 min read · 0 upvotes · 0 comments

## Summary

When multiple AI coding agents work against a shared repository, they flood GitHub with intermediate pull requests and overwhelm CI queues sized for human cadence. Sandforge addresses this by running the full iterate-review-fix cycle locally using Forgejo (a self-hostable open-source forge) and git worktrees, so only one validated, squashed PR ever reaches GitHub per feature. It uses act_runner (based on nektos/act) to run the same GitHub Actions engine locally in Docker, ensuring local CI failures mirror what GitHub would catch. The post also distinguishes two separate bottlenecks: shared-surface CI congestion (which Sandforge solves) and human review capacity (which it does not), and advises teams to identify which constraint actually limits them before investing in tooling.

## Full article

daily.dev links to this article rather than hosting it. Read it at the original source: <https://medium.com/@jbpoley/local-ai-inner-loop-with-pull-requests-e04782020c34>

## Questions this post answers

### Why do my CI jobs silently hang when using act-based local runners with Docker 29?

Docker 29 hardened its tar-extraction process to reject certain symlinks, and standard act images symlink /var/run to /run, which triggers this rejection and causes CI jobs to hang silently with no error message. Sandforge works around this by de-symlinking the path in its CI image so jobs can run at all.

_Developers debugging act or act_runner CI hangs on daily.dev can find similar Docker compatibility gotchas surfaced early._

### How many concurrent CI jobs does GitHub Actions allow on the Free tier?

GitHub's documented cap on the Free tier is 20 concurrent jobs. Teams running multiple AI coding agents per developer, such as the four or five Claude Code agents per engineer reported by incident.io's engineering team, can quickly exceed this budget, causing jobs to queue for hours and scheduled-workflow latency to drift past four hours in community reports.

_Teams scaling AI agent fleets against shared CI budgets can track these concurrency limits on daily.dev._

### What CI engine does Sandforge use to run GitHub Actions workflows locally?

Sandforge uses act_runner, which is Forgejo's runner built on a fork of nektos/act, the same tool originally written by Casey Lee to run GitHub Actions workflows locally in Docker. Running the same engine class as GitHub Actions, rather than a mock, means a local CI pass predicts a real GitHub Actions pass because it hits the same failure modes.

_Engineers weighing local-CI fidelity tradeoffs for agent workflows can compare tooling choices like this on daily.dev._

## Similar posts on daily.dev

- [GitHub is the wrong shape for this new world](https://daily.dev/posts/github-is-the-wrong-shape-for-this-new-world-sobuyfyho) · Hacker News · 2 upvotes · 2 comments
- [How to Unblock Your AI PR Review Bottleneck: A Tech Lead’s Guide to Building a Codebase-Aware Reviewer](https://daily.dev/posts/how-to-unblock-your-ai-pr-review-bottleneck-a-tech-lead-s-guide-to-building-a-codebase-aware-review-hurtxskqp) · freeCodeCamp · 1 upvotes · 0 comments

---

Tags: [#ai-agents](https://daily.dev/tags/ai-agents), [#cicd](https://daily.dev/tags/cicd), [#git](https://daily.dev/tags/git), [#github-actions](https://daily.dev/tags/github-actions), [#forgejo](https://daily.dev/tags/forgejo)

[View this post on daily.dev](https://daily.dev/posts/local-ai-inner-loop-with-pull-requests-ght8soubi)

```json
{"@context":"https://schema.org","@graph":[{"@type":"Organization","@id":"https://daily.dev/#organization","name":"daily.dev","url":"https://daily.dev","logo":{"@type":"ImageObject","url":"https://daily.dev/apple-touch-icon.png","width":180,"height":180},"sameAs":["https://twitter.com/dailydotdev","https://github.com/dailydotdev","https://www.linkedin.com/company/daily-dev-ltd"]},{"@type":"WebSite","@id":"https://daily.dev/#website","url":"https://daily.dev","name":"daily.dev","publisher":{"@id":"https://daily.dev/#organization"},"potentialAction":{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https://daily.dev/search?q={search_term_string}"},"query-input":"required name=search_term_string"}}]}
{"@context":"https://schema.org","@type":"TechArticle","headline":"Local AI “Inner Loop” with Pull Requests","url":"https://daily.dev/posts/local-ai-inner-loop-with-pull-requests-ght8soubi","mainEntityOfPage":{"@type":"WebPage","@id":"https://daily.dev/posts/local-ai-inner-loop-with-pull-requests-ght8soubi"},"datePublished":"2026-07-18T01:01:19.659Z","dateModified":"2026-09-13T18:39:26.372Z","description":"When multiple AI coding agents work against a shared repository, they flood GitHub with intermediate pull requests and overwhelm CI queues sized for human...","image":"https://media.daily.dev/image/upload/f_auto,q_auto/v1/posts/0f97133cc8589e3d360c2464b67227be?_a=AQAEuop","thumbnailUrl":"https://media.daily.dev/image/upload/f_auto,q_auto/v1/posts/0f97133cc8589e3d360c2464b67227be?_a=AQAEuop","isAccessibleForFree":true,"articleSection":"Medium","inLanguage":"en","publisher":{"@type":"Organization","name":"daily.dev","url":"https://daily.dev","logo":{"@type":"ImageObject","url":"https://daily.dev/apple-touch-icon.png","width":180,"height":180}},"author":{"@type":"Organization","name":"Medium","logo":"https://media.daily.dev/image/upload/t_logo,f_auto/v1/logos/medium","url":"https://daily.dev/sources/medium_js"},"commentCount":0,"discussionUrl":"https://daily.dev/posts/local-ai-inner-loop-with-pull-requests-ght8soubi","interactionStatistic":[{"@type":"InteractionCounter","interactionType":{"@type":"LikeAction"},"userInteractionCount":0},{"@type":"InteractionCounter","interactionType":{"@type":"CommentAction"},"userInteractionCount":0}],"keywords":"ai-agents,cicd,git,github-actions,forgejo","timeRequired":"PT9M"}
{"@context":"https://schema.org","@type":"BreadcrumbList","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https://daily.dev"},{"@type":"ListItem","position":2,"name":"Medium","item":"https://daily.dev/sources/medium_js"},{"@type":"ListItem","position":3,"name":"Local AI “Inner Loop” with Pull Requests"}]}
{"@context":"https://schema.org","@type":"FAQPage","@id":"https://daily.dev/posts/local-ai-inner-loop-with-pull-requests-ght8soubi#faq","mainEntity":[{"@type":"Question","name":"Why do my CI jobs silently hang when using act-based local runners with Docker 29?","acceptedAnswer":{"@type":"Answer","text":"Docker 29 hardened its tar-extraction process to reject certain symlinks, and standard act images symlink /var/run to /run, which triggers this rejection and causes CI jobs to hang silently with no error message. Sandforge works around this by de-symlinking the path in its CI image so jobs can run at all. Developers debugging act or act_runner CI hangs on daily.dev can find similar Docker compatibility gotchas surfaced early."}},{"@type":"Question","name":"How many concurrent CI jobs does GitHub Actions allow on the Free tier?","acceptedAnswer":{"@type":"Answer","text":"GitHub's documented cap on the Free tier is 20 concurrent jobs. Teams running multiple AI coding agents per developer, such as the four or five Claude Code agents per engineer reported by incident.io's engineering team, can quickly exceed this budget, causing jobs to queue for hours and scheduled-workflow latency to drift past four hours in community reports. Teams scaling AI agent fleets against shared CI budgets can track these concurrency limits on daily.dev."}},{"@type":"Question","name":"What CI engine does Sandforge use to run GitHub Actions workflows locally?","acceptedAnswer":{"@type":"Answer","text":"Sandforge uses act_runner, which is Forgejo's runner built on a fork of nektos/act, the same tool originally written by Casey Lee to run GitHub Actions workflows locally in Docker. Running the same engine class as GitHub Actions, rather than a mock, means a local CI pass predicts a real GitHub Actions pass because it hits the same failure modes. Engineers weighing local-CI fidelity tradeoffs for agent workflows can compare tooling choices like this on daily.dev."}}]}
```

