<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[AI CodeOps Blog]]></title><description><![CDATA[AI CodeOps Blog]]></description><link>https://aicodeops.hashnode.dev</link><image><url>https://cdn.hashnode.com/uploads/logos/6a5f9e461a0c946679d5d605/ebd5b9dc-3932-4969-8d66-83819b1c3535.png</url><title>AI CodeOps Blog</title><link>https://aicodeops.hashnode.dev</link></image><generator>RSS for Node</generator><lastBuildDate>Sat, 07 Nov 2026 11:12:04 GMT</lastBuildDate><atom:link href="https://aicodeops.hashnode.dev/rss.xml" rel="self" type="application/rss+xml"/><language><![CDATA[en]]></language><ttl>60</ttl><item><title><![CDATA[AI CodeOps vs GitHub Copilot's Coding Agent: When Each One Fits]]></title><description><![CDATA[A fair comparison as of October 2026, including when Copilot is the better choice. GitHub Copilot's coding agent (GitHub's docs now call it the Copilot…]]></description><link>https://aicodeops.hashnode.dev/ai-codeops-vs-github-copilot-s-coding-agent-when-each-one-fits</link><guid isPermaLink="true">https://aicodeops.hashnode.dev/ai-codeops-vs-github-copilot-s-coding-agent-when-each-one-fits</guid><category><![CDATA[AI]]></category><category><![CDATA[GitHub]]></category><category><![CDATA[github copilot]]></category><category><![CDATA[Devops]]></category><dc:creator><![CDATA[AI CodeOps]]></dc:creator><pubDate>Wed, 04 Nov 2026 19:49:42 GMT</pubDate><content:encoded><![CDATA[<p><em>A fair comparison as of October 2026, including when Copilot is the better choice.</em></p>
<p>GitHub Copilot's coding agent (GitHub's docs now call it the Copilot cloud agent) and AI CodeOps solve a similar problem. You hand over a task, the work happens in the cloud, and you get back a pull request. The differences are in where they work, how changes are gated, and what you pay.</p>
<p>This comparison uses GitHub's own documentation for the Copilot facts, as of October 2026. It's about the coding agent, not Copilot code review, which is a separate feature.</p>
<h2>What the Copilot agent does</h2>
<p>According to GitHub's docs, the agent can research a repository, plan changes and implement them in the background, in a temporary cloud environment where it can run tests and linters. You can start it from an issue, a pull request, a chat or the agents panel. It creates a branch, pushes commits and opens a pull request.</p>
<p>GitHub builds solid safeguards around it. The person who asked for the pull request can't approve it. The agent can't approve or merge, and it can only push to its own branch. By default, workflows don't run until a person has reviewed its code.</p>
<p>Its documented limits: it works only with repositories hosted on GitHub, it works on one branch and opens one pull request per task, and each session runs for at most 59 minutes.</p>
<h2>What AI CodeOps does</h2>
<p>AI CodeOps runs AI software-engineering sessions in your browser. Specialised agents (architect, builder, reviewer, tester, security auditor and others) plan the task, write the change, run your tests and review the result. The change then waits at a release gate until your tests pass, the AI review is clear and a person approves it.</p>
<h2>Side by side</h2>
<table>
<thead>
<tr>
<th></th>
<th>Copilot coding agent</th>
<th>AI CodeOps</th>
</tr>
</thead>
<tbody><tr>
<td>Git hosts</td>
<td>Repositories hosted on GitHub</td>
<td>GitHub, GitLab, Bitbucket, Gitea, Forgejo (incl. self-hosted)</td>
</tr>
<tr>
<td>Approvals</td>
<td>Requester can't approve; agent can't approve or merge</td>
<td>Session starter can't cast the approving vote when another approver exists; policies can require two</td>
</tr>
<tr>
<td>Gate</td>
<td>Your branch protection and required checks</td>
<td>Built-in gate combining tests, review findings and approvals; fails closed</td>
</tr>
<tr>
<td>Evidence</td>
<td>GitHub history</td>
<td>Signed evidence pack per change</td>
</tr>
<tr>
<td>Individual pricing</td>
<td>Copilot Pro $10/mo, Pro+ $39/mo, Max $100/mo (not in Free)</td>
<td>Free during the open beta</td>
</tr>
<tr>
<td>Org pricing</td>
<td>Business $19/seat, Enterprise $39/seat; admin must enable the agent</td>
<td>Enterprise per seat, through sales</td>
</tr>
<tr>
<td>Where it runs</td>
<td>GitHub.com, supported IDEs, CLI</td>
<td>Browser only (no IDE extension or CLI)</td>
</tr>
</tbody></table>
<h2>When Copilot is the better choice</h2>
<ul>
<li>Your code is all on GitHub and you already pay for Copilot.</li>
<li>You want the smallest change to your tooling, with no second product to adopt.</li>
<li>You like GitHub's default safeguards on agent pull requests.</li>
<li>Your developers already use Copilot in the editor.</li>
</ul>
<h2>When AI CodeOps fits</h2>
<ul>
<li>Your code lives on GitLab, Bitbucket, Gitea or Forgejo, or across several hosts.</li>
<li>You want several agents to review each change before a person sees it.</li>
<li>You want one gate that covers tests, findings and approvals together, with signed evidence for each change.</li>
<li>You need spend control: caps per workspace and per workflow, cost per session, model tiers, or your own provider key.</li>
</ul>
<h2>How to decide</h2>
<p>If your code is on GitHub and Copilot is already in place, try the Copilot agent first, since it costs you the least to adopt. If you need other Git hosts, a gate with signed evidence, or per-workflow spend caps, run AI CodeOps on the same repository and compare.</p>
<hr />
<p>Full comparison with sources: <a href="https://aicodeops.dev/compare/aicodeops-vs-copilot-agent">aicodeops.dev/compare/aicodeops-vs-copilot-agent</a></p>
<p>💚 AI CodeOps is <strong>free forever for non-commercial open-source projects</strong>: <a href="https://aicodeops.dev/pricing/open-source">apply here</a>.</p>
<p><em>Originally published on <a href="https://medium.com/@aicodeops/ai-codeops-vs-github-copilots-coding-agent-when-each-one-fits-3fb7583efcc0">Medium</a>. Drafted with AI assistance and edited by the AI CodeOps team. Copilot details are from GitHub's documentation as of October 2026 and may change.</em></p>
]]></content:encoded></item><item><title><![CDATA[AI Coding Agents Beyond GitHub: GitLab, Bitbucket, Gitea and Forgejo]]></title><description><![CDATA[Most AI coding agents assume your code lives on GitHub. A lot of it doesn't. Here's what it takes to run gated AI changes on the Git host you already use…]]></description><link>https://aicodeops.hashnode.dev/ai-coding-agents-beyond-github-gitlab-bitbucket-gitea-and-forgejo</link><guid isPermaLink="true">https://aicodeops.hashnode.dev/ai-coding-agents-beyond-github-gitlab-bitbucket-gitea-and-forgejo</guid><category><![CDATA[GitLab]]></category><category><![CDATA[self-hosted]]></category><category><![CDATA[AI]]></category><category><![CDATA[Devops]]></category><dc:creator><![CDATA[AI CodeOps]]></dc:creator><pubDate>Wed, 04 Nov 2026 19:48:45 GMT</pubDate><content:encoded><![CDATA[<p><em>Most AI coding agents assume your code lives on GitHub. A lot of it doesn't. Here's what it takes to run gated AI changes on the Git host you already use.</em></p>
<p>If you read the docs of most AI coding agents closely, one line keeps showing up: works with repositories hosted on GitHub. That's a reasonable place to start. GitHub is huge.</p>
<p>But plenty of teams aren't there. Enterprises run self-managed GitLab. Agencies live in Bitbucket. Privacy-minded teams and a growing slice of open source run Gitea or Forgejo on their own servers. For them, "just use the agent" means moving their code first, which usually means not using the agent.</p>
<p>We built AI CodeOps to work where the code already is.</p>
<h2>One workflow, five Git hosts</h2>
<p>AI CodeOps connects to <strong>GitHub, GitLab, Bitbucket, Gitea and Forgejo</strong>. The flow is the same on each:</p>
<ol>
<li><strong>Connect once.</strong> Use OAuth for the hosted services, or a personal access token for your own server. For a self-hosted GitLab, Gitea or Forgejo, you enter the server's public https address and paste a token</li>
<li><strong>Describe a change in the browser.</strong> Agents plan it, write it, review it and run the project's own tests in a sandbox</li>
<li><strong>Get a pull request on your host.</strong> When the change passes the release gate, AI CodeOps pushes a branch named <code>codeops/run-&lt;id&gt;</code> and opens a pull request (a merge request on GitLab) into the default branch</li>
</ol>
<p>A team that uses more than one host can run all of them from one workspace.</p>
<h2>What it does, and what it doesn't</h2>
<p>For teams that own their tooling, the second list matters as much as the first. On Gitea and Forgejo, for example, AI CodeOps:</p>
<ul>
<li><strong>Does</strong> list the repositories, branches, files and pull requests the connected account can see</li>
<li><strong>Does</strong> push a branch and open a pull request, with commits authored as "AI CodeOps"</li>
<li><strong>Doesn't</strong> need admin access. An account that can read the repository, push a branch and open pull requests is enough</li>
<li><strong>Doesn't</strong> install webhooks, post commit statuses or comment on your pull requests</li>
<li><strong>Never</strong> pushes to your default branch directly</li>
</ul>
<p>Tokens are encrypted at rest and never written into a repository's Git configuration. To remove access, disconnect in AI CodeOps or revoke the token on your server.</p>
<h2>The gate goes with you</h2>
<p>The point isn't only that the agent can reach your host. It's that the same rules apply there. A change opens a pull request only when your tests passed on that exact version, the AI review of the real diff has no open high or critical findings, and a person approved it. If a check errors, the gate fails closed.</p>
<p>A pull request opened by AI CodeOps can be merged from the console only after the release gate passes again. You can also merge it on your host as usual, and if you want those merges gated too, your CI can ask the gate for a verdict through an API and fail the job on a "no".</p>
<h2>A note for Codeberg users</h2>
<p>Codeberg runs Forgejo, so the connection works with <code>https://codeberg.org</code> and a personal access token. But read Codeberg's Terms of Use first: they don't allow projects that mostly consist of code written by generative AI tools. That's their call, and worth respecting.</p>
<h2>Try it on your host</h2>
<p>AI CodeOps runs in the browser, with nothing to install. It's free during the open beta, and <strong>free forever for non-commercial open-source projects</strong>.</p>
<ul>
<li>Integrations: <a href="https://aicodeops.dev/integrations">aicodeops.dev/integrations</a></li>
<li>Open source program: <a href="https://aicodeops.dev/pricing/open-source">aicodeops.dev/pricing/open-source</a></li>
</ul>
<p><em>Drafted with AI assistance and edited by the AI CodeOps team.</em></p>
]]></content:encoded></item><item><title><![CDATA[Our AI's Security Audit Flagged a Bug We Never Asked It to Fix]]></title><description><![CDATA[We gave a set of AI agents a small, realistic task on a demo shopping cart: discount codes now come from user input, so validate them. Trim whitespace…]]></description><link>https://aicodeops.hashnode.dev/our-ai-s-security-audit-flagged-a-bug-we-never-asked-it-to-fix</link><guid isPermaLink="true">https://aicodeops.hashnode.dev/our-ai-s-security-audit-flagged-a-bug-we-never-asked-it-to-fix</guid><category><![CDATA[AI]]></category><category><![CDATA[Security]]></category><category><![CDATA[DevSecOps]]></category><category><![CDATA[code review]]></category><dc:creator><![CDATA[AI CodeOps]]></dc:creator><pubDate>Wed, 04 Nov 2026 19:47:39 GMT</pubDate><content:encoded><![CDATA[<p>We gave a set of AI agents a small, realistic task on a demo shopping cart: discount codes now come from user input, so validate them. Trim whitespace, uppercase, letters and digits only, 20 characters max, and reject anything else before it reaches the totals. Add tests.</p>
<p>We ran it through a Security-Sensitive Change workflow: five agents in a row. One scopes the change, one analyses the risk, one implements, one audits the diff, and one validates the result. The whole run took about 35 seconds and cost under 20 cents.</p>
<p>The implementation did what we asked. The diff added a <code>validateDiscountCode</code> helper that trims, uppercases, checks the pattern and length, and throws on anything else. Tests covered valid codes, illegal characters, long codes and unknown codes.</p>
<p>Then the audit step came back with four findings. Three were minor. One was marked HIGH:</p>
<blockquote>
<p>Unvalidated <code>discountPercent</code> parameter allows arbitrary discount values.</p>
</blockquote>
<p>The cart's older <code>total()</code> function still accepted a raw <code>discountPercent</code> option. We had asked the agents to lock down the new input path, and they did. But the old path was still wide open: a caller could pass 100, or 250, and get a free cart or a negative total. Nobody had asked about it. The auditor found it anyway, because it was reading the code around the change, not just the change.</p>
<p><strong>The gate held.</strong> Because a HIGH finding was open, the change was not release-ready. It could not become a pull request until the finding was fixed or a person signed off on it. One click on Fix sends the finding back to an agent as a new task.</p>
<h2>Three takeaways</h2>
<ol>
<li><strong>Audit the code around the change, not just the diff lines.</strong> The most dangerous bugs were next to what we changed, not in it.</li>
<li><strong>A finding needs teeth.</strong> If a reviewer can flag a HIGH issue and the change still merges, the review is advice. Tie open high or critical findings to a merge block.</li>
<li><strong>Scope creep is good when it's a finding, not a commit.</strong> The auditor didn't silently "fix" the extra issue inside our change. It reported it, so a person decides.</li>
</ol>
<p>We recorded runs like this as short tutorials on our YouTube channel: <a href="https://www.youtube.com/@AICodeOps">https://www.youtube.com/@AICodeOps</a></p>
<p>AI CodeOps is free during the open beta and free forever for non-commercial open source: <a href="https://aicodeops.dev">https://aicodeops.dev</a></p>
]]></content:encoded></item><item><title><![CDATA[How to Gate AI-Written Pull Requests in GitHub Actions and GitLab CI]]></title><description><![CDATA[AI coding agents open pull requests faster than teams can review them. Branch protection helps, but a green CI run only tells you the build passed. It…]]></description><link>https://aicodeops.hashnode.dev/how-to-gate-ai-written-pull-requests-in-github-actions-and-gitlab-ci</link><guid isPermaLink="true">https://aicodeops.hashnode.dev/how-to-gate-ai-written-pull-requests-in-github-actions-and-gitlab-ci</guid><category><![CDATA[Devops]]></category><category><![CDATA[github-actions]]></category><category><![CDATA[GitLab]]></category><category><![CDATA[ci-cd]]></category><dc:creator><![CDATA[AI CodeOps]]></dc:creator><pubDate>Wed, 04 Nov 2026 19:46:38 GMT</pubDate><content:encoded><![CDATA[<p>AI coding agents open pull requests faster than teams can review them. Branch protection helps, but a green CI run only tells you the build passed. It doesn't tell you whether the change was reviewed, whether serious findings are still open, or whether the tests ran on the version you're about to merge.</p>
<p>This tutorial adds one required check to your pipeline. It asks the AI CodeOps release gate whether a pull request may ship, prints the reasons, and fails the job when the answer is no.</p>
<h2>What the gate checks</h2>
<p>The release gate looks at every AI CodeOps session that touched the change and applies the same rules as the console:</p>
<ul>
<li>The project's tests passed, on the version being merged</li>
<li>The AI review completed and no blocking findings are open (high or critical by default)</li>
<li>Approvals are in place</li>
</ul>
<p>You can make it stricter per pipeline: a coverage floor, required workflows, disallowed licenses from the project's SBOM, or a requirement that the change already deployed to an environment such as staging.</p>
<p>Two details matter for CI:</p>
<ol>
<li><strong>A denial is still HTTP 200.</strong> You read the <code>allowed</code> field, not the status code.</li>
<li><strong>It fails closed.</strong> If the evaluation itself fails, you get <code>allowed: false</code> with the summary "Evaluation failed". A change with no matching sessions is also denied.</li>
</ol>
<h2>Step 1: Create an API key</h2>
<p>In the console, open <strong>Configure → API Keys</strong> and create a key. The secret starts with <code>sk-</code> and is shown once. The key acts as the member who created it, so create it from an account whose role can read the workspace.</p>
<p>Store it as a CI secret named <code>AICODEOPS_API_KEY</code>.</p>
<h2>Step 2: GitHub Actions</h2>
<p>AI CodeOps opens its pull requests on branches named <code>codeops/run-&lt;id&gt;</code>. Scoping the job to those branches means pull requests written by people aren't affected.</p>
<pre><code class="language-yaml">{% raw %}
name: AI CodeOps release gate

on:
  pull_request:
    types: [opened, synchronize, reopened, ready_for_review]

jobs:
  release-gate:
    if: startsWith(github.head_ref, 'codeops/run-')
    runs-on: ubuntu-latest
    steps:
      - name: Ask the release gate
        env:
          AICODEOPS_API_KEY: ${{ secrets.AICODEOPS_API_KEY }}
          PR_URL: ${{ github.event.pull_request.html_url }}
        run: |
          body=$(jq -n --arg pr "$PR_URL" '{pullRequestURL: $pr, minCoveragePct: 80}')
          verdict=$(curl -sSf -X POST "https://console.aicodeops.dev/api/release/check" \
            -H "Authorization: Bearer $AICODEOPS_API_KEY" \
            -H "Content-Type: application/json" \
            -d "$body")
          echo "$verdict" | jq -r '.summary'
          echo "$verdict" | jq -r '.reasons[]?'
          test "$(echo "$verdict" | jq -r '.allowed')" = "true"
{% endraw %}
</code></pre>
<p><code>curl -f</code> makes the job fail on an auth or network error, and the last line fails it on a denial. Either way, nothing gets through by accident.</p>
<p>Then make it required: <strong>Settings → Rules → Rulesets</strong> (or branch protection) on your main branch, and add <code>release-gate</code> as a required status check. When the job is skipped for a human pull request, GitHub treats the skipped check as passing.</p>
<h2>Step 3: GitLab CI</h2>
<p>The same idea in <code>.gitlab-ci.yml</code>. The <code>pullRequestURL</code> field takes your merge request URL as it appears on GitLab.</p>
<pre><code class="language-yaml">release-gate:
  stage: test
  image: alpine:3.20
  rules:
    - if: '$CI_PIPELINE_SOURCE == "merge_request_event" &amp;&amp; $CI_MERGE_REQUEST_SOURCE_BRANCH_NAME =~ /^codeops\/run-/'
  script:
    - apk add --no-cache curl jq
    - MR_URL="$CI_PROJECT_URL/-/merge_requests/$CI_MERGE_REQUEST_IID"
    - BODY=$(jq -n --arg pr "$MR_URL" '{pullRequestURL: $pr}')
    - &gt;
      VERDICT=$(curl -sSf -X POST "https://console.aicodeops.dev/api/release/check"
      -H "Authorization: Bearer $AICODEOPS_API_KEY"
      -H "Content-Type: application/json"
      -d "$BODY")
    - echo "$VERDICT" | jq -r '.summary, (.reasons[]?)'
    - test "$(echo "$VERDICT" | jq -r '.allowed')" = "true"
</code></pre>
<p>Add <code>AICODEOPS_API_KEY</code> under <strong>Settings → CI/CD → Variables</strong> (masked), and turn on <strong>Pipelines must succeed</strong> under <strong>Settings → Merge requests</strong>.</p>
<h2>Step 4: Tune it</h2>
<p>All of these go in the request body:</p>
<table>
<thead>
<tr>
<th>Field</th>
<th>What it does</th>
<th>Default</th>
</tr>
</thead>
<tbody><tr>
<td><code>blockingSeverity</code></td>
<td>Open findings at or above this block</td>
<td><code>high</code></td>
</tr>
<tr>
<td><code>blockOnTestFailure</code></td>
<td>Failing tests block</td>
<td><code>true</code></td>
</tr>
<tr>
<td><code>minCoveragePct</code></td>
<td>Coverage floor for the latest test run</td>
<td>not gated</td>
</tr>
<tr>
<td><code>requiredWorkflows</code></td>
<td>Workflows that must have completed</td>
<td>none</td>
</tr>
<tr>
<td><code>disallowedLicenses</code></td>
<td>License ids that must not be in the SBOM</td>
<td>none</td>
</tr>
<tr>
<td><code>requireDeployedTo</code></td>
<td>An environment the change must already be deployed to</td>
<td>none</td>
</tr>
<tr>
<td><code>blockOnInFlight</code></td>
<td>Deny while a session is still running</td>
<td><code>false</code></td>
</tr>
</tbody></table>
<p>A stricter release branch might send <code>"blockingSeverity": "medium", "requireDeployedTo": "staging"</code>.</p>
<h2>Good to know</h2>
<ul>
<li>The workspace limit is 60 checks a minute. A <code>429</code> response includes <code>Retry-After</code>.</li>
<li>The API is deliberately small during the open beta: this endpoint, plus public keys for verifying evidence packs.</li>
<li>The same check is in the console under <strong>Review &amp; Gate → Release gate</strong>, if you want to see a verdict before wiring up CI.</li>
</ul>
<p>Full reference: <a href="https://aicodeops.dev/docs/api/release-check">https://aicodeops.dev/docs/api/release-check</a></p>
<p><em>Drafted with AI assistance and edited by the AI CodeOps team.</em></p>
]]></content:encoded></item><item><title><![CDATA[AI Code Review for Gitea and Forgejo: What Works Today]]></title><description><![CDATA[Most AI code review tools are built for GitHub first, then GitLab and Bitbucket. If your team runs Gitea or Forgejo, often self-hosted for cost or control…]]></description><link>https://aicodeops.hashnode.dev/ai-code-review-for-gitea-and-forgejo-what-works-today</link><guid isPermaLink="true">https://aicodeops.hashnode.dev/ai-code-review-for-gitea-and-forgejo-what-works-today</guid><category><![CDATA[AI]]></category><category><![CDATA[Devops]]></category><category><![CDATA[code review]]></category><category><![CDATA[self-hosted]]></category><dc:creator><![CDATA[AI CodeOps]]></dc:creator><pubDate>Wed, 04 Nov 2026 19:44:06 GMT</pubDate><content:encoded><![CDATA[<p>Most AI code review tools are built for GitHub first, then GitLab and Bitbucket. If your team runs Gitea or Forgejo, often self-hosted for cost or control, the list gets short fast.</p>
<p>For example, CodeRabbit's <a href="https://docs.coderabbit.ai/platforms/overview">platform docs</a> list GitHub, GitLab, Bitbucket and Azure DevOps (cloud and self-hosted variants), with no Gitea or Forgejo support as of November 2026.</p>
<p>AI CodeOps works with Gitea and Forgejo, including self-hosted servers, the same way it works with GitHub and GitLab: you connect the server with a token scoped to the repositories you choose, and AI agents plan, build, review and test changes on your real repository.</p>
<h2>What you get on Gitea or Forgejo</h2>
<ul>
<li><strong>AI review of the real diff</strong>, with findings sorted by severity</li>
<li><strong>Your own tests</strong>, run in a sandbox on the exact version of the change</li>
<li><strong>A release gate</strong>: no pull request until the tests pass, the review has no open high or critical findings, and a person approves</li>
<li><strong>A release-check API</strong> your CI can call on any PR or commit, so direct merges are covered too</li>
</ul>
<p>Free during the open beta, and free forever for non-commercial open-source projects: <a href="https://aicodeops.dev">https://aicodeops.dev</a></p>
]]></content:encoded></item></channel></rss>