Skip to content

Agent: make the issue→PR orchestrator repo-independent and de-branded #63

Description

@MateuszPaulski

Make the autonomous issue→PR orchestrator (.claude/skills/airside-agent + the six
.claude/agents/airside-*.md subagents) generic — repo- and owner-independent, with the
GitHub command surface lifted out of the prose, the airside brand removed, and a clean seam
where a different tracker (Jira) could slot in later. Today the workflow only runs against the
one hardcoded repo, the runbook is hard to read, and GitHub is baked in everywhere.

Status: parking lot — dev-tooling cleanup, not product code. Deferred because the loop works
as-is for the single Airnauts/airside repo; this is about portability and maintainability, not a
missing capability. No ADR until committed (it would supersede the airside-agent design notes in
ADR-0042 / ADR-0043).

What's wrong today

  • Repo/owner are hardcoded, not configured. SKILL.md §Config lists REPO =
    Airnauts/airside and OWNER = MateuszPaulski and literally says "Treat them as constants for
    now; they will move to the top of the file."
    They never moved — Airnauts/airside is inlined in
    ~40 gh api repos/Airnauts/airside/... / gh issue list --repo ... call sites across
    SKILL.md and all six agent files. You cannot point the loop at another repo without a
    find-replace.
  • The airside brand is woven in (~53 places). The idempotency machinery is all branded: the
    issue markers <!-- airside-agent-state/-review/-spec/-note -->, the ack prefix
    🤖 airside-agent:, the top-level ack key <!-- airside-agent-ack:tl-<id> -->, the bot-comment
    disambiguation rule, the pickup label agent, and the skill + six subagent names
    (airside-builder, airside-reviewer, …). The user wants this de-branded to a product-neutral
    namespace.
  • SKILL.md is hard to read. 545 lines / 32 KB of narrative algorithm with gh, gh api graphql, and jq snippets inlined throughout. The orchestration logic and the GitHub mechanics
    are tangled together in one file.
  • GitHub is assumed end-to-endgh CLI, GraphQL review threads, draft PRs, gh pr ready.
    There is no seam to target another service, even though Integrations: Jira is already a
    direction we're considering.
  • Stale legacy references. .claude/agents/airside-triage.md:22,
    airside-spec-author.md:22, and airside-builder.md:31 still tell subagents to "ignore the dead
    link"
    to a now-removed docs/ideas.md / docs/issues.md. Those backlogs were retired (GitHub
    issues are now the sole backlog) — the agents shouldn't mention them at all.

Shape

  1. One config block, referenced everywhere. Actually move REPO, OWNER, PICKUP_LABEL,
    BRANCH_PREFIX, REVIEW_CAP to the top of SKILL.md (as the §Config note already promises) and
    rewrite every call site to read repos/<REPO>/... / --repo <REPO> from it instead of the
    literal. The subagents take REPO/OWNER as inputs already (per the spawn contracts) — make
    them stop hardcoding it too.

  2. Extract the GitHub command surface to its own reference file. Pull the inlined gh /
    gh api graphql / jq snippets out of the narrative into a single
    .claude/skills/airside-agent/references/github.md (or a set of named, copy-pasteable command
    recipes), keyed by orchestrator operation: scan, load-state, terminal-check,
    reconcile-artifacts, post-spec, post-review-note, CI-gate, promote, inline-threads,
    top-level-comments, ack/resolve.
    SKILL.md keeps the algorithm and links to the recipe by name.
    This is also the natural place the provider boundary will fall (see 4).

  3. De-brand to a neutral namespace. Rename the skill, the six subagents, and every marker / ack
    prefix / disambiguation token from airside-* to a product-neutral name (candidates:
    task-agent, issue-agent, code-agent — pick one). This ripples to: the SKILL frontmatter
    name:, the /loop 5m /<name> target, the subagent_type registrations + fallback preamble
    paths .claude/agents/<name>-*.md, and the marker strings. The markers are persisted
    idempotency keys in live issues/PRs
    — any in-flight issue/PR carrying old airside-agent-*
    markers needs either a dual-read back-compat window or a clean cutover after in-flight work
    drains. There's prior art for a wide deprecate-with-pointer rename in ADR-0038
    (the comments→airside rebrand).

  4. A tracker/VCS provider seam — design only, do not implement Jira now. Once the GitHub
    commands live behind the recipe boundary from (2), define the abstract operations the
    orchestrator actually needs — list actionable tasks, read/write structured task state, post a
    threaded comment, open/ready/merge a change request, read review threads
    — so GitHub is one
    implementation and a Jira tracker (+ a VCS host) could be another later. Keep this a documented
    interface in the skill, not new code; it ties into the existing Integrations: Jira direction.
    Switching providers is explicitly out of scope for this issue.

  5. Delete the legacy doc mentions in the three agent files above — drop the "ignore the dead
    link to docs/ideas.md/docs/issues.md" sentences entirely.

Effort: medium — a doc/tooling refactor, no product source touched. Mostly editing
SKILL.md + the six .claude/agents/*.md, plus the agent-type registrations and the /loop
target name. Steps 1, 2, and 5 are low-risk and independently shippable; step 3 (rename) needs the
in-flight-marker migration handled; step 4 is a design write-up that unblocks a future Jira adapter.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    agentPick up this issue for the airside-agent automationenhancementNew feature or requeststate:in-reviewairside-agent: review clean, PR ready for human review

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions