Skip to content

v1.2.0

Latest

Choose a tag to compare

@Neurone Neurone released this 03 Oct 04:05
899fd07

Support for managing more than one Claude Code config directory — notably the
secure-ai sandbox's — plus install-time
hooks for customizations and an HBAR-denominated session cost.

Highlights

  • Configurable config directory — every script in scripts/ (and the
    enforcement utility) now works against a Claude Code config dir that
    isn't necessarily ~/.claude. Selection, in order:

    1. CLAUDE_DIR (wins) or Claude Code's own CLAUDE_CONFIG_DIR is set:
      only that directory, no question asked.
    2. Otherwise, every existing directory among ~/.claude and secure-ai's
      ~/.secure-ai/claude-code/config: the script runs once per directory
      with the same arguments. A failure in one doesn't skip the other; the
      exit status is non-zero.
    3. Neither exists: asks Claude Code config dir [~/.claude]: when run
      interactively (Enter keeps the default, a leading ~ is expanded, the
      path must be absolute); without a terminal it uses ~/.claude.

    Each directory gets its own install under
    <config dir>/customizations/custom-claude-code-settings. Details:
    README.md ("Which config directory") and scripts/README.md.

  • Watchdog only for ~/.claude — only the native Claude Code config dir
    gets the launchd/systemd watchdog, since nothing else rewrites
    settings.json behind our back. Any other directory (secure-ai's
    included) has its customizations enforced once at install time, with no
    service. install-or-update.sh, uninstall.sh and status.sh skip the
    service steps for it, and status.sh says so instead of reporting a
    missing service.

  • Install-time hooks — a customization can ship bin/post-install.sh,
    run once by install-or-update.sh right after that customization's files
    are installed, with INSTALL_DIR as $1. It is never copied into the
    shared bin/, so two customizations' hooks can't clash; a failing hook is
    logged as a warning and doesn't abort the install. See "Install-time
    hooks" in customizations/README.md.

  • hbar-addicted improvements — it uses the new hook to populate its
    price history synchronously at install, so the status line doesn't show
    n/a until the first background refetch completes. Combined with
    claude-session-info, the session cost is now shown in HBAR as well as
    USD. The segments also spawn fewer processes per render (one jq call
    instead of five and a single git call instead of two in
    claude-session-info, one jq per manifest and no basename/dirname in
    statusline, two date calls instead of four in hbar-addicted), and the
    installer renders its @@...@@ placeholders with one sed escape pass
    instead of one per value, which makes an install noticeably faster.

Fixes

  • Uninstalling a non-~/.claude config dir no longer takes down the
    ~/.claude watchdog.
    A full uninstall of e.g. secure-ai's config dir used
    to unload the launchd/systemd service and delete its files, although both
    dirs share one service label and ~/.claude was still installed.
  • A failing enforcer is now reported. If settings.json can't be parsed,
    install-or-update.sh and enforce-now.sh used to exit with status 1 and
    no message; they now stop with the last entry of the enforcer's log.
  • status.sh keeps reporting when a customization's
    customization.meta.json is malformed, and no longer fails on an empty
    catalog under macOS's bash 3.2. errexit is now switched off explicitly,
    only around the block that lists the catalog.

Behavior changes

  • With both ~/.claude and ~/.secure-ai/claude-code/config present, the
    scripts now act on both
    by default, where they previously only ever
    touched ~/.claude. To manage just one, set CLAUDE_CONFIG_DIR
    (e.g. CLAUDE_CONFIG_DIR=~/.secure-ai/claude-code/config scripts/install-or-update.sh).
  • scripts/logs.sh -f follows only the first directory's logs when
    several are managed; pick one with CLAUDE_CONFIG_DIR.
  • Interactive prompt when no config dir exists (see above), asked by
    install-or-update.sh only; it is skipped when CLAUDE_DIR/CLAUDE_CONFIG_DIR
    is set or stdin isn't a terminal. The other scripts use ~/.claude.
  • bin/post-install.sh is now a reserved filename in a customization's
    bin/.

Requirements

jq (1.6 or newer), python3, macOS or Linux. claude-session-info
additionally needs git and hbar-addicted needs curl and awk.

Upgrading

Re-run scripts/install-or-update.sh. If you use secure-ai, the same run now
also installs into its config directory; the existing ~/.claude install and
its watchdog are unchanged.