Repository navigation
v0.8.9
CCHarbour v0.8.9 — Multi-provider API support, modernised docs site, premium playground theme.
New since v0.8.8
- Multi-provider API keys —
CCCFG_Resolvenow tries
DEEPSEEK_API_KEY→CCHARBOUR_API_KEY→GLM_API_KEY/
ZHIPU_API_KEY→MOONSHOT_API_KEY→OPENAI_API_KEY→
settings.jsonin order. Any OpenAI-compatible Chat Completions
endpoint (DeepSeek, GLM-4.6 / Zhipu, Moonshot Kimi, OpenAI, …) works
oncebase_urlandmodelare set insettings.json. - Docs site overhaul — MkDocs Material now ships with a light/dark
palette toggle, sticky tabbed navigation, search suggest /
highlight / share, code copy + annotation, content tabs, social
icons, and a richer pymdownx set (tabbed, details, mark, keys,
tasklist, tilde, caret, betterem). The landing page becomes a hero
with badges, an ASCII screenshot, a card grid of features, a
tabbed 30-second tour, and use cases. Getting Started is rewritten
per-OS (Linux/macOS, cmd, PowerShell) with first-session walkthrough
and per-platform build instructions. Configuration adds a Providers
section with sign-up links, indicative pricing per 1M tokens, and
coding-tier ratings. - Playground premium theme —
- Animated mesh-gradient background that drifts subtly behind the
glass panels. - Glassmorphism on banner, footer, settings and tool cards
(backdrop-filter blur + saturate). - CC logo rendered with a cyan → violet gradient and an 8 s
background-position shimmer. - Pill-shaped version chip, pulsing "online" status dot, gradient
border-mask on the footer, breathing focus glow on the input. - Primary button is a teal linear gradient that lifts on hover;
Settings and Reset get an outline "ghost" look. - Mobile breakpoint at 760 px.
- Animated mesh-gradient background that drifts subtly behind the
- Playground gains tools — JS ports of
memory(localStorage),
todo_write(withid/active_form/blocked_by) and
ask_user(in-page modal with radio options, Other free-text,
Cancel / Confirm, Esc / Enter shortcuts). The browser playground
now exposes file / web / github / memory / todo_write / ask_user
tools. - README refresh — centred hero with badges, "Why CCHarbour"
highlights, quick start, 30-second configuration guide. The
in-source feature inventory is updated from "Done (v0.5.0)" to
the current v0.8.9 set, listing all 16 builtin tools, skills,
plan / lean modes, subagents, paste collapse and dynamic box.
v0.8.8 — propose_agents gate, paste collapse, dynamic input box, bullet split, broader list of skills, and other UX polish.
New since v0.8.7
propose_agentstool — the agent batches 2+ planned subagents and
the user reviews them in an interactive multi-row selector. Space
toggles each row, A / N flip all on/off, Enter approves the filtered
list, Esc cancels the batch. The returned JSON is iterated by the
agent to calldispatch_agentonce per approved item. Inherently
consented (the user is the gate).- Second-dispatch interceptor — if the agent calls
dispatch_agent
twice in a row without going throughpropose_agents, the second call
is rejected with a redirect message asking it to batch via
propose_agents. Approved batches top up an allowance equal to the
number of approved items, so a sanctioned batch dispatches without
the gate firing again. Both counters reset at the start of each
REPL turn. - Agent block — every
dispatch_agentcall now renders an
absolute-positioned block (rule, " Agent working ", short
prompt summary, timeout + Esc hint). When the subagent finishes the
block closes with "Agent done in X.Xs (N iterations)" so wall-clock
and effort are visible. - Subagent timeout + Esc cancel — every
dispatch_agentaccepts a
timeout_s(default 120, max 600); the subagent is interrupted at
the boundary and returns[subagent timed out after Ns]. The user
can also press Esc on the input box mid-run; the subagent returns
[subagent cancelled by user]. - Paste collapse — pasting multi-line text into the box now stashes
the real content in a sidecar and shows a tidy
[pasted N lines text]placeholder. Enter expands the placeholder
back transparently; Backspace clears the paste entirely. - Dynamic input box width —
CCUI_InputInnerWidthand the frame
borders read the terminal column count and adapt (clamped to
[76, 200] inner). Wider terminals get a wider box without rebuilding.
Fixed sizes only kick in below 76 cols or above 200. - Bullet-run split (CCMD) — when a model emits an entire list on a
single line joined by-markers (no newlines),CCMD_SplitBulletRun
splits it into one virtual line per item before rendering. The split
applies both mid-stream (CCMD_Feed) and at end-of-turn (CCMD_Flush). - Stricter list formatting in the system prompt — both the parent
agent and subagents are told to put each list item on its own line
with-and to leave a space around**bold**so the surrounding
whitespace survives. - 5 new skills shipped under
.ccharbour/skills/—brainstorming,
writing-plans,tdd,debugging,code-review(each with EN+ES
auto-trigger patterns). /lean— toggles a minimal system prompt (no skills section, no
CC.md, no memory.md, no narration block) to save ~500-800 tokens
per turn.[lean]badge in the status line.
v0.8.7 — Subagents: dispatch_agent tool with isolated context and filtered tool registry.
New since v0.8.6
dispatch_agenttool — the agent can now spawn an isolated
subagent on a self-contained subtask. The subagent has its own
conversation, its own (filtered) tool registry, and the parent only
receives the subagent's final reply. The parent's context stays small
while exploration / multi-file searches / focused investigations run
in the subagent.- Two agent types:
explore(default) — read-only toolset:read,glob,grep,
github_read,memory,use_skill. Cannot modify the codebase or
run shell commands. Ideal for "where is X used?" and survey tasks.general— full toolset (write, edit, shell, github_write, web_*,
todo_write, ask_user). Subagent can perform real work in isolation.
- No recursion —
dispatch_agentis always filtered out of a
subagent's registry, so a subagent cannot spawn another one (yet). - Inherently consented —
dispatch_agent, likeuse_skill,
ask_userandtodo_write, bypasses the permission gate; the user
asked for the work, the agent just delegates a piece of it. - Synchronous v1 — the parent blocks until the subagent finishes.
Parallel multi-agent dispatch is a future enhancement once the thread
model is in place.
v0.8.6 — Lean mode (/lean) for token-saving sessions.
New since v0.8.5
/lean— toggles lean-mode. While active,CCUI_SystemPrompt
returns a minimal prompt (no skills section, noCC.md, nomemory.md,
no narration block). Per-turn input drops by ~500-800 tokens (from
~2900 down to ~2100 on a vanilla "hi"). Useful late in long sessions
when context is filling up or when working against an expensive model
(Claude, GPT) where each input token matters./lean off— restores the full system prompt. The first system
message in the conversation is updated in place so the next turn sees
the change immediately.[lean]badge — appears in the status line under the input box
while lean-mode is active, alongside any other badges (plan-mode,
active skills).- Auto-cleared by
/clear: a session reset rebuilds the system prompt
from scratch and always uses the lean state in effect at that moment.
v0.8.5 — Richer todo_write: ids, blockers and present-continuous active labels.
New since v0.8.4
todo_writegot three new optional fields:id— a string identifier for the task. Other tasks can refer to
it from theirblocked_bylist to declare a dependency.active_form— the present-continuous label rendered in place of
textwhile that task isin_progress(e.g."Running tests"instead
of"Run tests").blocked_by— an array ofidstrings naming the tasks this one
depends on. If any of those is still pending or in_progress, the
blocked task renders indented, dimmed, with a↳glyph and the
(blocked)suffix; once every blocker is completed, it returns to its
normal style.
- Renderer upgrade —
CCUI_TodoBlocknow honoursactive_formfor
in_progress items and visually differentiates blocked items so the
dependency chain is obvious at a glance. - Backwards compatible — items that omit the new fields render
exactly as before. - Tool description carries a concrete example call so the model
picks up the new shape without extra prompting.
v0.8.4 — Plan mode, expanded skill library, wider banner and input box.
New since v0.8.3
- Plan mode (
/plan) — a new command puts the session in "plan mode":
thewrite,edit,shellandgithub_writetools are locked at the
permission gate, thewriting-plansskill is auto-activated, and the
status line shows a[plan-mode]badge. The agent can read, grep, glob,
fetch and reason freely but cannot modify the codebase until the user
approves./plan <text>enters plan mode AND submits<text>as the
first planning prompt;/plan accept(or/plan go//plan approve)
unlocks the gate and tells the agent to proceed step by step;
/plan cancel(or/plan off) drops the plan and unlocks. - Skills library expanded — five new process-discipline skills
shipped under.ccharbour/skills/:brainstorming— explore intent and design before coding (clarify
goal, list constraints, sketch alternatives, pick one with reason).writing-plans— turn an approved approach into an ordered,
verifiable, multi-step plan with a done criterion per step.tdd— red/green/refactor with CCHarbour-specific test commands.debugging— reproduce, isolate, hypothesise, verify; no guessing
patches, root cause only.code-review— checklist for correctness, scope creep, security,
test coverage, readability before commit.
Each has triggers (English + Spanish), so the agent auto-activates the
matching skill when its description fits the request.
- Wider banner and input box — the welcome banner and the persistent
input frame grew from 99 columns wide to 123, giving the model 117
text columns inside the input box (was 93). The CC logo is unchanged
but now has more breathing room.
v0.8.3 — Unified tool-call block, ask_user selector polish, and richer mid-question controls.
New since v0.8.2
- Unified tool-call block — every tool call now renders as a single
block: a cyan-violet rule the full terminal width, the tool's display
label ("Bash command", "Edit", "Read", "Glob", "Web fetch", ...) on its
own line, the primary argument (command / path / pattern / url / query)
indented in bright green, and any narration the model produced on a soft
white line below. ask_userblock — the selector now paints separator, " Ask user",
blank, question, blank, options, blank, hint as one absolute-positioned
block right above the input box. Up/Down navigate with wrap-around (Down
on the last option lands on the first, Up on the first lands on the
last); each repaint lands in the same rows so the screen no longer
jitters or scrolls.- Hint tail — every question lists
Esc to cancel · Tab to amend · ctrl+e to explainin dim under the options. - Mid-question keys —
- Tab (amend) drops the highlighted option into the input box
pre-filled, so the user can edit and submit a tweaked version. - Esc cancels the question; the tool returns "User cancelled" so the
model drops that line of questioning. - Ctrl+E asks the model to explain; the tool returns a sentinel the
model interprets as "elaborate and re-ask".
- Tab (amend) drops the highlighted option into the input box
- Type in the box during a question — printable keys, backspace,
cursor keys, Home/End, Delete, Shift+Enter all edit the input box even
while the selector is up. Enter on a non-empty box submits the line
(cancelling the selector and queuing the message for the next turn);
/exitor/quitquits cc immediately;/btw <text>records a mid-turn
interrupt that the agent picks up at the next boundary. - Box prompt history — Up/Down in the input box now navigate the
history, matching the cooked-mode editor. - Cursor follows the box — while the selector waits for a key, the
visible cursor parks inside the input box rather than blinking above the
options. - Content preserved — when the question block first paints, the
scroll region scrolls up by exactly the block's height so any model
output above remains visible instead of being overwritten.
v0.8.2 — Project skills: process-discipline checklists the model can load on demand, with a status line and an auto-trigger.
New since v0.8.1
- Project skills —
.mdfiles under.ccharbour/skills/describe a
checklist or set of instructions the model can pull in for the turn. Each
skill has a name and a one-line description in YAML frontmatter; the model
sees the list at session start and activates one with the newuse_skill
tool. - Status line — the input box gained a fourth row that lists the
currently active skills as bracketed orange tags (e.g.[superpowers]),
so it is always clear which discipline is in effect. - Auto-trigger — a skill can declare a
triggers:line of
comma-separated regex patterns in its frontmatter; if the user's input
matches, the skill activates automatically, its body is injected into the
conversation as a system note, and a[skill 'X' auto-activated]line is
printed in the scroll. No regex match → no activation. /cavemancommand — first-class slash command that activates the
caveman skill (ultra-compressed terse replies). Generalises to any skill
via the sameCCREPL_ActivateSkillpath.- Sample skills shipped —
.ccharbour/skills/superpowers.md
(brainstorm → plan → execute → verify checklist) and
.ccharbour/skills/caveman.md(terse-mode rules). - System prompt awareness — the available skills are listed in the
system prompt so the model knows what is on offer without loading every
body up front.
v0.8.1 — Input box polish: white user echo and translucent-green "Suggested next".
New since v0.8.0
- User prompt echoed in white — every submitted prompt is now reprinted
in bright white in the scroll above the input box, so the transcript shows
what was asked alongside the model's reply. Mid-turn queued messages are
echoed the same way when they get handled. - "Suggested next" pre-filled in the box — the model's
Suggested next:
line is loaded into the input box as a translucent green suggestion. Press
Tab to accept it as the message, Backspace/Delete to clear it, or just
start typing to replace it. The cooked-mode fallback already had this; box
mode now matches.
v0.8.0 — Linux and macOS support: cc now builds and runs on all three platforms.
New since v0.7.0
- Linux & macOS builds — new
cc_linux.hbp/cc_mac.hbpproject files,
abuild_cc_linux.shscript, andbuild-linux/build-macCI workflows.
Every tagged release now ships a Windows, Linux and macOS binary. - POSIX console backend —
ccconsole_mac.crenamed toccconsole_posix.c
and shared by the Linux and macOS builds (termios/select, no OS-specific
code). Added theCCCON_SizeandCCCON_KeyPendingfunctions it lacked. - Cross-platform shell tool — the
shelltool ran commands only through
cmd.exe; it now uses/bin/shon Linux and macOS. Without this every
shell command failed on those platforms. - Auto-created settings — on first run CCHarbour writes a default
.ccharbour/settings.jsonso the configuration is there to discover and
edit. - Build-project fix —
cc_mac.hbpwas missingccprompt.prg, leaving
the macOS build broken since the always-visible prompt landed.
v0.7.0 — Shell command timeouts with a live countdown, plus reliability fixes.
New since v0.6.0
- Shell timeout — the
shelltool now bounds how long a command may run.
Set it with theshell_timeoutsetting (default 30s), an optional per-call
timeoutargument, or — whenshell_timeoutis 0 — an automatic
per-command estimate. - Live countdown — while a shell command runs, the REPL shows the
configured timeout and the seconds still left, updated in place. - Reliability fixes — repaired the timed-shell path: a missing
fileio.chinclude (F_ERRORundefined), an undefinedhb_TempFile()
link error, and a broken exit-code marker. Completion detection and the
real exit code now come fromhb_processValue. - UTF-8 sanitising — tool results are scrubbed of invalid Unicode
(CC_SanitizeUTF8) so they cannot break the API request JSON. - Better API errors — API failure messages now include a dump of the
HTTP response body. - Docs — documented the shell timeout; corrected web search to DuckDuckGo.
v0.6.0 — Massive refactor: all files and functions renamed from ds* to cc* prefix.
New since v0.5.1
- File renaming — all source files renamed from
ds*.prgtocc*.prg(e.g.dsui.prg→ccui.prg) - Function prefix change — all public and static functions renamed from
DS*toCC*
(e.g.DSUI_Version()→CCUI_Version(),DSREPL_Out()→CCREPL_Out()) - Build system updated —
.hbp,.bat, test files and README all reflect the new names - All 340 tests pass with 0 failures
v0.5.1 — Playground fixes and updated documentation.
New since v0.5.0
- Playground fixes — removed unused parameter in
web.js, fixed registry test sort order - Documentation — updated module table in README with detailed descriptions for all components
v0.5.0 — DuckDuckGo web search (no API key needed), refactored REPL, Harbour ship logo, and more.
New since v0.4.0
- DuckDuckGo web search — replaced Tavily with DuckDuckGo Instant Answer API, no API key required
- REPL refactor — cleaner multi-turn agent loop, fixed
LoadSessionbug, portable paths - Harbour-style ship logo — new project branding in the startup banner
- Spinner throttle — slowed down from 30 ms to 100 ms for less flicker
- Default model fix — restored to
deepseek-v4-flash
Previous features (v0.1.0 — v0.4.0)
- Pause tool execution with Escape, web & GitHub tools, memory tool, web playground,
conversation persistence, token cost tracking, multi-line input, Ctrl+C cancel,
animated reasoning spinner, co_author setting, diff improvements, CI/CD
Usage
REM Windows
set DEEPSEEK_API_KEY=sk-...
cc.exe
# Linux / macOS
export DEEPSEEK_API_KEY=sk-...
chmod +x cc-linux && ./cc-linux
This release ships three standalone x64 binaries: cc.exe (Windows, no DLLs
required), cc-linux (Linux) and cc-macos (macOS).