Perslis projects · Jira Monkey
Terminal preview · 0.1.0Every ticket deserves
a second look.
Jira brings the request. Ollama helps read it. You choose the model that drafts the response. Ollama reviews it again, then the work returns to the queue or to a person who can judge it.
$ jira-monkey JIRA MONKEY / terminal preview 01 Read a captured Jira revision 02 Ollama clarifies the request 03 Your selected model drafts a response 04 Ollama reviews the result 05 Retry · Human review · Comment outbox jira-monkey> demo
Illustrative terminal transcript. The bundled demo uses offline fixtures; it does not call a model or Jira.
Why we built it
The ticket is the beginning of the conversation.
A Jira ticket often mixes a desired outcome, a suspected cause and missing context. Sending all of that directly to a coding model can turn an assumption into an implementation plan before anyone has checked it. We wanted a visible loop that keeps the original request present from intake through the final review.
Jira Monkey began inside FortuneWheel, our native mission workbench. Its first job was to convert a captured ticket into a bounded investigation, with explicit source access and retained reports. The terminal companion makes ticket intake, model choice and review routing easier to try. Our longer-term goal is a verified change that can travel back to the ticket with evidence.
The intended loop, made visible
Read. Draft. Review. Decide.
- Jira ticketCapture the site, key, revision, title and description.
- Ollama triageClarify the goal, criteria and missing context.
- Your chosen modelClaude, OpenAI or DeepSeek drafts the proposed response.
- Ollama reviewCompare the response with the original ticket and criteria.
- The next decisionRetry, request a human, or prepare the Jira comment.
The preview runs one queued attempt at a time. A correctable omission can return to the queue with feedback, up to the original three-attempt limit. Missing evidence, execution work or exhausted retries go to a person. Human review is the default final step; the optional queue policy sends Ollama-passed proposals directly to the outbox.
Posting is a separate, explicit terminal command. It sends the retained proposal and review as a Jira comment, with the captured revision and an unverified-execution label. It does not close the issue or move its workflow status.
What we discovered
A tidy answer can still be the wrong answer.
Valid JSON is only the first check.
The earlier ten-case local compiler exercise produced semantically acceptable requirements in five cases. Structural validation helped keep the format predictable; it did not establish that the ticket had been understood correctly.
Reports do not establish a fix.
One historical native investigation completed all three stages with four retained Claude calls and thirteen observed actions. Its result remained executedUnverified. The source was unchanged and acceptance was still false.
Recovery is part of the product.
The September 13 audit found the installed native worker refusing admission because its store differed from its immutable origin. We retained that failure and its history. The terminal companion does not repair or bypass the original worker.
A lost acknowledgement is not a retry instruction.
A Jira comment can arrive even when its response is lost. The preview saves the exact outgoing body before posting and preserves uncertain delivery. It can reconcile an exact visible comment; it never silently resends one.
Build status · 13 September 2026
What you can test today.
| Capability | Current evidence and limit |
|---|---|
| Terminal and installation | Installable jira-monkey REPL and macOS Terminal launcher. Packaging and command tests pass. Source preview requires an existing Python installation. |
| Jira intake and comments | Jira Cloud REST v3 adapters implemented and tested with fake transports. Live Jira authentication, ingestion and writeback remain untested. |
| Model selection | Claude Messages, OpenAI Responses and DeepSeek Chat Completions adapters implemented. Wire formats and incomplete-response handling are fixture-tested; live cloud calls remain untested. |
| Review and routing | 30 local tests pass across routing, persistence, delivery and packaging. Retry, human-review and comment-outbox paths are covered. See the separate local Ollama smoke report below. |
| Native source investigation | Earlier report generation demonstrated; current installed worker is blocked by its recorded store-identity mismatch. Historical completion was unverified. |
| Verified code changes | Still to build and qualify: implementation handoff, worktree allocation, target-specific tests, proof-bound PRs and live Jira/provider validation. |
Read the validation record · Read the synthetic-ticket Ollama smoke result
Try the terminal companion
Install locally. Start with the offline demo.
Download and extract the source preview, then run these commands inside its folder:
python3 install.py
~/bin/jira-monkey demo
~/bin/jira-monkey
The installer adds ~/bin/jira-monkey and ~/Applications/Jira Monkey.app. Opening the app opens the REPL in Terminal. It does not download dependencies or models, start a background worker, or replace an existing installation. This is a local preview launcher, not a notarized public macOS release.
For a real ticket, configure your Jira Cloud site and email, an installed Ollama model, and the exact cloud provider/model you want. Supply API credentials through your normal secret manager and process environment. The selected cloud provider receives ticket content when you run a job. The preview reads title and description; comments, attachments and custom fields are outside this intake version.
jira-monkey setup --help
jira-monkey doctor
jira-monkey fetch PROJECT-123
jira-monkey run
jira-monkey status
Use show to inspect the retained evidence, draft to inspect the proposed comment, and approve, retry or reject for the human decision. publish JOB_ID --confirm PROJECT-123 authorizes the exact Jira comment. A changed ticket blocks posting; an uncertain delivery requires reconciliation.
Where this goes next
Bring the evidence back with the work.
The goal remains the complete loop: a Jira request becomes a scoped implementation, the selected model performs authorized work, Ollama reviews the outcome, and actual checks support the handoff. Work that fails those checks returns to the queue. Work that needs judgment reaches a human with the original request and the evidence together.
The next qualification needs a configured Jira test project, live provider access, recovery of the native worker, and a bounded code-change case with host-observed test results. Until then, the terminal preview is useful for exercising intake, proposed responses and review routing. It is not an autonomous bug-fixing release.
Interfaces behind the loop
These are protocol references, not evidence that this preview has passed a live service test.
- Ollama structured outputs
- Claude Messages API
- OpenAI Responses API
- DeepSeek Chat Completions API
- Jira Cloud issue API and comment API
More Perslis work: Windows 95 USB Lab and its full white paper.