CodeSeeq v0.3.1
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).