Files
codecraft/CHANGELOG.md
T
Richard ZinkandClaude Opus 5.5 1e8418336d Value opencode Go plan requests; per-duration cache prices; usage under answers
- opencode Go reports plan requests as cost 0 with the usage in allowance;
  ModelConfig::cost values them at the model's list prices (charged amounts
  and free requests stay as reported). Rows booked at 0 are valued once on
  start (idempotent).
- opencode's price list now has per-duration cache prices for some models
  ({"30m": ..., "12h": ...}): the shortest duration is used, also in tiers.
  Saving the provider's models failed with "untagged enum ModelEntry".
- Each answer shows tokens sent/received and the cost of the turn's requests
  (usage.cost filled when messages are saved and loaded).
- The chat title keeps a minimum width in a crowded top bar.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-12 07:58:23 +01:00

21 KiB
Raw Blame History

Changelog

All notable changes to CodeCraft. Versions follow Semantic Versioning; until 1.0, minor versions may contain breaking changes.

[Unreleased]

Added

  • Tokens and cost under every answer: a small line under each answer of the model shows the tokens sent/received and the cost of all requests of that turn.

Fixed

  • Total cost of chats stopped growing (opencode Go): opencode now reports plan requests as "nothing charged" (cost 0, usage in allowance), and CodeCraft took the 0. Plan requests are valued at the model's list prices again; earlier ones are corrected once on start.
  • Saving opencode Go models failed after fetching prices ("data did not match any variant of untagged enum ModelEntry"): opencode lists cache prices per duration for some models ({"30m": …, "12h": …}); the shortest duration is used now.
  • The chat title in the top bar no longer shrinks to a single letter when there are many chips.

[v202611-00022] – 2026-11-11

Added

  • Theme "Tintenblau" (dark: ink blue with cream text; light: paper with dark ink), from the Tintenblau desktop theme; also in the terminal client.

[v202611-00021] – 2026-11-11

Added

  • Commits of agents name the model: every git commit an agent makes gets the trailer Co-Authored-By: <model> (<provider>) via CodeCraft (a git wrapper in the agent shell, also in the sandbox; your own commits stay unchanged). The text is set under Settings → General (server.commit_trailer, {model}, {provider}, {model_id}; empty = off).

[v202611-00020] – 2026-11-11

Added

  • Reverse engineering outside craft: Settings → Agents & commands can give any mode the binary_info and decompile (Ghidra) tools; the clean-room rule stays a craft rule.
  • Raw firmware in decompile: optional processor (Ghidra language id, e.g. ARM:LE:32:Cortex) and base_address for images without a file format (.bin, converted .hex).
  • Skill "reverse-engineering": how to identify, decompile and explore programs and firmware (processor table for common chips, HEX conversion, notes in analysis/).

[v202611-00019] – 2026-11-11

Added

  • Search in a chat: the magnifier in the chat's top bar searches all of it (messages, tool output) on the server; a hit loads its part of the chat and marks the message.
  • Media of a chat: ⋯ → Media shows every image, video and audio file of the chat and its subagents – generated images, screenshots, files the agent wrote, media in answers, your attachments – filterable, large view, "show in chat" jumps to the message.

Changed

  • Long chats stay fast: a chat opens with its messages since the last summary (at most 200); older ones load when scrolling up, the history before a summary on request. Finished turns fold into one line ("42 steps · 3 files", the answer stays visible). Typing, streaming and status changes no longer re-render the whole history, and tool output is only built when a card is opened. Measured with a chat of 5,900 messages: opening 9 s → 0.7 s (phone-like CPU: 22 s → 1 s), typing 440 ms → 25 ms per key.

[v202611-00018] – 2026-11-10

Added

  • Enforced reviews: when a review is configured for a mode, every todo the agent marks completed is reviewed; with findings the todo is reopened and the agent has to fix them and complete it again (up to the configured rounds per todo). Ending the turn with open todos sends the agent back to work as long as it makes progress – for unattended runs, e.g. overnight (such modes may take up to 2,000 steps per turn). The chat shows passed reviews and these reminders; Settings → Modes can switch it off per mode (then only one review at the end of a turn, as before).
  • Max input per model: providers that limit the input below the context window (e.g. 272k of 400k) are taken into account; fetched from the model catalogue, editable in the provider settings.

Fixed

  • Context overflow instead of compaction (e.g. DeepSeek V4.1 Flash with 384k max output): requests asked for the model's full max output, and providers count input + output against the window, so long chats failed before automatic compaction kicked in. The output budget is now what the window leaves, the chat is compacted when no reasonable room for an answer is left, and a "context too long" error compacts and retries once instead of stopping. A turn that hits the step limit now says so.

[v202611-00017] – 2026-11-10

Added

  • Markdown in your messages: your messages are shown formatted like the model's answers (headings, lists, tables, code blocks, quotes, bold/italic); single line breaks stay as typed. The eye button next to the text field shows a preview of the formatted message before sending.

[v202611-00016] – 2026-11-10

Fixed

  • Phone: page stayed shifted after the keyboard closed – the top bar (menu) was out of reach. On Android the keyboard now shrinks the page instead of shifting it (interactive-widget=resizes-content; the chat stays at its latest message); browsers that still shift the page (iOS Safari) get it scrolled back once the keyboard closes.

[v202611-00015] – 2026-11-10

Fixed

  • Generated images missing on other devices: when an agent moved or renamed a generated image afterwards (e.g. sorted it into subfolders), the gallery pointed to the old file – only the device that had it in its browser cache still showed it. Now:
    • generated images are also kept in the image store and shown from there when the file is gone (existing images get their copy on the first start);
    • their entries follow moves and renames: after an agent's mv/rename, when moved with the file manager, and on the next view (found by file name, or by content when renamed);
    • in the chat, an image that cannot be found falls back to the preview the model saw.

[v202611-00014] – 2026-11-10

Added

  • New folder in the folder picker: creating an automation or a chat, New folder creates a subfolder of the shown folder and selects it.

[v202611-00013] – 2026-11-10

Added

  • Automation editor: New automation asks for name, project and a starting point (blank example structure or a template), creates .codecraft/jobs/<name>.md and opens an editor: the instructions in a Markdown editor, schedule and settings next to them, and an assistant chat in which a model works out the instructions with you and edits the file (reloaded after each answer). New automations start switched off.
  • Graphical schedule: every few minutes, hourly, daily, on weekdays, monthly or a cron expression, with the next runs in server time.
  • Chat list: folders and projects can be dragged into any order or moved and pinned to the top via their menu; the order is kept per user on all devices. A new message moves the chat to the top of its folder or project, no longer the whole project.

Changed

  • Automation files hold only the instructions; name, schedule, mode, model, approval mode and time limit are settings of the automation. Existing job files are taken over on the first start (settings into the database, the frontmatter removed from the file). Registering a plain Markdown file creates a switched-off automation to be scheduled in the editor.

[v202611-00012] – 2026-11-10

Added

  • Approval mode of automations in the list: Automations shows the approval mode of each automation as a selection; the change is written into the job file and applies from the next run. "Allow everything" lets nightly runs work without waiting for approvals (they used to wait for an answer via Telegram until the timeout).
  • Telegram per chat: ⋯ → Send questions to Telegram (shown with a paired bot) decides whether approvals and questions of that chat and its subagents are sent to Telegram. New chats from the web UI and automation runs start with it switched off (they stay in the web UI); chats started from Telegram and existing chats keep reporting. The chat currently open in Telegram always reports.

[v202611-00011] – 2026-11-09

Added

  • Collapsible task list: the model's task list above the composer folds to one line (progress and current task) with a click on its heading; the choice is kept per device.
  • Square and short screens (e.g. Clicks Communicator, phones in landscape): tighter top bar, composer and new-chat wizard, so the chat keeps most of the height.

Fixed

  • Blank page on phones after the update: installed apps (PWA) checked their service worker at its old URL, got the web page instead of a script and therefore kept the previous app version forever. With the new image format of v202611-00010 that old version crashed after showing the chat for a moment. Old service worker URLs now get the clean-up worker, which removes the stale worker and reloads the current version. Missing scripts/styles answer 404 instead of the web page.

[v202611-00010] – 2026-11-09

Changed

  • Chats with many images load much faster: images (screenshots, generated images, pasted images) are stored separately instead of inside the messages and load on demand when they scroll into view, cached by the browser. Large PNGs without transparency are stored as JPEG. Older chats are converted once on the first start; the database usually shrinks a lot. Example: a chat with 120 screenshots loads 1.5 MB instead of 66 MB.
  • Compressed responses: the API and the web UI are sent with gzip/brotli (not images, downloads or live streams).

[v202611-00009] – 2026-11-09

Fixed

  • Sandbox on x86_64: the start-up check of bubblewrap did not mount /lib64, so it failed on amd64 hosts and shell commands of non-admin users were disabled.

[v202611-00008] – 2026-11-09

Added

  • Instructions per chat: ⋯ → Instructions for this chat (Telegram: /prompt) sets rules that apply to every message of that chat on top of the mode – language, tone, the part of the project to work on. A chip in the header shows when a chat has them; forks keep them.

Fixed

  • OpenAI-compatible providers: tool results no longer carry a name field. Gateways that translate to Anthropic (opencode) rejected the request with "anthropic-messages cannot preserve named conversation participants".
  • Telegram: the token field is no longer filled in by the browser's password manager, the bot token is found in whatever is pasted (also the whole BotFather message), and a wrong format gets a clear message instead of "HTTP 404".

[v202611-00007] – 2026-11-09

Added

  • Telegram bot as a chat interface: every user can connect their own bot (Settings → Account → Telegram: token from @BotFather, then /start <code> pairs it with their Telegram account – other chats are ignored). Messages, photos and files go to the current session; the agent's steps show live, the answer comes formatted, images from tools come as photos, and approvals and questions have buttons. Commands like the terminal client: /sessions, /session, /new, /clear, /mode, /model, /permissions, /effort, /stop, /status, /costs, /memory, /jobs, /compact, /help. The server polls Telegram – no public webhook needed.

[v202611-00006] – 2026-11-09

Added

  • The image contains the Docker CLI (static client). With the host's /var/run/docker.sock mounted (and its group), admins' agents and terminals can use the host's Docker; scripts/move-server.sh --docker-sock sets this up on a new host.
  • scripts/move-server.sh --tools-dir DIR: agent home, users' homes and /tmp on a separate disk.

[v202611-00005] – 2026-11-09

Fixed

  • Commits by agents, terminals and the git panel always use the name and e-mail from Settings → Account → Git – also in repositories that have their own user.name/user.email (agents had set those as a workaround while no identity was configured). Agents are told not to change the git identity.

[v202611-00004] – 2026-11-09

Added

  • Chats side by side: Open beside in a chat's sidebar menu shows up to three chats as columns, each with its own tabs and composer (desktop).
  • My modes: every user can create personal modes under Settings → My modes (kind, tools, read-only, prompt, model); they appear only for that user.
  • Budget warnings as push notifications for admins (warning share and 100 %) for the total, provider and image budgets and the opencode Go windows; the status overlay shows all budgets.
  • scripts/move-server.sh moves an installation to another Docker host with bind mounts (e.g. Unraid), scripts/smoke-test.sh checks a running instance.

Changed

  • File manager tabs of a chat are stored on the server, so they are the same on every device.

[v202611-00003] – 2026-11-09

Added

  • The Docker image ships the terminal client again (static Linux x86_64 and aarch64 binaries): curl -fsSL https://<your-server>/cli/install.sh | sh, download links in the settings and codecraft update work without building from source.
  • File manager: Open chat here in a folder's menu starts a chat in that folder.
  • Tabs in a chat: open terminals and file managers next to the chat (topbar buttons or "+" in the tab strip), as many as needed. Terminals of a chat keep running on the server until they are closed, so they are there again after a reload or on another device (output is replayed); they end when the chat is deleted or the server restarts.
  • Chat mode: New session → Just chat (and mode chat) for plain conversation – a lean prompt with date and personal memory, web search and fetch only, no project or files.
  • Own modes: Settings → Agents & commands → New mode with kind (coding or conversation), read-only switch, tool checkboxes, prompt, model and review loop; custom modes show up in New session and the mode selector.
  • The chat shows when the conversation is being compacted – automatically because the context is nearly full (with tokens and share of the limit) or on request – and labels the summary.

Changed

  • The mode selector in the composer is a dropdown.

Removed

  • Settings → Config file no longer offers to move ${NAME} values into the configuration (a one-time migration); ${NAME} references keep working.

Fixed

  • Session updates from background tasks (title, token usage, phase, todos) and from the UI no longer overwrite each other. Often the first answer's token usage was lost, so automatic compaction and the context display started one turn late.

[v202611-00002] – 2026-11-09

Added

  • opencode prices: Fetch prices reads prices, context and output limits, image input and reasoning from opencode's model list (Zen and Go), including long-context tiers and peak-hour or date-based factors. Costs apply them per request (price_tiers, price_multipliers on a model).
  • opencode costs and Go limits: the cost opencode reports per response is recorded instead of an estimate, and with a plan limit on the provider the Go allowance is tracked in the 5-hour, 7-day and monthly windows (budget table and status overlay; usage through CodeCraft only).
  • Settings → Config file lists ${NAME} references and moves the values of set variables into the configuration, so .env only needs deployment settings.

Changed

  • Examples and forms no longer suggest environment variables for keys; .env.example holds deployment settings only.

[v202611-00001] – 2026-11-09

Added

  • Image generation picks the model: the agent drafts cheap previews, asks which one to refine (with the price of the final model), then creates the final image with the best model for the purpose (photo, illustration, text, design). Models that take a reference image (Nano Banana Pro edit) refine the chosen draft. Known fal.ai models come with sensible defaults; stage, good_for and reference_param in [images].models override them.
  • Restore a backup in Settings → Audit: a stored backup or an uploaded zip. The current state is backed up first (…-before-restore.zip), then CodeCraft restarts with the restored database and configuration.
  • Test connection in the provider form checks URL and key before saving.
  • Status LEDs in the sidebar for server connection, models and MCP servers (green, yellow, red in vivid variants of the theme colors); a click opens an overview of every provider and MCP server with its state, latency and tool count.
  • scripts/release.sh: tag, multi-arch image and Gitea release in one step.

Changed

  • Saving a provider (or reloading providers) checks its status right away instead of at the next five-minute check.

Fixed

  • opencode Zen/Go: requests carry the session in x-opencode-session; opencode Go rejected them without it ("Request is missing x-opencode-session").
  • Two backups in the same second no longer overwrite each other.

0.1.0 – 2026-11-09

First public release.

Agents and chat

  • Agent loop with streaming, task lists, subagents (parallel and in the background, on other models), skills, slash commands, AGENTS.md / CLAUDE.md, automatic context compaction.
  • Modes: build, plan (read-only) and craft (study a website, app, game or old program and build your own version, with visual comparison, clean room or deep mode), plus custom modes and subagents. Review loops per mode.
  • Tools: files, shell with background processes, web fetch and search, LSP diagnostics after edits, OpenSCAD for 3D printing, Ghidra for old binaries, image generation (fal.ai), and an interactive browser (click, type, run JavaScript, screenshots, console errors; private network addresses are blocked).
  • MCP servers (stdio and Streamable HTTP, elicitation, tools loaded on demand).
  • Permissions per tool and per shell command pattern, modes ask, auto, accept edits and bypass; permission cards with diffs; questions from agents and MCP servers.
  • Checkpoints and rewind, fork, regenerate, accept changes hunk by hunk, git worktrees per session, reasoning effort per message, voice input, @file mentions, attachments.
  • Project memory (.codecraft/memory.md, written by the agent) and personal memory.
  • Hooks before and after tool calls, on prompts and at the end of a turn.

Models

  • Anthropic natively and every OpenAI-compatible API (Gemini, OpenRouter, opencode, fal.ai, Ollama, vLLM, llama.cpp, LM Studio).
  • Prices per model, concurrency limits per host and model, monthly budgets.
  • Model fallback when a host is unreachable or a budget is used up.
  • Provider status: every 5 minutes each provider's model list is checked (no tokens).

Web app

  • Installable PWA with push notifications (permissions, questions, finished turns) and a share target: text and links shared from other apps start a chat or go into a recent one.
  • Guided start screen, file manager with previews (PDF, Office, 3D models, images), web terminal, image gallery, git panel.
  • Command palette (Ctrl/Cmd+K) and keyboard shortcuts; prompt templates with placeholders (personal and global); sessions can be pinned, archived and filed into folders, grouped by date or project.
  • Statistics: tokens, cache hits, time to first token, prefill and output speed and cost per request; cost and tokens per day, an activity heatmap of the last 14 days, tables per model, provider, mode, user and session. Optional daily cost summary as a push at 20:00.
  • 15 colour themes, each light and dark; English and German.
  • "What's new" after updates; admins see when a new release is available.

Automations and integrations

  • Automations: agents on a cron schedule from a Markdown job file, created by an agent, from a template or by hand; incoming webhooks start them (shared secret or Gitea/GitHub HMAC signature; the payload is passed to the agent).
  • API tokens with full or read-only scope.
  • Prometheus metrics at /metrics (own bearer token) and JSON logs (CODECRAFT_LOG_FORMAT=json).
  • Backups: daily zip of database and config, keep 30, optional copy to any S3-compatible bucket; download from the settings.

Terminal client

  • codecraft: a full-screen terminal client like Claude Code or opencode. The agent loop, tools and history stay on your machine; models, modes, rules, skills and the theme come from the server, which counts usage and costs. Also runs without a server: a guided setup connects Anthropic, OpenAI, Gemini, OpenRouter, opencode or local servers (Ollama, LM Studio, llama.cpp/vLLM, detected automatically).
  • No prebuilt binaries in this release: install it from source with cargo install --locked --git https://git.familie-zink.org/zink/codecraft codecraft-cli.

Users and security

  • Local accounts (Argon2) and single sign-on via OpenID Connect; admins and users, private folders per user, shared folders, read-only session sharing, audit log.
  • Shell commands of non-admin users run in a bubblewrap sandbox.
  • Multi-arch Docker image (amd64, arm64).