Agentic Coding & Git

From ticket to pull request

Seven git providers, a git server of Trakr's own, seven coding agents and a run pipeline that verifies commits were actually made before it pushes anything. Gated at tenant and organisation level, off until you decide otherwise.

Included

Git, agents and review in one place

  • Seven providers, plus Trakr's own JGit server
  • Read-only repository browsing for any project member
  • Pull requests, releases, tags, contributors, commit graph
  • Seven coding agents behind one interface
  • A validation pass before any agent starts
  • An in-app Monaco editor that can commit back
You control

Per project, in settings

  • Base branch, branch prefix and name pattern
  • Protected branches and required checks
  • Story-branch or release-train branching
  • PR review or auto-merge on green
  • Manual or agent conflict resolution
  • Run timeout, budget per run and per day
Deliberately gated

Off by default, at four levels

  • Agentic coding needs tenant and organisation
  • An org can only opt in after its tenant has
  • The internal git server has a platform kill-switch
  • Every provider has a superadmin switch too
  • A coding action needs an AI-allowed role
Capability
Integrated Trakr-hosted git JGit · smart-HTTP · local disk
External provider Forgejo · Gitea · GitHub · GitLab · Codeberg · Gogs
Browse tree, commits, diffs, branches
Included
Included
Pull requests — open, comment, merge, close
First-class records
Via provider API
Releases — create, edit, delete, upload assets
Full read/write
Read-only
Runs with no outbound HTTP
Entirely local
Calls the provider API
Clone authentication
Per-project token as the Basic-auth username, path verified, constant-time compare
Provider PAT, verified before binding, encrypted at rest
Webhook registration
Native
Registered automatically on bind
Agent runs, branches and PR delivery
Included
Included
In-app Monaco IDE with commit-back
Included
Included
Two-way issue mirroring
Not applicable — the tickets already live here
Forgejo family & GitLab
Legend Included Limited by the provider Not applicable
Git providerIntegratedTrakr-hosted, JGit
Git providerForgejoSelf-hosted
Git providerGiteaForgejo API shape
Git providerGitHubIncl. Enterprise
Git providerGitLabSelf-hosted or SaaS
Git providerCodebergForgejo API shape
Git providerGogsForgejo API shape
AgentClaude CodeHeadless, session id & cost parsed
AgentOpenCodeCLI-driven
AgentMistralTool loop implemented in Trakr
AgentAiderCLI-driven
AgentClineCLI-driven
AgentOpenHandsCLI-driven
AgentMoonCLI-driven
01 / Verification

The pipeline checks the agent did something

Between running the agent and pushing, the pipeline verifies that new commits were actually made. An agent that talks convincingly and writes nothing produces a failed run, not an empty branch and a hopeful pull request.

Runs are database queue rows, claimed by a worker polling every fifteen seconds under a sixty-minute lease and capped for concurrency. Each records the agent, branch, session id, cost, PR URL, error, attempt count, log URI and timings, alongside an event timeline of progress, file changes, test results, blockers and the final summary.

02 / The BLOCKED protocol

Asking a human is a state, not a failure

Any agent output line beginning BLOCKED: pauses the run and raises the question to a person. The handoff moves to BLOCKED, waits, and can be unblocked with an answer — resuming through the agent's own resume mechanism where one exists.

This is the difference between an agent that stops when it is uncertain and one that guesses. The lifecycle treats the first as normal behaviour.

03 / Rails on the loop

Mistral gets a tool loop Trakr wrote itself

No Mistral coding CLI exists, so Trakr implements the tool-calling loop directly — and having written it, it fences it in: path confinement inside the working directory, a command whitelist of git, mvn and ./mvnw only, an iteration cap of 40 and a hard deadline.

Claude Code's allowed tools default to read, edit, write and the same three command families. The default is not "full shell access and good luck".

04 / Off until you say so

Four gates, all of them closed initially

Agentic coding is gated at tenant level and organisation level and is off by default; an organisation can only opt in once its tenant has. Organisation-level overrides exist for default agent, run timeout and budgets, and project values win over them.

The internal git server needs a platform kill-switch, a superadmin runtime toggle, the tenant flag and the organisation flag. Each provider carries a superadmin switch ANDed with an organisation switch. And any coding action additionally requires an AI-allowed role.

Handoff: DRAFT → USER_VALIDATED → VALIDATING → NEEDS_REFINEMENT / READY_FOR_DEV → IN_PROGRESS → BLOCKED → IN_REVIEW → DONE / FAILED

The validation agent is a single model call that judges whether a ticket is ready. It returns an approval verdict, blocking issues, refined acceptance criteria, an estimated complexity of S, M, L or XL, and a list of suggested files — all persisted on the handoff, so the refinement conversation has somewhere to live.

  1. Draft the handoff. The ticket, its acceptance criteria and the project's baseline context become the brief.
  2. A human validates it. Nothing reaches an agent that a person has not looked at first.
  3. The validation agent reviews it. Approved goes to READY_FOR_DEV; blocking issues send it to NEEDS_REFINEMENT with the reasons attached.
  4. The run is queued. A worker claims the row with a sixty-minute lease, under a concurrency cap.
  5. Branch, clone, run. The branch is created through the git API using the project's prefix and name pattern, cloned locally, and the agent runs under a hard timeout.
  6. Verify, push, open a PR. New commits are confirmed to exist, the branch is pushed, and a pull request is opened with a title and body drawn from the agent's summary.
  7. Merge, or don't. Under PR review a human merges. Under auto-merge-on-green Trakr merges once the required checks pass, orchestrated from the webhook listener.
  8. Review in-app if you want to. The Monaco editor opens on the agent branch: changed files, diffs, the tree, working and base versions of any file, and a commit-back with base-SHA optimistic concurrency.

Branching & delivery

How work leaves the agent and reaches your base branch
  • Base branch main by default
  • Branch prefix trakr/ by default
  • Branch name pattern {prefix}{ticketKey}-{slug}
  • Slug length 40 characters max
  • Branching mode STORY_BRANCH · RELEASE_TRAIN
  • Merge style Squash by default
  • Other styles merge · rebase · rebase-merge · fast-forward-only
  • Delivery mode PR_REVIEW · AUTO_MERGE_ON_GREEN
  • Conflict resolution MANUAL · AGENT_RESOLVE
  • Delete branch after merge On by default
Release train keeps humans in the loop where it matters.
Under STORY_BRANCH each ticket branches off the base. Under RELEASE_TRAIN tickets branch off a shared integration branch, and the integration-to-base merge stays a human pull request.

Safety, budgets & credentials

What bounds a run before it starts
  • Protected branches Per project list
  • Required checks Per project list
  • Run timeout Per project
  • Budget Per run and per day
  • Default agent Per project, org override
  • Auto-update branch Per project
  • Agent credentials Encrypted, per organisation
  • Credential fallback Host environment variable
  • Inline file limit 5 MB
  • Diff buffer 2 MB
Keys are never returned by the API.
Credential status shows only whether a key exists and where it was resolved from. If nothing resolves, readiness fails fast rather than starting a run that cannot finish.
01 / Direction

Inbound, outbound, or a true mirror

Inbound makes the remote the source of truth, which is what migrating onto Trakr looks like. Outbound makes Trakr the source of truth, which is what migrating off a forge looks like. Both — the default — is a genuine mirror.

Comments, labels and state each toggle independently, with configurable open- and closed-status mapping, a default ticket type for issues arriving from the remote, and a named account that mirrored writes are attributed to.

02 / Not looping

Echoes are dropped, not re-synced

Issues carry a hash over the local field set — summary, description, open/closed state and label names — so a change that came back from the remote is recognised and dropped. Comments, being append-only, use per-comment origin link rows instead.

Triggers are poll (cursor-based, default fifteen minutes, so the remote is only asked for what changed), webhook (HMAC-verified), manual, a full import backfill, and Trakr-side ticket events dispatched after commit and executed asynchronously, so no user write is slowed down or rolled back by the mirror.

Which git providers does Trakr support?

Seven: Trakr's own integrated git server, Forgejo, Gitea, GitHub including GitHub Enterprise, GitLab whether self-hosted or SaaS, Codeberg and Gogs. GitHub, Gitea, Codeberg and Gogs reuse the Forgejo API shape; GitLab has a standalone adapter.

Do I need an external forge at all?

No. Trakr hosts JGit-backed bare repositories on local disk and serves them over its own smart-HTTP endpoint. Provisioning, branches, tags, trees, files, diffs, commits, contributors, commit activity and repository metadata all run locally with no outbound HTTP.

Clone authentication uses a per-project token as the Basic-auth username, with the tenant, organisation and project path verified and a constant-time comparison. For integrated repositories, releases are first-class — a git tag, a database row and downloadable assets — and pull requests are stored records with their own per-project numbers.

What stops an agent from pushing an empty branch?

The pipeline verifies that new commits were actually made before it pushes. End to end: create the branch through the git API, clone it locally, run the agent under a hard timeout, verify the commits exist, push, open a pull request with a title and body from the agent's summary, and optionally auto-merge once required checks pass.

What happens when the agent gets stuck?

Any agent output line beginning with BLOCKED: pauses the run and asks a human. The handoff moves to the BLOCKED state and can be unblocked with an answer, resuming through the agent's own resume mechanism where one exists. It is a state in the lifecycle, not a failure mode.

Is agentic coding switched on by default?

No. It is gated at tenant level and organisation level and is off by default — an organisation can only opt in once its tenant has. The internal git server additionally needs a platform kill-switch, a superadmin runtime toggle, and both the tenant and organisation flags. Every provider has a superadmin switch ANDed with an organisation switch, and a coding action also requires an AI-allowed role.

Can I review and edit the agent's work inside Trakr?

Yes. An in-app Monaco editor works over the ticket's agent branch: list changed files, view the diff, browse the tree, read a file in either its working or base version, edit it and commit back with base-SHA optimistic concurrency so two people cannot silently overwrite each other. The decrypted access token never leaves the service layer.

The tracker that opens the pull request

Git, agents, review and merge policy in one self-hosted system. Gated, budgeted and auditable. Made in Belgium.