CodeSeeq v0.3.4
v0.3.4 - 2026-07-07
Changed
- Version bump to v0.3.4.
v0.3.3 - 2026-07-07
Added
CODESEEQ_REASONING_EFFORTenvironment variable. Controls the
reasoning effort level forwarded to DeepSeek for thinking-enabled
models. Accepted values:minimal,low,medium,high,xhigh,
max. The bridge mapslow/medium→highandxhigh→max
to match DeepSeek's supported levels.- Reasoning summary wiring in the launcher. When thinking is enabled,
thecodeseeqlauncher now exportsMODEL_SUPPORTS_REASONING_SUMMARIES=true
andMODEL_REASONING_SUMMARY=auto, corresponding to the updated model
catalog entries. When thinking is disabled, both are set tofalse/none.
Fixed
- Bridge reasoning-effort resilience. The bridge now handles missing or
non-dictreasoningfields in thinking-enabled requests without crashing.
Whenreasoningis absent, falls back to theCODESEEQ_REASONING_EFFORT
environment variable, defaulting to an empty string (conservative). Also
adds a truthiness guard soeffort=""does not trigger the mapping logic. - Thinking-model catalog entries updated.
deepseek-v4-flash-thinking
anddeepseek-v4-pro-thinkingnow correctly declare
supports_reasoning_summaries: truewithreasoning_summary: "auto"and
supported_reasoning_levels: [{level: "high"}, {level: "max"}]. This
fixes Codex treating these models as non-thinking-capable.
Changed
- Model catalog formatting.
config/codex-model-catalog.jsonentries
reformatted for consistency (expanded inline-objects to multi-line).
v0.3.2 - 2026-06-29
Fixed
tty: trueforced on all shell/exec tool calls. The bridge now
unconditionally setstty: trueon everyshell,exec_command,bash,
and related tool call before forwarding to Codex. This keeps stdin open
for subsequentwrite_stdincalls, preventing "stdin is closed for this
session" errors when the model pipes input to a running command. Non-
interactive commands work fine withtty: true— they just complete
normally.update_planexplanation stripped before Codex forwarding. Codex's
Rust tool router rejectsexplanationat the top level ofupdate_plan
arguments as an unknown field (its struct doesn't include it despite the
prompt mentioning it). The bridge now stripsexplanationfrom
normalized arguments before forwarding, so Codex can parse the call
without "unknown field explanation, expected step or status" errors.- Tool steering instruction updated. The injected steering message now
documents thatexec_commandalways requirestty: true.
v0.3.1 - 2026-06-27
Added
- Uncensored mode (
-U/--uncensored-mode). Loads the Dolfino (Dirty D)
uncensored system prompt fromconfig/uncensored.mdfor unrestricted interactions
with no content filtering or moralizing guardrails. Also settable via
CODESEEQ_UNCENSORED_MODE=trueenvironment variable. The flag is safe to use
alongside any other CodeSeeq flags and subcommands. - Privacy hardening (default-on). Every generated Codex config now includes:
web_search = "live"— live web search enabled[analytics] enabled = false— analytics disabled[feedback] enabled = false— feedback disabled[otel] exporter/metrics_exporter/trace_exporter = "none"— all OpenTelemetry
pipelines disabled[otel] log_user_prompt = false— raw prompt content not logged[history] persistence = "none"— history persistence disabled
- Upstream Codex command blocking. Commands that contact OpenAI/ChatGPT services
(login,logout,cloud,app,app-server,plugin,update,features,
remote-control) are blocked by default with a clear error message. Override via
CODESEEQ_ALLOW_UPSTREAM_CODEX_SERVICES=true. OPENAI_API_KEYno longer auto-populated fromDEEPSEEK_API_KEY. Direct
DeepSeek-only auth; no implicit key aliasing for OpenAI-shaped tooling.- Codex version pinned to
0.130.0. Both Dockerfile (ARG CODEX_NPM_VERSION)
and Makefile (CODEX_NPM_VERSION) default to a pinned release instead oflatest.
Installer no longer auto-fetches@openai/codex@latestwithout
CODESEEQ_ALLOW_LATEST_RELEASE=true.
Fixed
- Bash 3.2 compatibility for empty array expansion. The
_CODESEEQ_KEPT_ARGS
array expansion at end of flag pre-parse loop now uses the${array[@]+"${array[@]}"}
pattern to avoid "unbound variable" errors on macOS (bash 3.2) and other older
shells. Fixes./codeseeq --uncensored-modeand other invocations that consume
CodeSeeq-specific flags without passing any remaining arguments to Codex. - Uncensored mode recursion guard. The uncensored mode code now sets
CODESEEQ_UNCENSORED_DONE=trueand unsetsCODESEEQ_UNCENSORED_MODEin the
child process to prevent infinite recursion when"$SELF_PATH" system add -f
re-enters the launcher with the same env var set.
Changed
- Installer no longer auto-installs
@openai/codex. Theinstallsubcommand
no longer runsnpm install -g @openai/codex. Users install Codex manually with
npm install -g @openai/codex@0.130.0(pinned version shown in the error message). - Host runtime Codex version check prints pinned version.
run_host_codex()now tells users to install@openai/codex@0.130.0instead of
the unversioned package. check.shextended. New assertions validate privacy hardening config content,
blocked upstream commands, pinnedCODEX_NPM_VERSIONin both Dockerfile and
Makefile, and thatOPENAI_API_KEYis not auto-exported fromDEEPSEEK_API_KEY.
v0.2.9 - 2026-05-12
Fixed
- Flags after
runnow parsed before runtime dispatch.
./codeseeq run --runtime-mode host --bridge-mode process "hello"correctly routes to host runtime. - Host diagnostics no longer require container.
models,doctor, andconfigwork without Docker/Podman in host runtime mode. - Process bridge cleanup verified. Owned bridges stopped on all exit paths (EXIT/INT/TERM/HUP).
- Prompt temp files no longer leak.
TMP_FILESproperly tracked after command substitution. - External mode supports
/v1/trailing slash. - 0.0.0.0 bridge host now writes
127.0.0.1in client config (warning printed). make bridge-process-smokeno longer leaks processes. POSIX-safe script with cleanup trap.- Container bridge smoke updated with correct model IDs and bridge host binding.
- Doctor output cleaned up — "Bridge URL" instead of "OpenResponses", runtime/bridge mode fields.
- Package hygiene strengthened —
make clean-artifacts,make package-check, docs warn against manual zips. - No Codex source modified. No upstream
open-responsesruntime dependency.
Added
- Host-native bridge process mode.
CODESEEQ_BRIDGE_MODE=processstarts
bin/codeseeq-bridge.pyas a direct child process on the host with no
Docker or Podman required. All four bridge modes are supported:process,
container,external, andauto(default, prefers process when Python
dependencies are available, falling back to container). - Host runtime mode.
CODESEEQ_RUNTIME_MODE=hostlaunches Codex directly
on the host alongside a process bridge, without going through the container
runtime at all.containerandauto(default) remain available. - External bridge mode.
CODESEEQ_BRIDGE_MODE=externalwith
CODESEEQ_BRIDGE_BASE_URLlets CodeSeeq talk to a pre-existing bridge
without starting anything locally. - Bridge reuse.
CODESEEQ_BRIDGE_REUSE=1causes CodeSeeq to check for a
healthy bridge at the configured port and reuse it instead of starting a
new one. - CLI flags for bridge configuration.
--bridge-mode,--bridge-url,
and--bridge-portare now accepted on thecodeseeqlauncher and the
runsubcommand so bridge mode can be set per-invocation without
environment variables. - Unified CI release pipeline. Release step merged into
ci.yml— runs
only on tag pushes (v*) after all checks pass.
Changed
- Dockerfile no longer pulls
open-responsesnpm dependency. The
upstreamopen-responsespackage was removed from the container image
build. The actual runtime bridge is entirelybin/codeseeq-bridge.py. - Bridge mode architecture rewrite. The launcher now has a unified
bridge_start()abstraction that selects between process, container,
external, and auto modes with consistent health-check and cleanup
behavior. Process-mode owned bridges are stopped on launcher exit.
Notes
- No Codex source was modified. The bridge remains a drop-in
Responses-compatible API that Codex talks to exactly as it would talk to
any OpenAI-compatible provider. wire_api = "responses"in the generated Codex config stays because Codex
expects that value; it does not mean the upstreamopen-responsespackage
is used.
0.2.8 - 2026-05-12
Fixed
- Version bump and release process improvements.
0.2.7 - 2026-05-08
Added
codeseeq nukesubcommand. Uninstalls all CodeSeeq user artifacts — the
installed snapshot at~/.config/codeseeq, the launcher at~/bin/codeseeq,
and any leftover~/.codeseeqstate — with a confirmation prompt before
removal. The local repo checkout and container images are left untouched.
Changed
- README.md description rewritten. The first paragraph now describes
CodeSeeq as a "drop-in launcher and CLI wrapper" rather than a "command
switch", better reflecting its role as a full launcher/substitute that
manages container runtime, bridge lifecycle, configuration, and DeepSeek
model wiring. - CodeSeeq splash image. The
codeseeq.jpgimage was added to the README
between the introductory paragraph and the version/release-notes section. - Version bumped to
0.2.7. UpdatedVERSION,README.md, and all
doc-version references indocs/ARCHITECTURE.md,docs/SECURITY.md, and
docs/TROUBLESHOOTING.md.
Fixed
- Typo
--sanboxin README.md and doc examples. The documented alias
examples inREADME.md,docs/TROUBLESHOOTING.md, anddocs/SECURITY.md
were using--sanboxinstead of the correct--sandbox. Fixed to show the
proper flag spelling while keeping--sanboxas an accepted internal alias.
0.2.6 - 2026-05-08
Added
- Container-launcher rewrite. The
./codeseeqlauncher was substantially
rewritten with robust configuration defaults, helper functions (warn,
bool_normalize), and expanded environment-variable plumbing for
CODESEEQ_MODEL,CODESEEQ_THINKING,CODESEEQ_APPROVAL_POLICY,
CODESEEQ_SANDBOX_MODE,CODESEEQ_OPENRESPONSES_PORT,
CODESEEQ_OPENRESPONSES_URL,CODESEEQ_CONTEXT_WINDOW,
CODESEEQ_HOST_CODEX_HOME, andCODESEEQ_SYSTEM_PROMPT_FILE. - System prompt injection. New
CODESEEQ_SYSTEM_PROMPT_FILE(default
${WORKDIR}/.codeseeq/system-prompt.md) is read and injected into Codex's
TOML config as a quoted string. Helper functions (system_prompt_present,
system_prompt_state,system_prompt_bytes,system_prompt_lines) report
prompt state at startup. - Workspace banner. Entrypoint prints a summary banner showing the
workspace path, version, model, approval policy, sandbox mode, key
configuration hash, and system-prompt state on each launch. .env.exampletemplate. Documented all supported environment variables
with their defaults, so users can copy.env.exampleto.envand customize.- Expanded smoke-test suite.
scripts/smoke-all.shnow runs container
smoke tests and host-cli smoke tests. Newscripts/runtime.shchecks for
container and GPU host capabilities. - Bridge binary on
codeseeq-bridge.py. The bridge now lives at its own
path (bin/codeseeq-bridge.py) in the container, launched side-by-side with
Codex rather than being embedded.
Changed
- Launcher becomes dual-purpose.
./codeseeqnow detects theinstall
subcommand automatically and delegates toscripts/install-local.sh. Running
without subcommand starts the container with all configuration variables
forwarded. CODESEEQ_WORKDIR_HOSTnow resolves symlinks. Usespwd -Pinstead of
plain$PWDso bind-mount paths are canonical.- Documentation overhaul.
README.md,docs/ARCHITECTURE.md,
docs/SECURITY.md, anddocs/TROUBLESHOOTING.mdwere rewritten with
up-to-date configuration references, container-runtime instructions, and
security/architecture guidance. - Scripts polished.
scripts/check.shextended with bridge-extraction
regression tests;scripts/package.shstreamlined;scripts/install-local.sh
updated for the new launcher layout.
Fixed
codeseeqbinary made executable in-repo. The rootcodeseeqfile now
has the executable bit set so it runs directly withoutbash codeseeq.
0.2.5 - 2026-05-07
Fixed
- Fixed split display-mangled DSML such as
<____DSML____tool_calls>...
leaking into the Codex UI after a successful tool call. The streaming buffer
now normalizes obfuscated DSML after chunk reassembly, so the block is either
converted into a tool call or suppressed instead of being shown as assistant
text. - Added missing
output_indexmetadata to streamed message/tool lifecycle
events so current Codex builds keep output deltas attached to their active
items instead of logging orphanedOutputTextDeltadiagnostics. - Fixed Responses top-level function tools being collected for steering but not
forwarded to DeepSeek's nested Chat Completionstoolsshape. This keeps
DeepSeek able to emit actual structured tool calls instead of plain bash
snippets. - Updated README, quickstart, state docs, bridge docs, and CI build metadata to
reflect the current single-container local-bridge runtime. - Added
workspace/to.gitignoreso the local repro clone does not break
git add ..
0.2.4 - 2026-05-07
Fixed
- Fixed regular
danger-full-accesslaunches emitting both--ask-for-approval ...and--dangerously-bypass-approvals-and-sandbox. Codex rejects that
combination. The launcher now omits--ask-for-approvalwhenever it emits the
bypass flag.
0.2.3 - 2026-05-07
Changed
codeseeq --yoloandcodeseeq -ynow only add Codex launch switches
--dangerously-bypass-approvals-and-sandboxand, forcodex execpaths,
--skip-git-repo-check.- Yolo mode no longer injects
--ask-for-approval never, no longer injects
--sandbox danger-full-access, and no longer rewrites
CODESEEQ_APPROVAL_POLICY/CODESEEQ_SANDBOX_MODEconfig values.
0.2.2 - 2026-05-07
Added
codeseeq --yoloandcodeseeq -ywrapper flags. They force
CODESEEQ_APPROVAL_POLICY=neverandCODESEEQ_SANDBOX_MODE=danger-full-access,
and launch Codex with--ask-for-approval neverplus--sandbox danger-full-access
and--dangerously-bypass-approvals-and-sandbox.- Direct
run/prompt shortcuts keep usingcodex exec --skip-git-repo-check.
codeseeq --yolo codex exec ...also injects--skip-git-repo-checkwhen it is
not already present.
0.2.1 - 2026-05-07
Malformed XML compatibility patch for DeepSeek tool-use output.
Fixed
- Recognizes model-invented outer tool tags such as
<exec_command><command>...</command></exec_command>,<bash>...</bash>,
and<tool_call name="...">...</tool_call>as real Codex function calls
instead of streaming them as assistant text. - Extends streaming buffering to hold those malformed tags until the closing
tag arrives, preventing visible XML leakage in the Codex UI. - Normalizes common XML argument aliases against the registered Codex tool
schema, includingcommand->cmdforexec_command/unified shell tools. - Adds focused bridge extraction regression coverage and wires it into
scripts/check.sh.
0.2.0 - 2026-05-07
DSML/tool-calling correctness pass for bin/codeseeq-bridge.py. The bridge now
properly streams tool calls to Codex CLI, normalizes display-mangled DSML in
history, and remaps emitted tool names onto whatever the client actually
registered. Drop-in replacement; no changes required to Codex, Dockerfile,
entrypoint, or scripts.
Fixed
- DSML leakage during streaming. Raw
<function_calls>...</function_calls>
XML was being streamed verbatim to the Codex TUI before the post-stream
extractor ran. Replaced withStreamingDsmlBufferthat detects DSML inline,
emits only safe text deltas, and surfaces tool-call blocks as soon as their
closing tag is seen. Buffer uses depth tracking so a nested</invoke>inside
an outer<function_calls>wrapper does not terminate prematurely. call_id: Noneonresponse.output_item.added. The added event was fired
before the tool name and call id were known, then back-filled. Now deferred
until the call has a real name and id, so Codex never sees a partial item.- Wrong delta event for function tools. Used
response.custom_tool_call_input.deltafor function-typed tools; modern Codex
listens onresponse.function_call_arguments.delta. Both are now emitted
(modern + legacy) so older Codex builds keep working. - Missing
response.function_call_arguments.done. Now emitted, in the proper
place in the lifecycle. - Broken DSML extraction lifecycle. Post-stream DSML extraction emitted only
output_item.done. Now emits the full sequence:output_item.added->
function_call_arguments.delta->function_call_arguments.done->
output_item.done(plus legacycustom_tool_call_input.delta). - Duplicate
response.completed. Deduplicated to a single emission. - Display-mangled DSML in history. Codex's TUI obfuscates
<to
<____DSML____for safe display. When that text fed back as history, DeepSeek
imitated the malformed format. Addednormalize_dsml_display()applied to ALL
inbound message content so the model only ever sees clean XML or, ideally,
structuredtool_calls.
Added
- Tool-name aliasing. Flat
TOOL_NAME_ALIASESmap — emitted name -> ordered
tuple of preferred replacements.resolve_tool_name()does exact ->
case-insensitive -> alias-prefs (only those actually registered) -> fuzzy
(difflib, cutoff 0.7) -> first preference fallback. Common variants covered:
bash/sh/execute_command/exec_command/run_command->shell;
write/write_file/create_file->apply_patch/write_file;
edit/patch/str_replace_editor->str_replace/apply_patch;
read_file/view_file/cat->view; etc. Toggle with env
CODESEEQ_BRIDGE_TOOL_ALIAS_FUZZY(default on). - Tool-use steering system message. When tools are present in the request, a
small system message is injected telling the model to emit structured
tool_callsrather than XML. Toggle via envCODESEEQ_BRIDGE_TOOL_STEERING
(default on). - Stricter error handling for upstream stream.
httpx.RemoteProtocolError,
httpx.ReadError, andasyncio.CancelledErrorare caught separately so the
bridge logs and surfaces the right SSE error type rather than 500ing.
Notes
- No schema changes to
/v1/responses,/v1/models, or/health. - No changes to Codex configuration, Dockerfile, container entrypoint, or smoke
scripts; behavior is fully on the bridge side. CODESEEQ_BRIDGE_DEBUG_LOG=1continues to dump full request/response payloads
to/tmp/codeseeq-bridge.logfor diagnostics.
0.1.0 - 2026-05-07
- Initial public version of CodeSeeq single-container CLI workflow.
- Added root
./codeseeqlauncher and container entrypoint path. - Added DeepSeek/OpenResponses bridge runtime wiring and smoke scripts.
- Added
VERSIONfile with starting semantic version. - Switched license from AGPL-3.0 to Apache 2.0 (updated
LICENSE,COPYRIGHT,
README.md).