Repository navigation
Releases: move-hoon/sober
Release list
v2.1.1
🚀 What's Changed
This release improves the robustness of hook scripts by safely handling non-object JSON responses, preventing unexpected jq execution errors during tool failure logging and post-edit
formatting.
🛡️ Hook Script Robustness
- Safe JSON Parsing in Tool Failure Log (
.sober/scripts/codex-hooks/tool-failure-log.sh): Updatedjqqueries to use theobjectsfilter. This ensures that field extraction (like
exit_codeandstderr) only occurs whentool_responseis a valid JSON object, preventing script failures on unexpected response shapes. - Safe JSON Parsing in Post-Edit Format (
.sober/scripts/hooks/post-edit-format.sh): Applied the sameobjectsfilter protection when extractingfilePathorfile_pathfrom
tool_response, ensuring the formatter hook gracefully handles malformed or non-object data without crashing.
🛠️ Full Changelog
- Prevented
jqerrors intool-failure-log.shby enforcing object type checks ontool_response. - Prevented
jqerrors inpost-edit-format.shby enforcing object type checks ontool_response. - Bumped package version to
2.1.1inpackage.json.
v2.1.0
🚀 What's Changed
This release adds first-class Sober launchers for Codex and Claude Code, improves Codex hook logging under sandboxed runs, and keeps the README focused on the new agent launch flow.
🧭 Sober Agent Launchers
- Codex Launcher Added (
lib/cli.js): Addedsober codexas a Sober-managed Codex entrypoint.- Defaults to
codex --sandbox workspace-write --add-dir ~/.sober/logs - Respects explicit Codex sandbox flags such as
--sandbox read-only
- Defaults to
- Claude Launcher Added (
lib/cli.js): Addedsober claudeas a pass-through Claude Code launcher. - Unified YOLO UX (
lib/cli.js): Added shared--yolohandling across runtimes.sober codex --yolo→codex --yolosober claude --yolo→claude --permission-mode bypassPermissions
🪵 Failure Log Hook Reliability
- Sandbox-Safe Failure Logging (
.sober/scripts/hooks/tool-failure-log.sh): Made tool failure logging best-effort so hook execution no longer fails when the log path is not writable. - Configurable Failure Log Path: Added
SOBER_TOOL_FAILURE_LOGsupport across:.sober/scripts/hooks/tool-failure-log.sh.sober/scripts/analyze-failures.sh.sober/scripts/hooks/session-start.sh
🧹 CLI Cleanup
- Cleaner Agent Command Builder (
lib/cli.js): Split agent launch handling into smaller parsing/build functions for readability. - Hook Reference Inspection Cleanup (
lib/cli.js): Consolidated duplicated hook traversal logic into a shared hook reference collector. - Safer Symlink Detection (
lib/cli.js): Improved Sober-owned symlink detection to handle relative symlink targets correctly.
📚 Documentation
- README Launch Flow Updated: Updated English and Korean READMEs to recommend launching agents through Sober:
sober codexsober claudesober codex --yolosober claude --yolo
- YOLO Safety Note Added: Added a concise warning that
--yolobypasses approvals/permissions and should only be used in isolated environments.
🛠️ Full Changelog
- Added
sober codexandsober claudecommands inlib/cli.js. - Added shared
--yoloruntime mapping for Codex and Claude Code. - Added Codex workspace-write/log-dir preset for normal
sober codexruns. - Preserved user-provided Codex sandbox flags instead of overriding them.
- Made Sober failure logging tolerate unwritable log paths.
- Added
SOBER_TOOL_FAILURE_LOGoverride support. - Refactored CLI launch and hook inspection helpers for readability.
- Updated README and README.ko launch examples.
- Bumped package version to
2.1.0inpackage.json.
v2.0.6
🚀 What's Changed
This release focuses on hotfixing the sober template path-resolution crash in the CLI and improving diagnostic error logging for missing package template files.
🩺 Sober Template spinePath Hotfix & Diagnostics
- Spine Path Crash Fixed (
lib/cli.js): Fixed the path lookup insober templatewhere the CLI expectedAGENTS.mdin the parent directory of installation instead of the packaged.sober/AGENTS.mdfolder. - Granular CLI Error Logging (
lib/cli.js): Separated template existence checks to log explicit error messages (Sober policy spine not foundvsSober project templates not found) for easier debugging.
🛠️ Full Changelog
- Fixed
spinePathinlib/cli.jsto resolvesober templatecrashes. - Separated CLI template existence diagnostic logs in
lib/cli.js. - Bumped package version to
2.0.6inpackage.json.
v2.0.5
🚀 What's Changed
This release focuses on restructuring Sober's documentation for better readability, softening enforcement-heavy language to accurately match the advisory guardrail implementation, standardizing telemetry references, and adding diagnostic coverage for ripgrep.
🧭 Documentation Architecture Restructured & Unified
- Consolidated "How Sober Works" Section: Merged the Sober Loop (flowchart), The 5 Invariants (design pillars), and the Sober Contract (P0-P8 rules) into a single unified flow near the top of both
README.mdandREADME.ko.md. - Sleek Mermaid Flowcharts: Replaced the legacy ASCII boxes in both languages with premium, highly readable vertical Mermaid diagrams (
flowchart TD) featuring professional custom HSL styling (Indigo, Slate, Emerald, Rose). - Structural Contract Tables: Converted the numbered P0-P8 rules list into clean markdown tables mapping Policy, Core Rule, and Details for better visual scanning.
- Tool-to-Policy Mapping: Exposed the hook-and-skill tool mapping table directly under the contract (removing the old HTML
<details>tags) to visually link policy codes (e.g.P0,P1) to their supporting components under~/.sober/.
⚖️ Advisory Guardrail Terminology Softened
- Realistic Guardrail Descriptions: Replaced strict, overly-enforcing verbs (like "enforces", "forbids", "금지", "강제", "항상") with advisory and guidance-oriented language ("nudges", "suggests", "안내", "유도") to accurately reflect the advisory nature of the underlying hook implementations (e.g.
verify-gateandcompact-suggest). - Practical Isolation Examples: Added concrete examples
(like worktrees)and(worktree 등)to the Verification Gate & Isolation design invariant to ground the abstract "reversible git boundaries" concept in practical developer workflows. - Typographic Refinement: Replaced generic emoji arrows (
➡️) in process lists with standard typographic arrows (→).
🩺 Cli Diagnostics & Telemetry Standardized
- Ripgrep Diagnostic Verification: Added
ripgrep(rg) metadata to the optional substrate tool inspection inlib/cli.js, allowingsober doctorto verify its path for fast exact text search matching (P1). - Consistent Telemetry References: Cleaned up references from legacy "L6" layers to strictly "P7 Observe" across
.gitignore,.sober/commands/measure.md, and.sober/skills/observe/SKILL.md.
🛠️ Full Changelog
- Restructured
README.mdandREADME.ko.md. - Added
ripgreptoOPTIONAL_TOOLSmetadata inlib/cli.js. - Standardized L6/P7 observe references in
.gitignore,.sober/skills/observe/SKILL.md, and.sober/commands/measure.md. - Bumped package metadata and dependencies version to
2.0.5inpackage.json.
v2.0.4
🚀 What's Changed
This release finalizes Sober's structure-graph and MCP posture: GitNexus is now the default structure graph provider, but only through the CLI by default.
🧭 GitNexus CLI Structure Graph
- GitNexus as Conditional Structure Provider: Added GitNexus as Sober's default structure graph provider for large or unfamiliar repositories.
- CLI-first Usage: GitNexus is used through the CLI by default, not as an always-on MCP provider.
- Large-repo Only: GitNexus is reserved for cross-module flow, unclear entry points, or blast-radius analysis — not routine navigation.
✅ Verify Before Deep Reading
- Earlier Verification Gate: Graph-derived candidates must now be verified with
rg/Probe before deep reading or editing. - Hints, Not Evidence: GitNexus output is treated as a candidate list, not ground truth.
- Runtime Confirmation Required: Runtime behavior still requires tests or framework-aware evidence, especially for Spring DI, AOP, events,
@Conditionalbeans, reflection, and config-driven behavior.
🔌 Minimal MCP Policy
- MCP Default-off: ADR-011 now makes MCP default-off, not forbidden.
- Serena as the Practical Exception: Serena remains the MCP-style exception for LSP-based type-aware refactoring.
- GitNexus MCP Opt-in Only: GitNexus is treated primarily as a CLI-based structure candidate generator, and GitNexus MCP remains opt-in only.
🧱 Structure Graph Skill Rewritten
-
Conditional Accelerator Model: Reworked
structure-graphfrom a "last resort" graph tool into a "conditional accelerator." -
Clear Tool Division: Defined
ripgrep/Probe as source verification, GitNexus as code structure candidate generation, Graphify as non-code/multimodal context only, and tests/framework evidence as runtime confirmation. -
Safe Analyze Guidance: Documented the recommended command:
gitnexus analyze --skip-agents-md --skip-skills --skip-embeddings
-
Config Example Only: Added a
.gitnexusrcexample inside the skill documentation; no.gitnexusrcfile was added to the repository root.
📚 README, ADR & CLI Alignment
- README Updated: README.md and README.ko.md now document GitNexus CLI as the L3.5 structure layer, with MCP disabled by default.
- ADR-006 Rewritten: Updated the structure graph provider decision around GitNexus CLI, candidate verification, and runtime confirmation.
- ADR-011 Rewritten: Updated the minimal MCP policy around CLI-first operation and MCP opt-in behavior.
- Doctor Metadata Added: Added GitNexus to
sober doctoroptional tool inspection as a P1 conditional CLI structure graph tool. - Serena Wording Updated: Updated Serena's optional tool role wording to reflect LSP navigation and type-aware edits.
🛠️ Full Changelog
- Updated
.sober/AGENTS.md. - Rewrote
.sober/skills/structure-graph/SKILL.md. - Updated README.md and README.ko.md.
- Rewrote
docs/adr/006-structure-graph.md. - Rewrote
docs/adr/011-minimal-mcp.md. - Added GitNexus optional tool metadata in
lib/cli.js. - Updated Serena optional tool wording in
lib/cli.js. - Adjusted optional tool output padding in
lib/cli.js. - Bumped package metadata for v2.0.4.
v2.0.3
🚀 What's Changed
This release tightens Sober's search, handoff, and hook behavior to make the agent loop more deterministic and recoverable.
🔎 Search Ladder Clarified
- Probe as Structural Search: Updated the policy spine so the default search path is now
ripgrep → Probe → mgrep. - ast-grep Reserved for Rewrites: Removed
ast-grepfrom the default search ladder and clarified its role as the deterministic rewrite/edit tool. - Semantic Search Kept Last: Kept
mgrepas a semantic/concept-query fallback only, not a replacement for exact or structural search.
📝 Project-root HANDOFF.md
- Moved Handoff to Project Root: Session continuity now uses project-root
HANDOFF.mdinstead of.claude/HANDOFF.md. - Runtime-neutral Memory: Updated commands, hooks, and templates so verified findings and next steps live in the project itself rather than in Claude-specific runtime files.
- Removed Stale Runtime File: Deleted the tracked
.claude/HANDOFF.md.
🛡️ Hook Hardening
- Defensive Hook Input Handling: Hardened Sober hooks against empty input, invalid JSON, and missing
jq. - Safer JSON Parsing: Updated hook parsing paths to avoid noisy runtime failures when host CLIs send malformed or incomplete hook payloads.
- More Recoverable Agent Loop: Hook failures now degrade more safely instead of breaking the workflow unexpectedly.
📚 README, Skills & ADR Alignment
- Layered Architecture Docs: Updated README.md and README.ko.md to present Sober's 5 invariants, L0-L6 architecture, and core loop.
- Skill Documentation Updates: Updated
observe,search-ladder, andstructure-graphskills to match the revised policy model. - Search ADR Updated: Updated
docs/adr/003-search-ladder.mdto reflect the new search ladder decision. - Template Alignment: Updated project templates to match the revised spine and project-root handoff model.
🛠️ Full Changelog
- Deleted tracked
.claude/HANDOFF.md. - Updated
.sober/AGENTS.md. - Updated
.sober/commands/analyze-failures.mdand.sober/commands/measure.md. - Updated
.sober/scripts/analyze-failures.sh. - Hardened hook scripts under
.sober/scripts/hooks/. - Hardened Codex tool failure hook under
.sober/scripts/codex-hooks/. - Updated
.sober/skills/README.mdand.sober/skills/README.ko.md. - Updated
.sober/skills/observe/SKILL.md. - Updated
.sober/skills/search-ladder/SKILL.mdand itsreferences/ladder.md. - Updated
.sober/skills/structure-graph/SKILL.md. - Updated README.md and README.ko.md.
- Updated
docs/adr/003-search-ladder.md. - Updated
project-template/AGENTS.md.tmplandproject-template/sgconfig.yml.tmpl. - Bumped package metadata for v2.0.3.
v2.0.2
🚀 What's Changed
This release introduces a major documentation refactor to lower the barrier to entry for beginners, alongside expanded support for external document retrieval integrations (Context7).
📖 Re-architected README & USER-MANUAL Integration
- Removed Separate User Manuals: Deleted
docs/USER-MANUAL.mdanddocs/USER-MANUAL.ko.mdto avoid splitting crucial documentation. - Beginner-Friendly Flow: Reordered the README structure into a logical path: What is it? -> Why use it? -> Installation -> Usage Guide -> Reference/Troubleshooting.
- Consolidated Key Insights: Core operational tips (writing prompt rules, breaking AI agent loops, session handoffs, and summaries) are now embedded directly in the README's "Usage Guide".
- Decluttered Layout: Advanced tech specs (such as runtime hook details and low-level architecture) have been moved into HTML
<details>toggle blocks at the bottom of the document to keep the main guide clean.
📚 Expanded Context7 & Universal Skills Integration
- Universal Skill Support: Added support for Context7's
--universalCLI setup, automatically linking the context documentation skill into the standard~/.agents/skills/path. - Codex MCP Reference: Added configuration guidelines for enabling Context7 MCP in Codex mode to read package documentations on the fly.
- Diagnostic Tool Enhancements: Upgraded
sober doctorandsober setupchecks to verify both Claude-specific and Universal skills for Context7.
🛠️ Full Changelog
- Deleted obsolete
docs/USER-MANUAL.md/docs/USER-MANUAL.ko.mdand updatedpackage.jsondistribution files. - Redesigned README.md and README.ko.md to focus on beginner onboarding.
- Enhanced
install.shandlib/cli.jsto support Context7 universal skills setup. - Updated unit test suites to align with the revised documentation structure.
v2.0.1
🚀 What's Changed
This release reorganizes the internal file layout to reduce project complexity and optimize npm package distribution size.
📂 Unified Internal Assets under .sober/
- Consolidated separate directories (
codex/,scripts/,.claude/agents/,.claude/commands/, etc.) that were scattered across the root directory into a single unified.sober/directory. - Re-aligned npm packaging files in
package.jsonto publish only the.sober/directory instead of exporting multiple paths, reducing package bundle noise.
📝 Configuration & Guidance Templates
- Re-added dedicated configuration READMEs and templates within the
.claude/,.codex/, and.agents/directories. - Updated path references inside
install.shand the CLI helpers to correctly reflect the unified.sober/directory layout.
🛠️ Full Changelog
- Hotfixes in
install.shandlib/cli.jsfor the restructured internal paths. - Cleaned up the
filesarray inpackage.jsonto keep npm bundles lightweight.
v2.0.0
Sober v2.0.0
Sober v2.0.0 is the clean v2 release of the project formerly developed as claude-pro-minmax.
This release redefines the project as a local behavior harness for Claude Code and Codex CLI: one shared policy spine, one source of truth, runtime-specific links, and lightweight safety hooks.
Install
npm install -g getsober@latest
sober install
sober doctorThe npm package name is getsober, but the CLI command remains sober.
Highlights
- Rebranded the npm package to
getsober - Kept the product name as Sober
- Kept the CLI command as
sober - Introduced
.sober/as the shared source of truth - Added first-class visibility folders for Claude, Codex, and Codex skills
- Added shared support for Claude Code and Codex CLI
- Cleaned up old v1/CPMM naming and compatibility cruft
- Preserved additive install behavior: user configs are merged, not overwritten
New Repository Structure
.sober/ # canonical shared source: AGENTS, commands, rules, skills, scripts
.claude/ # Claude templates and visibility
.codex/ # Codex docs/examples; active hooks stay in .sober/codex
.agents/ # Codex skills visibility; source stays in .sober/skills
AGENTS.md # symlink to .sober/AGENTS.md
CLAUDE.md # symlink to AGENTS.md
Installed User Layout
~/.sober/AGENTS.md # shared policy source
~/.sober/commands/*.md # Sober-owned Claude slash commands
~/.sober/rules/*.md # Sober-owned Claude rules
~/.sober/skills/<skill>/SKILL.md # one copy of each skill
~/.sober/scripts/ # local hook and verification scripts
~/.sober/codex-rules/*.rules # installed Codex rule source
~/.claude/CLAUDE.md # symlink or import to ~/.sober/AGENTS.md
~/.claude/AGENTS.md # symlink or import to ~/.sober/AGENTS.md
~/.claude/commands/<command>.md # Sober-owned command links
~/.claude/rules/<rule>.md # Sober-owned rule links
~/.claude/skills/<skill> # links to ~/.sober/skills/<skill>
~/.claude/settings.json # Sober hooks merged additively
~/.codex/AGENTS.md # symlink or inline Sober block
~/.codex/hooks.json # Sober hooks merged additively
~/.codex/rules/sober-critical-actions.rules
~/.agents/skills/<skill> # links to ~/.sober/skills/<skill>
Breaking Changes
- The npm package is now
getsober - Old package names and v1 identities are removed from the public install path
- No
cpmmcompatibility shim is shipped - Sober-managed assets now live under
.sober/ - Claude/Codex runtime folders are visibility and integration layers, not duplicate sources of truth
Migration From CPMM
npm uninstall -g claude-pro-minmax
npm install -g getsober@latest
sober install
sober doctorVerification
This release was checked with:
npm pkg get name version bin
npm test
npm pack --dry-runPackage Identity
npm package: getsober
product name: Sober
CLI command: sober
version: 2.0.0
Full Changelog: v1.4.0...v2.0.0
v1.4.0
🚀 CPMM v1.4.0 (Minor)
A Context7-focused release that aligns CPMM with the official Context7 Claude Code flow, removes conflicting repo-local Context7 behavior, and makes setup, verification, and current-doc lookup much clearer for users who opt in.
What Changed
CPMM now follows the official Context7 path:
- CPMM no longer ships a parallel repo-local Context7 docs layer.
cpmm setupcan now offer the full recommended official flow:npm install -g ctx7ctx7 setup --cli --claude
- This gives users both:
- a shell-visible
ctx7CLI - the official Context7 Claude Code integration
- a shell-visible
Context7 verification is now clearer:
cpmm doctornow checks Context7 in two parts:ctx7CLI binary presence- official Claude integration artifacts
- It reports:
ctx7binary- Context7 skill (
find-docs) - Context7 rule (
context7.md)
- Partial installs now get explicit recovery guidance instead of ambiguous status:
- re-run
cpmm setup - or run the official commands directly
- re-run
Legacy Context7 cleanup improved:
- If CPMM detects the old managed Context7 MCP entry in
~/.claude.json, setup now removes it. - This prevents old repo-managed Context7 configuration from conflicting with the new official path.
Current-doc behavior is cleaner:
- After official setup, current library docs flow through Context7’s official Claude integration.
/llms-txtremains available as the explicit raw-doc fallback when you want raw/llms.txtcontent or URL-based raw-doc lookup.
Documentation and built-in CPMM guidance were updated (EN/KO):
README.mdREADME.ko.mddocs/USER-MANUAL.mddocs/USER-MANUAL.ko.md
Claude command / skill guidance was also updated to reflect:
- official Context7 ownership
- the new verification model
/llms-txtas the explicit fallback path
Why This Matters
Users now get a much cleaner Context7 experience:
- no more mismatch where official setup succeeds but
ctx7is missing from the shell - no more split mental model between CPMM-managed docs behavior and official Context7 behavior
cpmm setup,cpmm doctor, shell verification, and Claude-side behavior now point to the same installation model
CPMM keeps its original product boundary intact:
- Context7 remains optional
- CPMM does not make Context7 a default dependency
- users who do not opt into Context7 keep the same default CPMM behavior
Upgrade
npm i -g claude-pro-minmax@latest
cpmm setup
cpmm doctorOptional Context7 Enablement
npm install -g ctx7
ctx7 setup --cli --claude
cpmm doctorRecommended Verification
command -v ctx7
ctx7 --version
cpmm doctorCompatibility Note
Users upgrading from v1.3.1 without Context7 enabled:
- default CPMM behavior remains unchanged
Users enabling Context7 on v1.4.0:
cpmm setupnow installs thectx7CLI and then runs the official Claude Code setupcpmm doctornow verifies both the CLI and the official integration separately- current-doc lookup now follows the official Context7 path, with
/llms-txtkept as the explicit raw fallback
