v0.6.0
🦀 Gajae Code v0.6.0 — Research mode & desktop control
This release adds two new opt-in capability surfaces to the agent loop and sharpens day-to-day interaction. Both new features are off by default and gated — nothing changes for existing workflows unless you turn them on.
✨ Highlights
🔬 gjc rlm — research / REPL mode (opt-in, v1)
A Jupyter-notebook-style research session layered over the existing agent loop, backed by the shared persistent Python kernel.
- Hard-gated, read-only toolset — only
python,read, andweb_search(plus inspection-onlybashprefixes,goal, and acomplete_researchtool). The allowlist is asserted after the tool registry is assembled, so a leakededit/write/task/browsertool fails the launch loudly instead of silently mutating your repo. - Live notebook — every executed cell streams into
.gjc/rlm/<session>/notebook.ipynbvia single-queue atomic temp-rename writes with post-write validation. - Synthesized report — a
.gjc/rlm/<session>/report.mdis generated on session exit. - Optional data context — auto-loads a project-root
DATA.md(override with--data <path>).
gjc rlm # interactive research session
gjc rlm "What drives the spike in orders?" # seed an initial question
gjc rlm --data ./datasets/DATA.md # point at a data description🖥️ computer — desktop-control tool (experimental, opt-in)
A new, model-agnostic tool that lets the agent drive a real macOS desktop using the OpenAI computer-use action set (screenshot, click, double_click, move, drag, scroll, type, keypress, wait).
- Native + safe — backed by fresh Rust
pi-nativesbindings (ComputerController/computerScreenshot) with a Retina/HiDPI-safe coordinate contract: the screenshot's pixel dimensions are the action coordinate space. - Apple Silicon macOS — v1 is macOS-only; Linux/Windows are deferred behind the same schema.
- Supervisor-gated kill-switch — a daemon-enforced global hotkey (default
Control+Option+Command+Escape) aborts queued actions, releases held keys/buttons, and suspends input outside model control. Reset is user-only. - TCC preflighted — Accessibility + Screen Recording grants are checked up front; a missing grant returns a clear "grant then retry" error instead of a silent black frame.
- Off by default — enable per-session with
computer.enabled=trueon a supported host.
🔧 Other changes
- Steer-by-default while busy —
busyPromptModedefaults tosteer: pressing Enter on a normal prompt interrupts the active turn. Queueing for the next turn moves to the explicit Ctrl+Enter follow-up keystroke (orbusyPromptMode: "queue"). goal({op:"pause"})— the agent-facinggoaltool can now park a goal whose remaining work is blocked on human input, instead of being forced todropit or leave it re-firing the autonomous-continuation steer every turn.- Release unblock: deprecated GitHub Actions Intel macOS (
macos-13/darwin-x64) release binaries are excluded from CI; Intel macOS users should install through npm/Bun or build from source.
📦 Upgrade
bun install -g gajae-code # or: @gajae-code/coding-agent
gjc --version && gjc --smoke-testGajae Code remains an experimental, beta-stage project. The new
rlmandcomputersurfaces are opt-in previews — verify outputs before relying on them for important work.
What's Changed
- fix(session): opt-in output-sanitization coalescing for many-small-chunk output (F21) by @Yeachan-Heo in #749
- ci(dev): fan out state gates and narrow deep-interview checks by @Yeachan-Heo in #750
- fix(pi-natives): widen Windows budget for high-output PTY backpressure test (v0.5.3 release blocker) by @Yeachan-Heo in #752
- fix(agent): tear down browser/Python subprocesses on signal exit (#698) by @Yeachan-Heo in #728
- ci(dev): fan out Affected path validation into a task matrix by @Yeachan-Heo in #753
- test(coding-agent): stabilize timing-sensitive dev suite cases by @Yeachan-Heo in #754
- feat(computer-use): coordinate-contract foundation (slice 1) by @Yeachan-Heo in #695
- fix(computer-use): positional native ABI dispatch + COMPUTER_* error mapping by @Yeachan-Heo in #759
- fix(pi-natives): CGEventCreateScrollWheelEvent C-variadic ABI (arm64 soundness) by @Yeachan-Heo in #760
- fix(retry): bound ollama-cloud first-event timeout retries (#713) by @Yeachan-Heo in #723
- fix(deep-interview): remove Korean-specific language directive by @Yeachan-Heo in #735
- fix(compaction): preserve Codex websocket session for maintenance one-shot calls (#736) by @Yeachan-Heo in #741
- Fix resume not_found regression after 0.5.3 by @Yeachan-Heo in #761
- test: relax memory watermark timeout by @Yeachan-Heo in #762
- feat(tui): clear composer on double-Esc without interrupting running task by @Yeachan-Heo in #763
- fix(coding-agent): make CronDelete misses terminal by @Yeachan-Heo in #764
- fix ai clarify opencode headless credentials by @Yeachan-Heo in #765
- fix(tui): add spacing between status line and composer by @Yeachan-Heo in #768
- deep-interview: language-agnostic silent self-proofread of output (best-effort) + contract test by @Yeachan-Heo in #769
- fix: reconcile RALPLAN HUD final state by @Yeachan-Heo in #772
- fix(mcp): stabilize stdio lifecycle cleanup tests by @Yeachan-Heo in #773
- fix(ai): clamp GPT-5.5 context cap by @Yeachan-Heo in #767
- test(coding-agent): format deep interview assertion by @Yeachan-Heo in #775
- docs(readme): add theme comparison grid by @Yeachan-Heo in #779
- fix(coding-agent): document replayExempt runtime fields by @Yeachan-Heo in #782
- feat(coding-agent): opt-in
gjc rlmresearch mode (v1, interactive) by @Yeachan-Heo in #778 - test(coding-agent): include rlm in CLI command surface by @Yeachan-Heo in #785
- fix(xiaomi): tighten token-plan provider activation by @hanbinnoh in #783
- Fix Codex web search default model by @mastertyko in #787
- feat(computer): enable computer-use by default on Apple Silicon by @Yeachan-Heo in #789
- Revert "feat(computer): enable computer-use by default on Apple Silicon" by @Yeachan-Heo in #792
- Improve JSON tree rendering for long strings by @Yeachan-Heo in #799
- fix(coding-agent): preserve skill invocation args preview by @Yeachan-Heo in #798
- feat(telegram-remote): operator gateway over Coordinator MCP + persistent RPC-mode session (#681) by @Yeachan-Heo in #699
- Fix orphaned GJC tmux cleanup by @Yeachan-Heo in #800
- test(coding-agent): gated live model-driven rlm e2e by @Yeachan-Heo in #791
- test(coding-agent): format live RLM e2e by @Yeachan-Heo in #801
- Fix tmux GC handling for non-repo project metadata by @Yeachan-Heo in #803
- feat: split steering and explicit queue shortcut by @Yeachan-Heo in #804
- feat(computer): improve computer-use UX by @Yeachan-Heo in #805
- fix(ci): run dev checks for fork PRs by @Yeachan-Heo in #808
- fix(ask): expand large paste custom input by @mpfo0106 in #807
- test(telegram-remote): wait for async chunk delivery by @Yeachan-Heo in #810
- Support Intel Mac native binary installs by @Yeachan-Heo in #813
- Harden Composer 2.5 Fast tool discipline and add stability bench by @Oreochococukie in #814
- Cover Cursor Composer version-style model ids by @Oreochococukie in #817
- feat(rlm): autonomous mode, resume, managed venv, completion gate (G002-G005) by @Yeachan-Heo in #816
- feat(coding-agent): add TUI /copy slash command by @mpfo0106 in #818
- Fix /copy quarantine Dev CI failure by @Yeachan-Heo in #819
- Add guarded Chrome profile browser mode by @Yeachan-Heo in #811
- fix(rlm): finalize autonomous runs on print-mode error + classify piped stdin (follow-up to #816) by @Yeachan-Heo in #820
- Wire model selector thinking into session calls by @Yeachan-Heo in #822
- Show current version in TUI status line by @Yeachan-Heo in #825
- Expose retained output tails for background jobs by @Yeachan-Heo in #826
- feat(goals): expose pause op on the goal tool (addresses #795 review) by @simongonzalezdc in #827
- Fix tmux window title labels by @probepark in #828
- feat: add xAI search provider by @mastertyko in #790
- Fix queued normal user messages while busy by @Yeachan-Heo in #830
- fix(models): correct GLM-5.2 context window to 1M by @simongonzalezdc in #832
- Support folding foreground bash into background jobs by @Yeachan-Heo in #833
- fix(models): correct MiniMax-M3 context window to 1M by @simongonzalezdc in #834
- fix(computer): stabilize Anthropic schema and hotkey liveness by @Yeachan-Heo in #835
- fix(ai): flatten nested Anthropic tool root combinators by @Yeachan-Heo in #836
- Fix Hangul terminal emission normalization by @Yeachan-Heo in #840
- Fix TUI render golden after Hangul normalization by @Yeachan-Heo in #844
- Fix model preset provider expansion controls by @Yeachan-Heo in #841
- Fix coding-agent dev CI after preset expansion merge by @Yeachan-Heo in #845
- fix(computer): return screenshot image content by @Yeachan-Heo in #846
- Fix Korean Unicode leak detection by @Yeachan-Heo in #842
- fix(computer): persist screenshot fallback path by @Yeachan-Heo in #847
- docs: link multivendor setup guide by @Yeachan-Heo in #848
- test(telegram-remote): wait for async event bridge sends by @Yeachan-Heo in #852
- Add custom model preset creation UI by @Yeachan-Heo in #843
- test(coding-agent): update model selector landing expectations by @Yeachan-Heo in #855
- feat(coding-agent): steer by default while agent is busy by @Yeachan-Heo in #857
- fix(rlm): keep seeded text interactive by @Yeachan-Heo in #861
New Contributors
- @hanbinnoh made their first contribution in #783
- @mpfo0106 made their first contribution in #807
Full Changelog: v0.5.3...v0.6.0