Releases: menta-guru-labs/jig
Release list
jig v1.9.5
jig v1.9.5 — modern provider wires and steadier long sessions
v1.9.5 strengthens the harness where long-running coding sessions usually
break: modern OpenAI reasoning models now use their native Responses API,
parallel tool execution follows calibrated limits, context eviction is selected
by measured value, and interrupted provider turns recover without corrupting the
conversation.
OpenAI Responses API
- Native Responses wire. Providers can select
openai-responsesand use
/v1/responseswith native input items, function calls, function outputs,
reasoning objects, streaming events, usage, and prompt-cache accounting. - Reasoning continuity. Encrypted reasoning items are retained and replayed
across tool turns, including responses with no visible reasoning summary. - Safe schemas. Strict function mode is enabled only when a schema satisfies
the strict JSON Schema contract, avoiding opaque upstream validation errors.
Reliable execution
- Calibrated parallel reads. Independent read-only calls run concurrently up
to the model profile's measured limit, while mutations remain ordered. - Safe mixed envelopes. Read-only calls still run concurrently up to the
calibrated limit, but finish before ordered mutations begin, preventing
nondeterministic read/write races. - Transparent empty-stream recovery. Provider failures that produce no
assistant text or tool call are retried within a bounded budget without
consuming an agent step or persisting an invalid assistant message.
Context and steering
- Value-based MMU epochs. Context eviction now weighs recovered tokens,
remaining-turn horizon, cache-break cost, and protected tail size before
committing an epoch. - Better supersession tracking. Fresh reads and successful repeated checks
supersede stale outputs, while later reasoning references continue to protect
unique research evidence. - Stronger Friend corrections. Friend feedback is emitted as dedicated
high-priority control input and shown as a distinct transcript card.
Sessions and TUI
- Unicode-safe session titles. Automatic names truncate by Unicode
characters instead of byte offsets, eliminating panics on Cyrillic and other
multibyte text. - Lossless resumed tools. Tool arguments/results survive persistence and
resumed conversations reconstruct their tool cards and statuses. - Clearer transcript feedback. Friend interventions receive a dedicated
multicolor card, and restored tool results retain success/error state. - Completion chime. Finished turns play a short, soft notification sound so
background work is easier to notice.
Validation
The release was checked with the full workspace test suite, Clippy with warnings
denied, rustfmt, release build, prompt lint, environment doctor, and sandbox
probe.
Install
Download jig.exe below (Windows x86_64) and put it on your PATH.
jig v1.9.0 — the transcript you can touch
jig v1.9.0 — the transcript you can touch
v1.9.0 is a UX batch: the transcript is now fully interactive — click
thinking, drag the scrollbar, unfold tools one stage at a time, read real
diffs — and the harness stops cutting turns short. It also removes every
harness-imposed output cap and fixes a provider error that killed turns after
1–3 messages.
Interactive transcript
- Thinking, per block. Click a
thinking…line and only that reasoning
block reveals itself;^Tstill toggles everything at once. - A real scrollbar. Proportional thumb on a faint track. Grab it and drag,
or click the track to jump; scrolling back to the bottom re-engages
follow mode. - Tools are one line again. A finished tool shows a single header line
with a faint▸Nmarker. Click to unfold: 1st click a peek (6 lines),
2nd more (24), 3rd full, 4th back to one line. - Real diffs in edit cells.
edit/writenow attach a proper unified
diff (LCS-based hunks,@@bands, green adds / red dels) that the
transcript renders instead of the model-facing hashline echo.
Composer
- Cursor no longer drifts. Word-wrapped input wrapped the visual column
aschars % width, so the cursor slid left on every auto-wrapped line. It
is now measured from the cursor's actual visual segment, and the input box
height is counted with the same word-wrap it draws with.
Turn lifecycle
- Completion contract. The model closes finished work with
<complete>…</complete>wrapping a one-paragraph summary of the changes.
Without the closing tag the turn is continued, not accepted — an early
stop (or a stream cut mid-thinking) no longer ends the turn silently. The
harness re-prompts up to three times before accepting the stop. - No more
max_tokenscaps. The default config no longer truncates
responses: on OpenAI-shaped endpoints the field is omitted entirely
(o-series getsmax_completion_tokensonly when a cap is set explicitly),
and the Anthropic dialect — where the field is mandatory — uses the
model's catalog maximum. - Fixed
400 Invalid assistant message: content or tool_calls must be set. Empty assistant envelopes (left behind by a stream cut mid-reasoning)
are dropped before they reach the wire, and the Anthropic serializer now
filters unsigned thinking and merges consecutive same-role messages — both
deterministically, so the KV-cache prefix stays byte-stable.
Validation
Full workspace gates were run for this release: cargo test (380+ tests),
clippy -D warnings, cargo fmt --check, jig prompt-lint, release build.
The KV-cache snapshot and cache-guard tests were updated for the serializer
changes and pass.
Install
Download jig.exe below (Windows x86_64) and put it on your PATH.
jig v1.8.2 — saved conversations open on their transcript
jig v1.8.2 — saved conversations open on their transcript
v1.8.2 fixes the "empty conversation" bug: a recorded chat opened from the
launcher's session picker (or jig resume) showed only the welcome line —
the title was there, the transcript was not.
The bug
There are two ways to reopen a saved conversation. Inside the TUI, /sessions
worked — it explicitly rebuilds the transcript cells. But the launcher picker
and jig resume seed the recorded history into the session before the TUI
starts, and the TUI never rendered that seeded history. The chat opened as if
it were brand new: title saved, content invisible.
The fix
App::new now checks whether the session already carries history and, if so,
renders it into transcript cells using the exact same conversion /sessions
uses. The conversation opens on its content. last_answer / last_input are
also seeded from the history, so /copy last and steering keep working.
If a resumed session has no visible messages (only internal ones), the welcome
line still shows — a blank screen never appears.
Validation
A regression test reproduces the exact scenario — a session seeded with
history opens on its transcript, not the welcome line. Full workspace gates
were run for this release: cargo test, clippy -D warnings,
cargo fmt --check, jig prompt-lint, jig doctor, jig sandbox-probe,
release build.
Install
Download jig.exe below (Windows x86_64) and put it on your PATH.
jig v1.8.1 — a new project opens on your last model
jig v1.8.1 — a new project opens on your last model
v1.8.1 fixes the "no model selected" launch abort on fresh projects.
The bug
A brand-new project (no jig.toml, no .jig/state.toml) had no provider or
model at all. Launching jig there aborted with "no model selected" — even
though you had just used a working provider/model in another project. Hit in
real sessions after v1.8.0.
The fix: a user-level fallback
Your provider/model choice is now mirrored into a user-level state file
(%APPDATA%\jig\state.toml, or $XDG_CONFIG_HOME/jig/state.toml on
Linux/macOS). At launch, precedence is:
CLI flags > this project's .jig/state.toml > user-level fallback > jig.toml
Rules that keep it sane:
- The provider/model pair is inherited as a unit — a fallback model never
pairs with an endpoint it does not belong to. Choosing a different provider in
a project never drags in a stale model. - A project's own choice always wins — the fallback only fills in fields the
project has never chosen. - A successful launch sticks — the effective pair is remembered as the
project's sticky choice and mirrored for the next brand-new project.
Validation
Unit tests cover the inheritance rules, the project-wins case, no cross-provider
pairing, and the on-disk round-trip (through an isolated JIG_STATE_HOME, so
tests never touch a real user profile). Full workspace gates were run for this
release: cargo test, clippy -D warnings, cargo fmt --check,
jig prompt-lint, jig doctor, jig sandbox-probe, release build.
Install
Download jig.exe below (Windows x86_64) and put it on your PATH.
v1.8.0 — /friend, durable session ids
/friend — a second pair of eyes, in your voice
Off by default. Every N executed tool calls the friend weighs your own prompts against what the agent is really doing, and speaks up only when the work has drifted. Its message enters the loop as user steering, not as a harness reminder — it carries your intent, so it reads like you.
- Toggle from the TUI:
/friend(also/friend on|off|status), surfaced in the^Ppalette. - Cadence is config, not code:
[friend] enabled = false every_tool_calls = 8
- Intent is recorded whether or not the friend is on — switch it on mid-session and it already knows everything you asked for.
Fix: recorded sessions no longer disappear
SessionId was a process-local counter, so every launch restarted at sess_1. The next run reused the previous run's ids and append_message's INSERT OR REPLACE overwrote the earlier conversation seq-by-seq — old sessions silently vanished from the switcher.
Session ids now carry wall-clock milliseconds + pid + counter: globally unique, chronologically sortable. Other id kinds stay process-local (that is all in-memory bookkeeping needs). Regression-tested end to end against the sqlite store.
Also: a launch that never received a prompt no longer crowds out real conversations in /sessions.
Provider & TUI
- Shared HTTP layer extracted (
provider/http.rs); Anthropic and OpenAI clients now sit on top of it instead of duplicating request plumbing. - Per-tool hues in the transcript — tool calls are distinguishable at a glance.
docs/HARNESS_PROMPT_ENGINEERING_AUDIT_2026-08-02.md: the prompt/schema audit behind these changes.
Install
Download jig.exe below (Windows x86_64) and put it on your PATH.
Gates: cargo test (all green), clippy -D warnings clean, cargo fmt --check clean.
v1.7.1 — Shell reliability: BOM for PowerShell, PTY drain, session respawn
v1.7.1 — Shell reliability fixes
Bug fixes
Three root causes found and fixed from a real session where all three fired simultaneously on Russian Windows with PowerShell 5:
1. PowerShell 5 script encoding corruption
PowerShell 5 reads .ps1\ files in the system ANSI codepage (CP1251 on RU Windows, CP932 on JP, etc.) when there is no BOM. UTF-8 bytes — including \\r\n\ line endings and harness sentinel markers — get scrambled. The command never reports an exit code, and every call times out after 30s.
→ \write_script()\ now prepends UTF-8 BOM (\\xEF\xBB\xBF) for .ps1\ files. PowerShell detects it and reads as UTF-8 regardless of locale.
2. PTY noise contamination after timeout
After Ctrl-C, the shell echoes ^C, redraws the prompt, and may flush buffered error pages — all into the PTY log. The next command reads this noise as its own output, the sentinel never appears, and the timeout cascades.
→ 500ms drain loop after every Ctrl-C consumes all interrupt-noise before returning.
3. Dead session not re-spawned
After N timeouts, the PTY is dead but \started\ stayed \ rue, so \ensure_started()\ never re-created it. Infinite timeout loop.
→ \consecutive_timeouts\ counter: 3 timeouts in a row → force session respawn.
→ \consecutive_corruptions\ counter: sentinel unparseable 3 times in a row → force respawn.
Changes
| File | Delta |
|---|---|
| \jig-core/src/tools/bash.rs\ | +88/−7 |
| \Cargo.toml\ | version bump |
| \Cargo.lock\ | rebuilt |
Asset
| File | Size | SHA-256 |
|---|---|---|
| \jig.exe\ | 19 403 776 bytes (~18.5 MB) | \9bd436cc07f84abb4c0344a039b8ddeb23dbb91ab6b5e5d4a85ce2db181b4f4f\ |
Gates
\
cargo test --workspace ✓ (all 265+58+... passed)
cargo clippy --workspace --all-targets -- -D warnings ✓
cargo fmt --all --check ✓
\\
Upgrade
\
cargo install jig
\\
Or download \jig.exe\ below.
v1.7.0 — Independent agent routes, vision routing, /settings GUI, Ctrl-layout fix
v1.7.0 — Agent routing, vision model selection, /settings GUI
New features
Independent agent routes — main model, read-only subagent, workspace subagent, and vision each get their own provider/model/reasoning route in jig.toml. Configure them independently under [subagents] (see SubagentModelsConfig in config.rs).
Vision model routing — two modes:
- Explicit: set
[vision]provider + model injig.toml→ user-declared capability. - Auto: harness inspects provider's
inputfield for["text", "image"]support. No hardcoded model-name lists, no regex. - Blind main-model gets text descriptions via a separate vision model (transparent proxy).
/settings GUI — full TUI menu for model, provider, reasoning, API keys, and agent routes. No need to edit jig.toml by hand.
TUI improvements
- Ctrl shortcuts now work in any Windows keyboard layout. Physical virtual-key detection via Win32
GetAsyncKeyStatewith RU/UA fallback. Enter → VK_RETURN, not'э'. Backspace → VK_BACK. - API key masking — key never saved to transcript history, whether you press Enter, Esc, or Ctrl+C.
- Selection persists after mouse release. Copy only via right-click or Ctrl+C. 2-second composer protection after copy prevents accidental paste-outs.
- GUI commands (
/settings,/config,/doctor) no longer pollute the composer. - Provider management — add, remove, and verify providers directly in the TUI.
Internal
SubagentModelsConfiginjig-core/src/config.rs— per-role model routing.VisionConfigexplicit-capability detection injig-core/src/vision.rs.jig-tui/src/commands.rs— 257-line expansion for /settings, /config, /doctor commands.jig-tui/src/app.rs— physical virtual-key input handler (line 1334+).jig/src/main.rs— 300-line CLI expansion for independent model routes.
Stats
- 17 files changed, +1014/−76
- No new dependency crates
Asset
| File | Size | SHA-256 |
|---|---|---|
jig.exe |
19 398 656 bytes (~18.5 MB) | dc4a30bec0136a76819507dc86786be6ccd2062967e9a9f5df62bec945d0f913 |
Build & checks
cargo build --release ✓
cargo test --workspace ✓
cargo clippy --workspace --all-targets -- -D warnings ✓
cargo fmt --all --check ✓
Upgrade
cargo install jig
Or download jig.exe from the assets below.
jig v1.6.2
jig v1.6.2 — a clearer, native Windows launcher
v1.6.2 makes the double-click launcher easier to read and replaces its old
folder prompt with the modern Windows Common Item Dialog.
Clear visual groups
The launcher now leaves a deliberate blank row:
- between recent projects and Browse…;
- between New conversation and existing conversations;
- between the final conversation and Back to projects.
The spacing participates in scrolling and mouse hit-testing, so compact windows
still highlight and open the row that is actually visible.
Explorer-style folder selection
Browse… now opens Windows' modern folder picker directly inside jig. It has
the familiar Explorer navigation surface and no longer starts PowerShell or
uses the legacy BrowseForFolder dialog.
Cancelling the picker always returns to the project list. If Windows cannot
open it, jig keeps the launcher alive and shows the error instead of flashing
closed or unexpectedly advancing to the conversation list.
Validation
Automated launcher coverage now includes group spacing, scrolling, and native
picker cancellation, in addition to the existing MRU and path tests. The full
workspace test, formatting, lint, release-build, prompt, doctor, and sandbox
gates were run for this release.
Download for Windows
Download jig-v1.6.2-windows-x86_64.exe and its .sha256 file from the assets
below. You can rename the executable to jig.exe, place it anywhere convenient,
and double-click it.
SHA-256:
68b69684191e94da4209870437c5cef53d07517957c294f6ff174455c3c77af4
jig v1.6.1 — double-click and start building
jig v1.6.1 — double-click and start building
v1.6.1 gives the Windows executable a real front door.
A launcher made for the harness
Double-click jig.exe in File Explorer and Windows opens the terminal surface
jig is designed for. Instead of dropping into whichever folder happens to
contain the executable, jig now starts with a keyboard-and-mouse project picker:
- open one of the 12 most recently used projects;
- choose Browse… to select any folder through the native Windows Explorer
folder dialog; - choose New conversation or continue one of that project's named sessions;
- click a row once or use arrows, number keys, Enter, and Escape;
- return to the project list without restarting jig.
Recent projects are stored in the user's jig config directory, automatically
deduplicated across normal and canonical Windows path forms, and cleaned when a
folder no longer exists.
Terminal behavior stays predictable
Running jig from PowerShell, Command Prompt, Windows Terminal, SSH, or a build
script keeps the existing current-directory behavior. The launcher appears only
when jig owns a newly created Windows console. JIG_LAUNCHER=always|never
provides an explicit override for unusual terminal hosts and deterministic
testing.
Validation
The launcher has automated coverage for MRU ordering, deduplication, stale
folders, Windows path normalization, labels, and clipping. It was also exercised
in a real PTY through the project picker and the session picker, including clean
terminal restoration on exit.
Download for Windows
Download jig-v1.6.1-windows-x86_64.exe and its .sha256 file from the assets
below. You can rename the executable to jig.exe, place it anywhere convenient,
and double-click it.
For terminal use:
.\jig.exe --version
.\jig.exe --root C:\path\to\project
.\jig.exeThe project requires Rust 1.90 or newer.
SHA-256:
4cfafe678426e62b665a713174e6da6d75011cbd317102e838bd874b6778be67
jig v0.6.0 — rewind without losing the thread
jig v0.6.0 — rewind without losing the thread
v0.6.0 adds safe timeline navigation and makes earlier work much easier to
find and resume.
Rewind, undo, and redo the whole task
/rewindand/undoopen a newest-first picker of user messages.- Choosing a message restores the conversation, todo state, and journaled files
to the point immediately before that message. - The selected message moves back into the composer so it can be edited and
sent again. - The abandoned future is preserved as a separate persisted branch instead of
being deleted. /redoshows where the rewind started and ended, then restores the latest
rewound branch — transcript, files, and task state together.- Keyboard and one-click mouse selection are both supported.
Files changed manually after the recorded point are protected instead of being
silently overwritten. jig reports the conflict and leaves those files alone.
External effects from shell commands or MCP tools cannot always be reversed;
the interface now states that boundary explicitly.
Sessions you can recognize and return to
/sessionsnow opens a convenient picker for previous sessions and restores
their transcript when selected.- Sessions use stable IDs, and legacy sessions with blank titles are
automatically named from their first real user prompt. - Resume and seed persistence now update SQLite and JSONL state atomically,
reducing the chance of a half-restored session.
Safer destructive operations by default
The compact system prompt now defines one global user-override principle for
all default rules. It also instructs the agent to prefer recoverable deletion
through the trash and to use permanent deletion only when the user explicitly
requests it or no recoverable option exists.
Validation
The release passed the workspace test suite, zero-warning Clippy, formatting,
release build, prompt lint, environment doctor, and sandbox posture probe.
Download for Windows
Download jig-v0.6.0-windows-x86_64.exe and the matching .sha256 file from
the assets below. Rename it to jig.exe if preferred, then run:
.\jig.exe --version
.\jig.exe init
.\jig.exeThe project requires Rust 1.90 or newer.
SHA-256:
d4f009dc1b707e18f97e814702fe0ef145260f41a254c3fbd18cd8749c2204ec