Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
143 commits
Select commit Hold shift + click to select a range
67c3304
feat: add cache-stable prompt composition
bajajra Jun 19, 2026
1ecc4be
feat: enforce project trust and permissions
bajajra Jun 19, 2026
1749877
feat: add branching session trees
bajajra Jun 19, 2026
e6d3c55
refactor: add explicit agent loop controller
bajajra Jun 19, 2026
634fc0a
feat: add language server tools
bajajra Jun 19, 2026
90cae10
feat: add typed subagent task queue
bajajra Jun 19, 2026
570325a
feat: add managed background tasks
bajajra Jun 19, 2026
bfebf83
Merge pull request #1 from bajajra/codex/roadmap-parity
bajajra Jun 19, 2026
79efe01
Rebrand Code Puppy as Mist
bajajra Jun 20, 2026
2cb19b5
feat: add Roadmap II plugin extension seams
bajajra Jun 20, 2026
921b027
feat: add provenance-blind safety classifier
bajajra Jun 20, 2026
0ce52f6
feat: inspect tool output for prompt injection
bajajra Jun 20, 2026
28b7b09
feat: classify safe shell command prefixes
bajajra Jun 20, 2026
87ee74e
feat: escalate repeated safety denials
bajajra Jun 20, 2026
ed11d91
feat: add first-class plan and build modes
bajajra Jun 20, 2026
d4e6b6b
feat: add configurable trust scopes
bajajra Jun 20, 2026
3115729
feat: sandbox shell and background execution
bajajra Jun 20, 2026
9e66330
feat: add versioned session event transport
bajajra Jun 20, 2026
8793330
feat: add redacted session sharing
bajajra Jun 20, 2026
1ad5e8d
feat: add durable multi-session headless server
bajajra Jun 20, 2026
c585617
feat: add async Python agent SDK
bajajra Jun 20, 2026
a55d49c
feat: add JSON output and RPC control mode
bajajra Jun 20, 2026
51d91bb
build: add native release distribution
bajajra Jun 20, 2026
84b33f1
docs: describe Roadmap II workflows
bajajra Jun 20, 2026
b7dca78
feat: add safety/reporting prompt guidance and structured compaction
bajajra Jun 20, 2026
e62ca93
style: refresh Mist emoji into brand (🫧) and ambient (💨) glyphs
bajajra Jun 20, 2026
01d8510
feat: restyle startup wordmark (Cinzel-evoking font + pastel gradient)
bajajra Jun 20, 2026
a3cafc7
feat: make shell_prefix enforcement opt-in (dormant by default)
bajajra Jun 20, 2026
20aa8c7
feat: add a self-maintained task list tool
bajajra Jun 20, 2026
ec99166
feat: strengthen agent system prompt; drop hard line-count cap
bajajra Jun 20, 2026
45f0b4f
feat: add Cinnamon theme
bajajra Jun 20, 2026
5b3fa90
feat: attribute authorship to Rahul Bajaj (Owlgebra AI)
bajajra Jun 20, 2026
8d1a715
style: apply ruff format (fix quality check)
bajajra Jun 20, 2026
934fcd6
test: update theme catalog + emoji assertions (fix test check)
bajajra Jun 20, 2026
f2a92e9
feat: add opt-in orchestrator mode for context isolation
bajajra Jun 22, 2026
7cba30d
feat: clear stale tool-result payloads to keep context small
bajajra Jun 22, 2026
7d4d71e
feat: nudge agent toward economical, just-in-time reads
bajajra Jun 22, 2026
1644fdb
style: ruff format _compaction.py
bajajra Jun 22, 2026
1f55745
feat: live tool-aware spinner activity label
bajajra Jun 22, 2026
2f3f64e
feat: replace drifting-emoji spinner with a rotating square
bajajra Jun 23, 2026
d23d208
fix: keep spinner alive during tool execution
bajajra Jun 23, 2026
2d1715b
feat: braille spinner + terser agent narration
bajajra Jun 23, 2026
d529ddc
feat: selectable braille spinner presets (sparkle/wave/pulse/…)
bajajra Jun 23, 2026
629306a
feat: in-place steps ledger (compact_steps) for Claude-Code-style status
bajajra Jun 23, 2026
c2f8c88
feat: cwd_context + answer_echo plugins
bajajra Jun 23, 2026
c8a4dc7
feat: strengthen system prompt with file-ref + stolen techniques
bajajra Jun 23, 2026
9829092
style: ruff format in-place ledger + plugin files
bajajra Jun 23, 2026
f13f9af
fix: don't DBOS-wrap subagents (pickle crash on stream handler)
bajajra Jun 23, 2026
98618a9
fix: silence step/clearing spam; add pulsing heartbeat spinner
bajajra Jun 23, 2026
c27b8fd
fix: always show the task list in low mode; restore visible tool status
bajajra Jun 23, 2026
d27eaee
fix: heartbeat during the AGENT RESPONSE generation gap
bajajra Jun 23, 2026
4eb5656
feat: standalone liveliness heartbeat (decoupled from the spinner)
bajajra Jun 23, 2026
523ff4c
fix: make the agent capability-aware (stop false "I can't" claims)
bajajra Jun 23, 2026
772f200
feat: steal "bias to help, don't deflect" rule for capability over-cl…
bajajra Jun 23, 2026
8b7bbff
revert: remove title-bar liveness heartbeat (corrupted scrollback)
bajajra Jun 23, 2026
840b392
docs: log Option B (persistent footer) as the recommended path
bajajra Jun 23, 2026
42c1693
docs: add how-to-use-access-TUI.md (headless TUI verification)
bajajra Jun 23, 2026
1ee43db
feat: Option B persistent footer — route streamed text through the Live
bajajra Jun 23, 2026
eb6b1be
fix: render task list in the live footer (stop stacking copies)
bajajra Jun 24, 2026
30b27d3
test: clear task-list slot in spinner reset fixtures
bajajra Jun 24, 2026
f142089
fix: stop double-spacing streamed text (print_above newline)
bajajra Jun 24, 2026
6e1e810
docs: add Bun/TypeScript migration plan
bajajra Jul 17, 2026
d97954b
feat: Phase 0 of Bun migration — ts/ workspace + protocol contract
bajajra Jul 17, 2026
063157d
feat: Phase 1 spike — Ink TUI streams a live session (GO on Ink)
bajajra Jul 17, 2026
5b124e2
feat: Phase 1 TUI — typed events, client, markdown, polished Ink app
bajajra Jul 17, 2026
e553081
feat: Bun engine + self-contained mist-ts binary (Phases 2/3/5 core)
bajajra Jul 17, 2026
f2bf531
feat: plan-DST, mid-run steering, ask_user, hooks, headroom
bajajra Jul 17, 2026
d7f2767
docs: live GLM-5.2 verification milestone
bajajra Jul 17, 2026
2c19a8e
feat: session persistence (Claude Code/codex-style) + CLI args
bajajra Jul 17, 2026
4cf0b21
feat: slash commands + runtime themes in mist-ts
bajajra Jul 17, 2026
0517041
feat: /resume — interactive in-TUI session picker
bajajra Jul 17, 2026
32eb813
feat: /tools /status /dump_context + /clear /q aliases
bajajra Jul 17, 2026
fa6a805
feat: collapse tool calls — rolling live view + one summary line + /s…
bajajra Jul 17, 2026
fda5562
feat: markdown tables + violet file-path highlighting
bajajra Jul 17, 2026
f9a5a6b
feat: single spinner in the busy status line
bajajra Jul 17, 2026
1e6251b
feat: context compaction + /compact (ported from the Python design)
bajajra Jul 17, 2026
45d3d0d
feat: in-place one-line status for narration + streaming text
bajajra Jul 17, 2026
73528cb
feat: /help — full command reference with one-line descriptions
bajajra Jul 17, 2026
2ecad0a
feat: Claude-Code-style transcript — ● narration, Ran-N groups, diff …
bajajra Jul 17, 2026
e338889
feat: tool blocks with output previews + Thought-for-Ns lines
bajajra Jul 17, 2026
359bd0c
feat: input history — ↑/↓ recall, persisted across sessions
bajajra Jul 17, 2026
3cf48c3
feat: whimsical spinner verbs in the status line
bajajra Jul 17, 2026
0f20fcf
feat: context-aware spinner-verb pools (a Mist signature)
bajajra Jul 17, 2026
ca214d8
feat: reference-style task list — ☐ #N checkboxes + ctrl+t toggle
bajajra Jul 17, 2026
3827576
feat: /record — export the session transcript to markdown
bajajra Jul 17, 2026
144f016
feat: interactive help browser + theme/model choosers
bajajra Jul 17, 2026
3858ceb
feat: /record = trace recording (as intended); /export = markdown
bajajra Jul 17, 2026
5d12117
feat: cutover — `mist` is now the Bun/TS app; Python deprecated
bajajra Jul 17, 2026
79bbe45
test(cwd_context): make budget test deterministic instead of relying …
bajajra Jul 17, 2026
f10e6cf
ci: add Bun/TS test job for the migrated app
bajajra Jul 17, 2026
43fa607
Merge pull request #4 from bajajra/bun-migration
bajajra Jul 17, 2026
26362aa
docs: rewrite README for the Bun/TS cutover
bajajra Jul 17, 2026
60d2433
docs: de-emphasize legacy code_puppy references in user-facing docs
bajajra Jul 17, 2026
bdc1c39
Merge pull request #5 from bajajra/bun-migration
bajajra Jul 17, 2026
5e6f241
feat: keep the input box visible while the agent works
bajajra Jul 17, 2026
8b81edd
feat: arrow-key option menus for ask_user questions
bajajra Jul 17, 2026
a239d89
feat: context-aware spinner glyphs (lynx-agent-spinners)
bajajra Jul 17, 2026
98d83f0
feat: /rename + auto-generated session names
bajajra Jul 17, 2026
06199b0
feat: hinokami theme — Sun Breathing palette + form-name spinner verbs
bajajra Jul 17, 2026
8f2e420
feat: mist theme reborn as Mist Breathing (Muichiro)
bajajra Jul 17, 2026
4194d48
feat: moon theme — Moon Breathing (Kokushibo), sixteen forms
bajajra Jul 17, 2026
e952c92
feat: Claude-Code-style welcome banner with Misty pixel art
bajajra Jul 17, 2026
4837a51
chore: drop 'engine: bun' from the welcome banner
bajajra Jul 17, 2026
a758bb3
docs: full Python→Bun parity backlog (audit of code_puppy/)
bajajra Jul 17, 2026
36e1121
docs: rank parity backlog by importance to the agent
bajajra Jul 17, 2026
34cdf18
feat: generic subagents — parallel delegation with isolated context
bajajra Jul 17, 2026
3e33246
fix+feat: narration wrap, session name in input frame, themed verb co…
bajajra Jul 17, 2026
42d8212
feat: §1 provider matrix + MCP groundwork, hardened per 10-finding re…
bajajra Jul 17, 2026
8ecd722
feat: replay recent conversation on session resume
bajajra Jul 17, 2026
1a72b86
fix: silent death at the 25-request turn cap — loud, tunable, resumable
bajajra Jul 17, 2026
e7116db
chore: raise request cap to 500 per turn (100 for subagents)
bajajra Jul 18, 2026
cc86a52
feat: compaction triggers on REAL token counts (default 200k)
bajajra Jul 18, 2026
c6b751b
fix: all 10 findings from the P0-complete review
bajajra Jul 18, 2026
30ebc89
feat: mascot is now an owl caricature (Owlgebra)
bajajra Jul 18, 2026
b5440cd
feat: mascot v3 — crow in a witch hat
bajajra Jul 18, 2026
60fc72d
polish: mascot redrawn Clawd-neat — symmetric front-facing crow
bajajra Jul 18, 2026
04afb97
feat: mascot final — Misty, a simple mist-cloud blob
bajajra Jul 18, 2026
c508c07
polish: shrink Misty to 12×10 (5 terminal rows)
bajajra Jul 18, 2026
ee2011c
feat: one-command install + zero-config first run
bajajra Jul 18, 2026
2af5365
fix: headless_run tests were order-dependent — failed on CI
bajajra Jul 18, 2026
4ac9179
Merge pull request #6 from bajajra/bun-migration
bajajra Jul 18, 2026
f9cf8a3
feat: /lens — explainability & interpretability module
bajajra Jul 18, 2026
5e4ba16
feat: --export-training — sessions as SFT-ready trajectories
bajajra Jul 18, 2026
402c4e7
feat: prompt caching — cache_control breakpoints + cache accounting
bajajra Jul 18, 2026
358e7ad
fix: repair two stale mocks in the legacy Python test suite
bajajra Jul 18, 2026
f0294ea
polish: mascot — blush one row lower, clear of the eyes
bajajra Jul 18, 2026
37fb2ee
feat: user prompts pop in the transcript — tinted text on a theme band
bajajra Jul 18, 2026
8ca635b
feat: cache + reasoning accounting for OpenAI and Gemini backends
bajajra Jul 18, 2026
6e71cf9
feat: transient-error retries with backoff — Claude Code style
bajajra Jul 18, 2026
fd6ac4a
Merge pull request #7 from bajajra/bun-migration
bajajra Jul 19, 2026
029ab71
feat: supersession dedup — a newer file read evicts older reads
bajajra Jul 19, 2026
df83a00
feat: adaptive hygiene — the engine steers itself on its own lens fee…
bajajra Jul 19, 2026
49f7396
fix: GLM sessions logged '0 input · context now 0' — usage arrives in…
bajajra Jul 19, 2026
577ee4f
feat: /lens survives session resume
bajajra Jul 19, 2026
099bb5a
feat: AGENTS.md support — codex-style discovery, frozen prefix, /init
bajajra Jul 20, 2026
8ee6fd8
feat: depth-constrained supersession — deep reads defer instead of bu…
bajajra Jul 20, 2026
94ddff8
feat: type-aware supersession — observation files are exempt
bajajra Jul 20, 2026
2ec1f4c
feat: cache breakpoints hardened per Anthropic caching docs
bajajra Jul 20, 2026
8c22689
Merge pull request #8 from bajajra/bun-migration
bajajra Jul 20, 2026
4288c76
fix: repair dangling tool_use pairs — the 'tool_result blocks immedia…
bajajra Jul 20, 2026
a960df9
Merge pull request #9 from bajajra/bun-migration
bajajra Jul 20, 2026
f30e54b
feat: live context gauge bottom-right + honest busy-line token count
bajajra Jul 20, 2026
46339bc
Merge pull request #10 from bajajra/bun-migration
bajajra Jul 21, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
7 changes: 4 additions & 3 deletions .env.example
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
# Code Puppy API Keys Configuration
# Copy this file to .env and fill in your API keys
# The .env file takes priority over ~/.code_puppy/puppy.cfg
# Mist API Keys Configuration
# Copy this file to .env and fill in your API keys.
# The .env file takes priority over ~/.mist/mist.cfg
# (Legacy path ~/.code_puppy/puppy.cfg is still read on first run and migrated.)

# OpenAI API Key
# OPENAI_API_KEY=sk-...
Expand Down
19 changes: 19 additions & 0 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -115,3 +115,22 @@ jobs:

- name: Check formatting with ruff
run: ruff format --check .

bun-tests:
name: Bun/TS tests
runs-on: ubuntu-latest
defaults:
run:
working-directory: ts
steps:
- name: Checkout code
uses: actions/checkout@v4

- name: Setup Bun
uses: oven-sh/setup-bun@v2

- name: Install dependencies
run: bun install --frozen-lockfile

- name: Run tests
run: bun test
93 changes: 93 additions & 0 deletions .github/workflows/native-release.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,93 @@
name: Native release

on:
workflow_dispatch:
push:
tags: ["v*"]

permissions:
contents: write

jobs:
binary:
strategy:
fail-fast: false
matrix:
include:
- os: ubuntu-24.04
platform: linux-x64
archive: tar
- os: macos-15-intel
platform: macos-x64
archive: tar
- os: macos-15
platform: macos-arm64
archive: tar
- os: windows-2022
platform: windows-x64
archive: zip
runs-on: ${{ matrix.os }}
steps:
- uses: actions/checkout@v4
- uses: actions/setup-python@v5
with:
python-version: "3.13"
- name: Build standalone executable
shell: bash
run: |
python -m pip install --upgrade pip pyinstaller
python -m pip install .
pyinstaller --clean --noconfirm packaging/mist.spec
dist/mist --version || dist/mist.exe --version
- name: Package Unix executable
if: matrix.archive == 'tar'
shell: bash
run: tar -C dist -czf "mist-${{ matrix.platform }}.tar.gz" mist
- name: Package Windows executable
if: matrix.archive == 'zip'
shell: pwsh
run: Compress-Archive -Path dist/mist.exe -DestinationPath mist-${{ matrix.platform }}.zip
- name: Build Linux AppImage
if: matrix.platform == 'linux-x64'
shell: bash
run: |
mkdir -p Mist.AppDir/usr/bin
cp dist/mist Mist.AppDir/usr/bin/mist
cp packaging/appimage/mist.desktop Mist.AppDir/mist.desktop
cp mist_logo.png Mist.AppDir/mist.png
printf '#!/bin/sh\nexec "$APPDIR/usr/bin/mist" "$@"\n' > Mist.AppDir/AppRun
chmod +x Mist.AppDir/AppRun
curl -fsSL -o appimagetool https://github.com/AppImage/AppImageKit/releases/download/continuous/appimagetool-x86_64.AppImage
chmod +x appimagetool
ARCH=x86_64 ./appimagetool --appimage-extract-and-run Mist.AppDir mist-linux-x64.AppImage
- uses: actions/upload-artifact@v4
with:
name: mist-${{ matrix.platform }}
path: |
mist-${{ matrix.platform }}.*

publish:
if: startsWith(github.ref, 'refs/tags/')
needs: binary
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/download-artifact@v4
with:
pattern: mist-*
merge-multiple: true
path: release
- name: Generate package-manager manifests
shell: bash
run: |
version="${GITHUB_REF_NAME#v}"
linux_sha=$(sha256sum release/mist-linux-x64.tar.gz | cut -d' ' -f1)
mac_x64_sha=$(sha256sum release/mist-macos-x64.tar.gz | cut -d' ' -f1)
mac_arm_sha=$(sha256sum release/mist-macos-arm64.tar.gz | cut -d' ' -f1)
win_sha=$(sha256sum release/mist-windows-x64.zip | cut -d' ' -f1)
sed -e "s/@VERSION@/$version/g" -e "s/@LINUX_X64_SHA256@/$linux_sha/g" -e "s/@MACOS_X64_SHA256@/$mac_x64_sha/g" -e "s/@MACOS_ARM64_SHA256@/$mac_arm_sha/g" packaging/homebrew/mist.rb.template > release/mist.rb
sed -e "s/@VERSION@/$version/g" -e "s/@WINDOWS_X64_SHA256@/$win_sha/g" packaging/scoop/mist.json.template > release/mist.json
- uses: softprops/action-gh-release@v2
with:
files: release/*
generate_release_notes: true
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -45,3 +45,4 @@ code_puppy/bundled_skills/
.claude/hooks/ts-hooks/dist/

.json
node_modules/
35 changes: 22 additions & 13 deletions AGENTS.md
Original file line number Diff line number Diff line change
@@ -1,17 +1,26 @@
# Contributing to Code Puppy

> **Golden rule:** nearly all new functionality should be a **plugin** under `code_puppy/plugins/`
> that hooks into core via `code_puppy/callbacks.py`. Don't edit `code_puppy/command_line/`.
# Contributing to Mist

> **⚠️ Legacy Python contributor guide.** Mist is now the **Bun/TypeScript**
> application in [`ts/`](ts/). New features belong there — see the
> [Development](README.md#development) section of the README. The plugin system
> documented below belongs to the deprecated `code_puppy/` package (kept as
> `mist-py`, bug-fix-only) and is tracked for porting in
> [`docs/BUN_MIGRATION_PLAN.md`](docs/BUN_MIGRATION_PLAN.md). It is preserved
> here for contributors still working on the legacy Python codebase.
>
> **Legacy golden rule (Python only):** nearly all new functionality should be a
> **plugin** under `code_puppy/plugins/` that hooks into core via
> `code_puppy/callbacks.py`. Don't edit `code_puppy/command_line/`.

## How Plugins Work

Plugins are discovered from three tiers, loaded in order:

| Tier | Location | When to use |
|------|----------|-------------|
| **Builtin** | `code_puppy/plugins/<name>/register_callbacks.py` | Core functionality shipped with Code Puppy |
| **User** | `~/.code_puppy/plugins/<name>/register_callbacks.py` | Personal plugins, applied to every project |
| **Project** | `<CWD>/.code_puppy/plugins/<name>/register_callbacks.py` | Repo-specific plugins, shared with your team via git |
| **Builtin** | `code_puppy/plugins/<name>/register_callbacks.py` | Core functionality shipped with Mist |
| **User** | `~/.mist/plugins/<name>/register_callbacks.py` | Personal plugins, applied to every project |
| **Project** | `<CWD>/.mist/plugins/<name>/register_callbacks.py` | Repo-specific plugins, shared with your team via git |

All three tiers use the same pattern — drop a `register_callbacks.py` in a named subdirectory:

Expand All @@ -28,14 +37,14 @@ That's it. The plugin loader auto-discovers `register_callbacks.py` in subdirs.

### Project Plugins

Project plugins live at `<CWD>/.code_puppy/plugins/<name>/register_callbacks.py`.
This mirrors the project-level discovery already used by agents (`<CWD>/.code_puppy/agents/`)
and skills (`<CWD>/.code_puppy/skills/`).
Project plugins live at `<CWD>/.mist/plugins/<name>/register_callbacks.py`.
This mirrors the project-level discovery already used by agents (`<CWD>/.mist/agents/`)
and skills (`<CWD>/.mist/skills/`).

**Key details:**

- **Directory must be created intentionally.** Code Puppy will never auto-create
`.code_puppy/plugins/` — your team opts in by creating it.
- **Directory must be created intentionally.** Mist will never auto-create
`.mist/plugins/` — your team opts in by creating it.
- **Load order is builtin → user → project.** Project plugins load last, giving
them highest precedence for override-style hooks.
- **Project wins on name collision.** If a project plugin shares a name with a
Expand Down Expand Up @@ -83,7 +92,7 @@ Full list + rarely-used hooks: see `code_puppy/callbacks.py` source.

1. **Plugins over core** — if a hook exists for it, use it
2. **One `register_callbacks.py` per plugin** — register at module scope
3. **600-line hard cap** — split into submodules
3. **Cohesive modules** — split along responsibility boundaries, not line counts
4. **Fail gracefully** — never crash the app
5. **Return `None` from commands you don't own**
6. **Always run linters - `ruff check --fix`, `ruff format .`
Expand Down
Loading