Skip to content

rename: zeroclawed → calciforge + drop dead OneCLI HTTP client#48

Merged
bglusman merged 1 commit intomainfrom
rename/zeroclawed-to-calciforge
Apr 25, 2026
Merged

rename: zeroclawed → calciforge + drop dead OneCLI HTTP client#48
bglusman merged 1 commit intomainfrom
rename/zeroclawed-to-calciforge

Conversation

@bglusman
Copy link
Copy Markdown
Owner

The big rename. Project gets a coined name (Calciforge — Calcifer + forge, greenfield across crates.io / npm / PyPI / SourceForge / USPTO per scan; all 6 major TLDs available).

Crate renames (4)

Old New Why
crates/zeroclawed crates/calciforge Main binary takes the project name
crates/zeroclawed-mcp crates/mcp-server Match security-proxy/host-agent/etc. functional-name pattern
crates/zeroclawed-secret-paste crates/paste-server Same
crates/onecli-client crates/secrets-client Drop OneCLI vestigial; reflects what it actually does (resolver + fnox client)

The host-agent / security-proxy / adversary-detector / clashd / loom-tests crates keep their names — they describe what they do, no project prefix.

Dead OneCLI HTTP client deleted in same PR

Audit confirmed zero external callers of the OneCLI HTTP client (SecretsClient, formerly OneCliClient). Per @bglusman's "no point renaming if we're deleting":

  • DELETED: secrets-client/src/client.rs (the HTTP client)
  • DELETED: secrets-client/src/main.rs (OneCLI binary entry point)
  • DELETED: secrets-client/src/retry.rs (only used by client.rs)
  • DELETED: secrets-client/src/error.rs (SecretsError, only used by client.rs)
  • DELETED: secrets-client/VAULT_SETUP.md (OneCLI setup doc, contained a real vault URL + example JWT)
  • SLIMMED: config.rs to just RetryConfig (used by calciforge proxy)
  • SLIMMED: lib.rs re-exports

What survives in secrets-client:

  • vault::get_secret() — env → fnox → vaultwarden chain (used by security-proxy)
  • FnoxClient — subprocess wrapper (used by paste-server, mcp-server, calciforge !secure)
  • FnoxError, RetryConfig

Vocabulary mapping (per discussion)

  • Calciforge = the project / CLI / shipped tool
  • Calcifer = a single agent's bound contract (runtime concept, not a crate)
  • Moving Castle = a deployment hosting a household of Calcifers
  • Doors = thresholds the Calcifer guards (per-secret allowlist, per-host bypass, per-identity gate, per-MCP-tool exposure)
  • "Doors to other Castles" = future federation between Calciforge instances (roadmap follow-up)

Mechanics

  • Sed sweep: zeroclawedcalciforge (lowercase), ZeroClawed/ZeroclawedCalciforge, ZEROCLAWEDCALCIFORGE
  • Secondary pass: OneCli*Secrets*, onecli_clientsecrets_client, etc.
  • 200 files / 1,571 ins / 2,612 del (negative net from dead-code deletion)
  • gitleaks: 5 narrow IP allowlist entries for pre-existing infra-leak inheritance (file paths the rename touched but didn't introduce). Tracked for sanitization in a follow-up PR.

Test status

  • 700+ tests across the workspace, all green (cargo test --workspace --exclude loom-tests)
  • cargo check --workspace: clean
  • cargo fmt, clippy: clean
  • pre-commit gate: passed

Follow-ups after merge

  1. Repo rename bglusman/zeroclawedbglusman/calciforge (single `gh` operation, can be reverted)
  2. Sanitization PR for the 5 pre-existing IP leaks (sanitize to RFC 5737 documentation IPs)
  3. PR feat(fnox): library-mode FnoxClient behind fnox-library cargo feature #47 (FnoxLibrary) — rebase onto new main with renamed crate paths
  4. Architecture review work (decision envelope finding Integration/v1 testing #1) on top of fresh main

🤖 Generated with Claude Code

Copilot AI review requested due to automatic review settings April 25, 2026 19:16
Copy link
Copy Markdown

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Renames the project from ZeroClawed to Calciforge, updates crate/module naming and config paths accordingly, and removes the legacy OneCLI HTTP client surface while keeping the shared secret-resolution library functionality.

Changes:

  • Renamed core crates and many references/paths (zeroclawedcalciforge, onecli-clientsecrets-client, etc.).
  • Updated security-proxy and other crates/tests to use the renamed secrets resolver and new env var prefixes.
  • Swept docs/scripts/research files to reflect the new project vocabulary and paths.

Reviewed changes

Copilot reviewed 164 out of 200 changed files in this pull request and generated 3 comments.

Show a summary per file
File Description
signal-config-example.toml Update example config text/paths to calciforge
scripts/test-config.toml Update test endpoint hostname to secrets
scripts/setup-claude-hooks.sh Rename build/install instructions and labels
scripts/setup-agents.sh Rename displayed project name and plugin refs
scripts/ralph-loop.sh Update cargo package name in test loop
scripts/ralph-loop-overnight.sh Update cargo package name in overnight loop
scripts/pre-push.sh Update crate name references and warnings
scripts/manual-docker-test.sh Update service/log names to calciforge/secrets
scripts/install-security-stack.sh Update install/config dirs to /opt
scripts/docker-compose.yml Rename services/paths to calciforge/secrets
research/vault-parity.md Rename references to calciforge
research/vault-groundwork-summary.md Rename references to calciforge and related docs
research/openclaw-schema-versioning.md Rename installer naming and sessionKey prefixes
research/openclaw-migration.md Rename references to calciforge
research/onecli-architecture.md Rename references in architecture research doc
research/jai-integration-levels.md Rename references to calciforge
research/jai-analysis.md Rename implications section to calciforge
research/fs-transaction-summary.md Rename incident narrative and installer naming
research/fs-transaction-alternatives.md Rename context to calciforge
research/approval-relay-design.md Rename approval relay naming and example config
research/acp-adapter-implementation.md Rename adapter documentation references
research/acp-adapter-design.md Rename adapter documentation references and paths
docs/vendor-067-status.md Rename workspace references to calciforge
docs/vendor-067-comparison.md Rename workspace path references to calciforge
docs/typo-handling-design.md Rename config paths and component naming
docs/security-gateway.md Rename gateway description to calciforge
docs/security-audit-cve-2026-33579.md Rename scope and crate path references
docs/roadmap/v3-ideas.md Rename roadmap references to calciforge
docs/roadmap/outbound-sensitive-data-detection.md Rename channel layer naming
docs/roadmap-v3.md Rename config ownership text to calciforge
docs/rfcs/secret-input-web-ui.md Update crate name reference to paste-server
docs/rfcs/model-gateway-primitives.md Rename project references and config path example
docs/rfcs/browser-harness-integration.md Rename crate references (mcp-server) and project text
docs/installer-open-questions.md Rename installer concerns to calciforge
docs/clash-integration.md Update repo path references
docs/architecture-review-2026-04-25.md Rename crate list and architecture references
docs/agents-of-chaos-lessons.md Rename lessons framing to calciforge
docs/acpx-claude-setup.md Rename setup guide text to calciforge
docs/OPS-HARDENING.md Rename hardening guide title/text
docs/MANUAL_INSTALL.md Rename manual install paths/services to calciforge
deploy/nodes.example.json Rename service list and config_dir to calciforge
crates/zeroclawed-policy-plugin/package.json Rename npm package scope/description
crates/zeroclawed-policy-plugin/openclaw.plugin.json Rename plugin id/name
crates/zeroclawed-policy-plugin/docker-compose.yml Rename compose naming/network
crates/zeroclawed-policy-plugin/check-requirements.sh Rename echoed instructions and image names
crates/zeroclawed-policy-plugin/README.md Rename README title
crates/security-proxy/tests/vault_route.rs Update env var names to SECRETS_*
crates/security-proxy/tests/substitution_body_headers.rs Update env var names to SECRETS_*
crates/security-proxy/tests/destination_allowlist.rs Update env var names to SECRETS_*
crates/security-proxy/src/router.rs Switch vault resolver import path to secrets_client
crates/security-proxy/src/proxy.rs Switch resolver calls to secrets_client
crates/security-proxy/src/main.rs Update default AGENT_CONFIG path to /etc/calciforge
crates/security-proxy/src/credentials.rs Switch resolver calls/env vars to secrets_client/SECRETS_*
crates/security-proxy/Cargo.toml Rename description and dependency to secrets-client
crates/secrets-client/tests/vault_fallthrough.rs Update tests to call secrets_client and SECRETS_* env vars
crates/secrets-client/src/vault.rs Rename env vars to SECRETS_VAULT_URL/TOKEN
crates/secrets-client/src/lib.rs New crate docs/exports for secrets resolution library
crates/secrets-client/src/config.rs New RetryConfig-only module with serde tests
crates/secrets-client/Dockerfile Add docker build artifact for secrets-client (currently inconsistent)
crates/secrets-client/Cargo.toml New library crate manifest
crates/paste-server/src/main.rs Rename imports/log target; use secrets_client::FnoxClient
crates/paste-server/Cargo.toml Rename crate/bin/lib names; depend on secrets-client
crates/onecli-client/src/retry.rs Deleted legacy retry module
crates/onecli-client/src/lib.rs Deleted legacy lib exports
crates/onecli-client/src/error.rs Deleted legacy error types
crates/onecli-client/src/config.rs Deleted legacy config
crates/onecli-client/VAULT_SETUP.md Deleted sensitive/legacy setup doc
crates/onecli-client/Cargo.toml Deleted legacy crate manifest
crates/mcp-server/src/main.rs Rename binary wiring to mcp-server + CalciforgeMcp
crates/mcp-server/Cargo.toml Rename crate/bin/lib and secrets-client dependency
crates/loom-tests/src/lib.rs Rename crate docs to calciforge
crates/loom-tests/docs/concurrency-testing.md Rename docs to calciforge
crates/host-agent/src/main.rs Rename CLI/docs strings to calciforge
crates/host-agent/src/approval/signal.rs Rename approval message header
crates/host-agent/install.sh Rename installer text and cert subject strings
crates/host-agent/TODO.md Rename TODO title
crates/host-agent/SDD.md Rename SDD title/text
crates/host-agent/SDD-ROUND2-SUMMARY.md Rename summary text and paths
crates/host-agent/README.md Rename README and paths
crates/host-agent/IMPLEMENTATION.md Rename overview line
crates/host-agent/Cargo.toml Update description to calciforge
crates/clashd/scripts/activate-policy.sh Rename plugin name/path references
crates/clashd/README.md Rename plugin references
crates/calciforge/tests/loom.rs Rename test docs strings
crates/calciforge/tests/e2e/security_tests.rs Rename module doc text
crates/calciforge/tests/e2e/secrets_proxy.rs Rename helper and URLs in proxy tests
crates/calciforge/tests/e2e/property_tests.rs Rename module doc text
crates/calciforge/tests/e2e/main.rs Rename integration suite module list
crates/calciforge/tests/e2e/adapter_edge_cases.rs Rename module doc text
crates/calciforge/src/voice/tools.rs Rename tool names and descriptions to calciforge_*
crates/calciforge/src/voice/mod.rs Rename voice module docs to calciforge
crates/calciforge/src/sync.rs Rename module doc to calciforge
crates/calciforge/src/router.rs Rename config header field to calciforge
crates/calciforge/src/proxy/voice_handlers.rs Rename manifest docs to calciforge
crates/calciforge/src/proxy/traceloop/test.rs Add unit tests for traceloop components
crates/calciforge/src/proxy/traceloop/mod.rs Rename docs to calciforge
crates/calciforge/src/proxy/traceloop/kimi.rs Add Kimi provider implementation
crates/calciforge/src/proxy/streaming.rs Add stub SSE streaming module
crates/calciforge/src/proxy/routing.rs Add provider routing table builder
crates/calciforge/src/proxy/retry.rs Add retry config/backoff iterator
crates/calciforge/src/proxy/helicone_router.rs Rename backend trait impl to SecretsBackend
crates/calciforge/src/proxy/handlers.rs Rename owned_by to calciforge
crates/calciforge/src/proxy/gateway.rs Rename backend trait type to SecretsBackend
crates/calciforge/src/proxy/backend.rs Rename OneCliBackend to SecretsBackend + defaults
crates/calciforge/src/providers/mod.rs Rename module doc to calciforge
crates/calciforge/src/main.rs Rename CLI/docs/log target + config header field
crates/calciforge/src/local_model/mod.rs Rename hook env vars to CALCIFORGE_*
crates/calciforge/src/install/ssh.rs Rename installer docs and doctest path
crates/calciforge/src/install/model.rs Rename installer model types to calciforge
crates/calciforge/src/install/mod.rs Rename installer module docs/flag names
crates/calciforge/src/install/migration_types.rs Rename migration owner enum to Calciforge
crates/calciforge/src/install/json5.rs Rename docs to calciforge
crates/calciforge/src/install/health.rs Rename docs to calciforge
crates/calciforge/src/install/cli.rs Rename CLI args to --calciforge-host/--calciforge-key
crates/calciforge/src/hooks/mod.rs Rename spec reference to calciforge
crates/calciforge/src/hooks/memory.rs Rename spec reference to calciforge
crates/calciforge/src/config/validator.rs Rename config header to [calciforge]
crates/calciforge/src/channels/whatsapp.rs Rename docs/test strings/config header to calciforge
crates/calciforge/src/channels/telegram.rs Rename paths in tests to ~/.calciforge
crates/calciforge/src/channels/signal.rs Rename docs to calciforge
crates/calciforge/src/channels/mod.rs Rename module docs to calciforge
crates/calciforge/src/channels/mock.rs Rename router alias type
crates/calciforge/src/channels/matrix.rs Rename docs to calciforge
crates/calciforge/src/auth.rs Rename config header field to calciforge in tests
crates/calciforge/src/adapters/openclaw_channel.rs Rename endpoint/sessionKey prefixes to calciforge
crates/calciforge/src/adapters/openclaw.rs Rename env var fallback and sessionKey prefix
crates/calciforge/src/adapters/mod.rs Rename crate docs/doctest path + env var
crates/calciforge/src/adapters/acp.rs Rename adapter strings to calciforge
crates/calciforge/src/adapters/TODO-native-channel.md Rename sessionKey prefixes and commit text
crates/calciforge/examples/config.toml Rename example config header/paths/capability name
crates/calciforge/WHATSAPP-SETUP.md Rename setup guide text/paths to calciforge
crates/calciforge/INSTALLER-IMPL-NOTES.md Rename installer notes and paths
crates/calciforge/Dockerfile Add docker build artifact for calciforge (currently inconsistent)
crates/calciforge/Cargo.toml Rename crate/bin and secrets-client dependency
crates/calciforge/.hegel/unicode_data/13.0.0/codec-utf-8.json.gz Add hegel artifact file (generated)
crates/calciforge/.hegel/install.log Add hegel install log (contains conflict markers)
crates/calciforge/.hegel/constants/dd705b0115b62e1c Add hegel constants artifact
crates/calciforge/.hegel/constants/aa165829b1a3ffee Add hegel constants artifact
crates/calciforge/.hegel/constants/79b4d33ac928aa30 Add hegel constants artifact
crates/calciforge/.hegel/constants/67b0a8ccf18bf5d2 Add hegel constants artifact
crates/adversary-detector/src/scanner.rs Rename docs/default paths to ~/.calciforge
crates/adversary-detector/src/proxy.rs Rename docs/default paths to ~/.calciforge
crates/adversary-detector/src/profiles.rs Rename docs to calciforge
crates/adversary-detector/src/lib.rs Rename crate docs to calciforge
crates/adversary-detector/src/digest.rs Rename default digest path to ~/.calciforge
crates/adversary-detector/src/audit.rs Rename audit log path to ~/.calciforge
crates/adversary-detector/README.md Rename README text to calciforge
crates/adversary-detector/Cargo.toml Rename description to calciforge
ROADMAP.md Rename roadmap title
Cross.toml Rename comment header
Cargo.toml Rename workspace members/default-members to new crate paths
BACKLOG.md Rename backlog title and a few references
AGENTS.md Rename host-agent doc header/spec reference
.gitleaks.toml Update allowlist path + add pre-existing IP exceptions
.gitignore Ignore fnox.toml
.github/workflows/integration-tests.yml Rename workflow + update crates referenced
.github/workflows/ci.yml Update crate matrix and release build targets
.claude/agents/commit-reviewer.md Update references from onecli-client to secrets-client
Comments suppressed due to low confidence (2)

crates/calciforge/src/proxy/backend.rs:28

  • SecretsNotFound is the renamed variant, but its error string still says "OneCLI not found or not executable". Update the message to refer to secrets (or the actual configured command) so logs/errors are accurate after the rename.
    crates/calciforge/src/proxy/backend.rs:46
  • The trait is now SecretsBackend, but the doc comment still says "Unified backend trait for OneCLI integration". Rename the comment to match the new abstraction to avoid confusion for maintainers and users reading generated docs.

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

Comment on lines 58 to +65
- name: Build OneCLI
run: cargo build -p onecli-client --release
run: cargo build -p secrets-client --release

- name: Start OneCLI service
run: |
cargo run -p onecli-client --release &
ONECLI_PID=$!
echo "ONECLI_PID=$ONECLI_PID" >> $GITHUB_ENV
cargo run -p secrets-client --release &
SECRETS_PID=$!
echo "SECRETS_PID=$SECRETS_PID" >> $GITHUB_ENV
Copy link

Copilot AI Apr 25, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This job starts secrets-client via cargo run -p secrets-client and probes /health, but secrets-client has no binary target (library-only). This step will fail in CI; update it to start the correct executable service (or drop the job if the HTTP proxy was deleted).

Copilot uses AI. Check for mistakes.
Comment on lines 29 to +34
# OneCLI credential proxy
onecli:
secrets:
build:
context: ../../
dockerfile: crates/onecli-client/Dockerfile
container_name: test-onecli
dockerfile: crates/secrets-client/Dockerfile
container_name: test-secrets
Copy link

Copilot AI Apr 25, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This stack still builds a secrets HTTP service from crates/secrets-client/Dockerfile, but secrets-client is now a library-only crate (no server/binary). As a result, this service can’t be built or started; update the compose stack to run the correct proxy binary (or remove the service if it’s intentionally deleted).

Copilot uses AI. Check for mistakes.
Comment on lines 33 to 37
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
PLUGIN_SOURCE="$SCRIPT_DIR/../../zeroclawed-policy-plugin/before_tool_call"
PLUGIN_SOURCE="$SCRIPT_DIR/../../calciforge-policy-plugin/before_tool_call"

if [ ! -d "$PLUGIN_SOURCE" ]; then
echo "Error: Plugin source not found at $PLUGIN_SOURCE"
Copy link

Copilot AI Apr 25, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

PLUGIN_SOURCE points to ../../calciforge-policy-plugin/..., but the repo directory is still crates/zeroclawed-policy-plugin/ (it wasn’t renamed). This makes the script fail with "Plugin source not found". Either rename the directory or update this path to the actual location.

Copilot uses AI. Check for mistakes.
The repo / project gets a real name (Calciforge — coined Calcifer +
forge, greenfield across all registries per scan). Crate-name pattern
follows the existing functional-name convention (security-proxy,
host-agent, adversary-detector, clashd) — no project prefix on
sub-crates.

Crate renames:
- crates/zeroclawed              → crates/calciforge
- crates/zeroclawed-mcp          → crates/mcp-server
- crates/zeroclawed-secret-paste → crates/paste-server
- crates/onecli-client           → crates/secrets-client

The onecli-client rename also drops the OneCLI vestigial naming —
that was the upstream credential-proxy product we migrated AWAY
from when security-proxy + FnoxClient took over. Audit confirmed
zero external callers of the OneCLI HTTP client (SecretsClient,
formerly OneCliClient), so deleted the dead pieces in the same PR
rather than carrying them under a renamed-but-still-dead identifier:

- DELETED: secrets-client/src/client.rs (HTTP client, zero callers)
- DELETED: secrets-client/src/main.rs (OneCLI binary entry point)
- DELETED: secrets-client/src/retry.rs (only used by client.rs)
- DELETED: secrets-client/src/error.rs (SecretsError, only used
  by client.rs)
- DELETED: secrets-client/VAULT_SETUP.md (OneCLI setup guide,
  contained vault.enjyn.com URL + example JWT)
- SLIMMED: config.rs to just RetryConfig (the only struct calciforge
  proxy/retry.rs imports externally); dropped SecretsConfig,
  SecretsServiceConfig, VaultConfig, ProviderConfig
- SLIMMED: lib.rs re-exports to vault::, FnoxClient, FnoxError,
  RetryConfig (all confirmed externally used)
- Removed [[bin]] section from secrets-client/Cargo.toml

What survives in secrets-client:
- vault::get_secret() — env → fnox → vaultwarden resolver chain
  (used by security-proxy 3 files)
- FnoxClient — subprocess wrapper (used by paste-server, mcp-server,
  calciforge !secure command)
- FnoxError — typed errors
- RetryConfig — used by calciforge proxy/retry.rs

Sed sweep across 200 files: zeroclawed → calciforge (lowercase),
ZeroClawed/Zeroclawed → Calciforge (PascalCase/TitleCase),
ZEROCLAWED → CALCIFORGE (constants/env vars). Then secondary
rename pass: calciforge-mcp → mcp-server, calciforge-paste →
paste-server, OneCliClient → SecretsClient (since-deleted) etc.

Vocabulary mapping (per discussion):
- Calciforge   = the project / CLI / shipped tool
- Calcifer     = a single agent's bound contract (runtime concept)
- Moving Castle = a deployment hosting a household of Calcifers
- Doors        = thresholds the Calcifer guards (per-secret allowlist,
                 per-host bypass, per-identity gate, per-MCP-tool
                 exposure)
- "Doors to other Castles" = future federation between Calciforge
                 instances — see roadmap follow-up

gitleaks: added narrow allowlist for 5 specific RFC 1918 IPs that
pre-exist in main and would otherwise block this rename PR (tracked
for sanitization in a follow-up). Path allowlist for paste-server
predicate test rewritten to its new path.

Tests: 700+ across the workspace, all green. cargo check + cargo
fmt + clippy all clean.

Repo rename (bglusman/zeroclawed → bglusman/calciforge) is a
separate operation via gh, do AFTER this PR merges.
@bglusman bglusman force-pushed the rename/zeroclawed-to-calciforge branch from 3efff41 to d43bc02 Compare April 25, 2026 19:23
@bglusman bglusman merged commit 853b6f5 into main Apr 25, 2026
14 checks passed
bglusman added a commit that referenced this pull request Apr 25, 2026
The big rename. Project gets a real name (Calciforge), 4 crates renamed,
dead OneCLI HTTP client + binary deleted, ETXTBSY-resilient subprocess wrapper.

Crate renames (Path A: drop calciforge- prefix from sub-crates to match
existing functional-name convention):
- crates/zeroclawed              → crates/calciforge
- crates/zeroclawed-mcp          → crates/mcp-server
- crates/zeroclawed-secret-paste → crates/paste-server
- crates/onecli-client           → crates/secrets-client

Dead-code purge in same PR (zero external callers found):
- DELETED secrets-client/src/{client,main,retry,error}.rs + VAULT_SETUP.md
- SLIMMED config.rs to just RetryConfig (the one externally-used struct)
- SLIMMED lib.rs re-exports

ETXTBSY fix (the Linux flake that broke main after #44):
- FnoxClient::run retries on ErrorKind::ExecutableFileBusy with
  5ms/25ms backoff, max 3 attempts (rustup/npm/cargo's pattern)
- Test fake_fnox uses atomic OpenOptions::mode(0o755) instead of
  write+chmod to avoid the kernel race in the first place

Vocabulary: Calciforge (project) → Calcifer (per-agent contract) →
Moving Castle (deployment) → Doors (thresholds the Calcifer guards).
"Doors to other Castles" = future federation (roadmap).

CI: 14/14 green. cargo check + cargo fmt + clippy all clean.
@bglusman bglusman deleted the rename/zeroclawed-to-calciforge branch May 1, 2026 17:21
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants