Issue Viewer

AI Workflow Without Losing Your Mind


Michal Franc ยท 2026

This is me for the past few months

[ working.gif ]

Working with agents intensively...

There is definitely a visible change since Opus 4.6

๐ŸŽฎ Game (Godot)

Hobby project โ€” roguelike / RPG, worked on evenings and weekends.

mfranc.com/game


๐Ÿธ Toadie

Personal assistant powered by Claude Code โ€” available from phone, watch, voice.

mfranc.com/blog/toadie


Working with 5โ€“6 agents simultaneously is...

context switching

re-explaining the same things over and over

keeping track of what each agent is doing

fixing what the previous agent broke

wondering if any of it is actually coherent


Brain Fry

This was the flow for a while

Evolution

GitHub Issues

API-dependent ยท online only ยท overkill for hobby projects

โ†“

Markdown files ยท locally hosted

Plain .md files with YAML frontmatter ยท no API ยท no internet ยท full control

issues/ combat/ 42.md pathfinding.md toadie/ watch-support.md voice-commands.md

each file = one issue ยท git tracked ยท agent readable

Agents could just modify the .md files directly โ€” no API, no tooling, just plain text.

But this created new problems

No control

Agents could modify any .md file freely โ€” change status, overwrite content, mark things done without actually doing them.

Still babysitting

I still had to watch every agent session. Without guardrails, mistakes were silent and hard to catch.

Power without structure = chaos

The freedom that made agents useful also made them unpredictable.

How to add control?

Well... skills. Sure thing.

Claude Code Skills

Reusable prompt templates that agents can invoke โ€” with defined inputs, outputs, and guardrails built in.

Instead of free-form file edits, agents call a skill. The skill enforces the rules.


But just telling agents how to nicely modify .md files is not enough.

But... skills are non-deterministic

The bigger the context, the less predictable the agent gets.

Instruction overload

LLMs reliably follow ~150โ€“200 instructions.

Claude Code's system prompt already uses ~50.

Every instruction you add competes for attention โ€” and compliance decreases uniformly as count grows.

Lost in the Middle

LLMs have a U-shaped attention curve โ€” they recall the beginning and end well, but miss the middle.

Your context file sits at the start โ€” make every line count.

More instructions โ‰  more control.

Is there a better way?

What if we stop fighting non-determinism โ€” and contain it instead?

Mix

non-deterministic LLMs

+

deterministically behaving tools


Enter issue-cli

issue-cli in action

$ issue-cli done pathfinding โœ— unchecked items remain: [ ] add unit tests Complete checkboxes before marking done.
$ issue-cli check pathfinding "add unit tests" โœ“ checked off $ issue-cli done pathfinding โœ“ status โ†’ done ยท assignee cleared
$ issue-cli transition pathfinding --to testing โœ“ status โ†’ testing โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ” Next steps: 1. Run automated tests 2. Add ## Test Plan section (### Automated / ### Manual) 3. issue-cli comment pathfinding --text "tests: all passing" 4. issue-cli transition pathfinding --to documentation โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”

But why hardcode the rules?

Projects define their own workflow โ€” validations, prompts, side effects โ€” in workflow.yaml

statuses: - name: "in design" prompt: | Turn the problem into checklists, assumptions, and open questions. Ask for backlog approval before attempting the transition. transitions: - from: "in design" to: "backlog" actions: - type: "validate" rule: "has_checkboxes" - type: "append_section" title: "Acceptance Criteria"

Per-status prompts

Each status tells the agent what to do โ€” injected automatically at dispatch time.

Transition validations

Must have checkboxes? Body not empty? Blocks the move if rules aren't met.

Side effects

Auto-append sections, clear assignee, inject checklists on transition.

Workflow Designer

Managing statuses, transitions, validations, and side effects in YAML by hand gets painful.

Example flow

๐Ÿ’ก
idea
๐Ÿ‘ค I have an idea
๐Ÿค–
in design
agent clarifies,
writes checkboxes
๐Ÿ‘ค
backlog
I approve design,
agent unclaimed
๐Ÿค–
in progress
agent implements,
checks off items
๐Ÿค–
testing
agent writes
test plan
๐Ÿ‘ค
human-testing
I play-test
the feature
๐Ÿค–
documentation
agent updates
the docs
โœ…
done
shipped
๐Ÿค– agent ๐Ÿ‘ค human approves / verifies

Building Blocks

Base Prompt

Injected to every agent session. Defines who the agent is, project context, and global rules.

Loaded from CLAUDE.md

Status Prompt

Injected on each status. Tells the agent exactly what to do at this stage of the workflow.

Defined in workflow.yaml

Inject Prompt

Optional extra context injected at dispatch โ€” issue body, metadata, related issues.

Per-issue override

Validate

Blocks a transition if conditions aren't met โ€” has_checkboxes, body_not_empty, assignee set.

Hard stops, not suggestions

Append Sections

Automatically adds structured sections to the issue on transition โ€” checklists, test plans, docs stubs.

Side effect on transition

Human Approval

Certain statuses require a human to approve before the agent can proceed. Agent waits.

backlog, human-testing

RogueTech examples

Real issue in the project:

title: "stress volume system redesign" status: in design system: MechLab version: 0.1 Replace slots+stress model with a visible internal-layout system. Hulls define shaped build space. Items occupy rectangular footprints (1x2, 2x2, 2x3). - [ ] Design layout grid system - [ ] Hull defines internal sections - [ ] Weapons have footprint costs - [ ] Mount/arc choices expand footprint

Status prompt injected to agent:

# in design prompt Review the relevant docs, code, and existing content before proposing changes. Turn requirements into explicit checklists. Surface assumptions, risks, edge cases, and required human input clearly. Keep the design focused on what will actually be implemented.

Validation on transition โ†’ backlog:

- type: validate rule: has_checkboxes - type: validate rule: body_not_empty

Base Prompt โ€” issue-cli process

== AI-Native Project Viewer == You are working with a markdown-based issue tracker. Issues are .md files in issues/<System>/ directories. == Rules == - Always use 'start' to begin work - Never skip statuses - Always update docs before marking done - Use checkboxes [x] to track subtasks == IMPORTANT: Command output == - NEVER suppress stderr (no 2>/dev/null) - ALWAYS read the full output โ€” it contains next steps - If a command fails, fix it, don't retry
== When you pick up an issue == 1. issue-cli start <slug> claims it, moves to in-progress 2. Do the work, check off items 3. Add ## Test Plan section 4. issue-cli transition <slug> --to testing 5. issue-cli comment <slug> "tests: ..." 6. issue-cli transition <slug> --to docs 7. issue-cli done <slug> == Quick start == issue-cli next --version 0.1 issue-cli start <slug> issue-cli done <slug>

Agent runs issue-cli process first โ€” sets rules, workflow, and step-by-step guidance for the whole session.

Three Prompts, Three Roles

Base Prompt โ€” always injected
Who the agent is, how the project works, global rules, tooling conventions. Sets the foundation for every session regardless of what issue is being worked on.
issue-cli process
Status Prompt โ€” injected per status
What to do right now at this stage. Changes with every status transition. Keeps the agent focused on the current phase without re-explaining the whole workflow.
defined in workflow.yaml ยท injected at dispatch
Inject Prompt โ€” defined in workflow.yaml
Injects additional actions or instructions at a specific transition point. Used to tell the agent to do something extra โ€” append a section, run a check, follow a specific pattern for this transition.
type: inject_prompt ยท fires on transition

Base Workflow vs Subsystem Overlay

Base Workflow

Defines statuses, transitions, validations, and prompts for the whole project. Every issue follows this by default.

statuses: idea โ†’ in design โ†’ backlog โ†’ in progress โ†’ testing โ†’ human-testing โ†’ done transitions: - from: backlog โ†’ in progress validate: has_assignee validate: human_approved

Subsystem Overlay

Per-system overrides that add extra instructions for specific domains โ€” injected on top of the base workflow.

systems: Combat: transitions: - from: backlog โ†’ in progress inject_prompt: "Build a reproducible shooter-vs-target scenario and validate outcomes statistically." Campaign: transitions: - from: in design โ†’ backlog inject_prompt: "Identify ALL code paths that create or modify UnitData..."

Base handles the generic flow ยท subsystem overlays inject domain expertise at the right moment

Composed, Just-in-Time Prompt

Every agent dispatch assembles a fresh, precise context from its parts.

Base Prompt
who, what, rules
+
Status Prompt
what to do now
+
Subsystem Overlay
domain expertise
+
Inject Prompt
extra actions
+
Issue Content
the actual task
โ†“
Composed Context
Precise ยท minimal ยท assembled at dispatch time
Agent knows exactly what to do, in this project, at this status, for this issue.

No re-explaining. No guessing. No babysitting.

Validations & Human Approval

Not just rules โ€” a signal to the agent that something went wrong.

Validations

Block a transition when the agent missed something โ€” no checkboxes, empty body, test plan absent.

The CLI returns a clear error. The agent reads it, self-corrects, and retries. No human needed.

Human Approval

Hard stops at key gates โ€” backlog, human-testing. Agent cannot proceed until a human explicitly approves in the UI.

Catches non-deterministic drift before it compounds.

Why this matters

LLMs are non-deterministic. They will occasionally skip steps, hallucinate progress, or mark things done prematurely.

Validations and approvals are checkpoints that surface undeterministic behavior before it causes damage โ€” without requiring you to watch every session.

The system catches the agent. Not you.

But wait... there is more

If agents already use issue-cli as their primary tool โ€” why not extend it?

๐Ÿ› Bug Reports

Agent hits an unexpected failure during implementation? It files a bug issue itself.

issue-cli report-bug "description"

No context lost. Filed with full context while it's fresh.

๐Ÿ““ Retros

Agent reflects on what went wrong, what was unclear, what slowed it down โ€” and writes it up.

issue-cli retrospective <slug> --body "..."

Structured feedback loop from the agent back to you.


The agent isn't just a worker โ€” it becomes a participant in the workflow.

A Self-Reinforcing System

A bot reviews retros and bugs โ€” and feeds findings back into the workflow.

๐Ÿค–
Agent works
implements issues
โ†’
๐Ÿ› ๐Ÿ““
Files bugs & retros
via issue-cli
โ†’
๐Ÿค–
Bot reviews
reads retros & bugs
โ†’
โš™๏ธ
Updates workflow
prompts, validations
โ†’
๐Ÿค–
Agent improves
better context next time

The system gets smarter over time โ€” without you manually tuning it.

Real Retros from RogueTech

stress-volume-system-redesign idea ยท 2026-04-07

Tooling friction: issue-cli start is listed as step 1 in generic instructions, but it cannot work from idea status โ€” the workflow should branch earlier for idea issues and direct the agent to gather clarification first.

weapon-mount-types-with-firing-arcs in progress ยท Equipment

Subsystem gap: Equipment guidance should explicitly direct agents to current arc/stress/chassis seams and existing structure family files earlier so design work starts from the real implementation surface.

Tooling bug: issue-cli check reported success for multiple items but issue-cli checklist remained stale immediately afterward โ€” hard to know when status is truly ready for transition.

Agent surfaces its own blind spots โ†’ feeds directly into workflow and tooling improvements.

issue-cli โ€” Agent First

Designed for AI consumption. If we notice agents want to do things a certain way โ€” we just add it and get out of the way.

Aliases โ€” because agents use natural names:

context <slug> alias: show โ†’ agents naturally say "show me the issue" start <slug> *** USE THIS TO BEGIN WORK *** claims + transitions in one command โ†’ agents kept doing claim + transition separately, so we merged it
check <slug> "text match" โ†’ agents would grep for checkbox text and edit .md files directly, so we gave them a proper command

AI-native design principles:

Every output contains next steps

Commands tell the agent exactly what to do next. No silence after success.

Errors are actionable

Failures explain why and what to fix โ€” not just exit code 1.

Never get in the way

If an agent finds a workaround, that workaround becomes a command.

This tool will likely end up with tens of commands doing similar things in slightly different ways โ€” and that's completely fine.

Launch agents from UI

Approve an issue, pick Claude or Codex โ€” spins up a terminal, pastes the composed prompt, agent starts immediately.