feat: ship provider-neutral SCC runtime with Claude and Codex support#98
Merged
feat: ship provider-neutral SCC runtime with Claude and Codex support#98
Conversation
- src/scc_cli/core/contracts.py - src/scc_cli/ports/runtime_probe.py - src/scc_cli/adapters/docker_runtime_probe.py - tests/fakes/fake_runtime_probe.py - tests/fakes/__init__.py - src/scc_cli/bootstrap.py - tests/test_runtime_probe.py GSD-Task: S01/T01
- src/scc_cli/adapters/docker_sandbox_runtime.py - src/scc_cli/bootstrap.py - src/scc_cli/ui/dashboard/orchestrator.py GSD-Task: S01/T02
- tests/test_runtime_detection_hotspots.py GSD-Task: S01/T03
- src/scc_cli/core/contracts.py - src/scc_cli/adapters/docker_runtime_probe.py - tests/test_runtime_probe.py - tests/fakes/fake_runtime_probe.py GSD-Task: S02/T01
- src/scc_cli/core/image_contracts.py - images/scc-base/Dockerfile - images/scc-agent-claude/Dockerfile - tests/test_image_contracts.py GSD-Task: S02/T02
- src/scc_cli/adapters/oci_sandbox_runtime.py - tests/test_oci_sandbox_runtime.py GSD-Task: S02/T03
- src/scc_cli/bootstrap.py - src/scc_cli/application/start_session.py - tests/test_bootstrap_backend_selection.py - tests/test_start_session_image_routing.py - tests/test_bootstrap.py GSD-Task: S02/T04
- src/scc_cli/core/egress_policy.py - tests/test_egress_policy.py GSD-Task: S03/T01
- src/scc_cli/adapters/egress_topology.py - tests/test_egress_topology.py - images/scc-egress-proxy/Dockerfile - images/scc-egress-proxy/squid.conf.template - images/scc-egress-proxy/entrypoint.sh GSD-Task: S03/T02
- src/scc_cli/adapters/oci_sandbox_runtime.py - tests/test_oci_sandbox_runtime.py - tests/test_oci_egress_integration.py GSD-Task: S03/T03
- src/scc_cli/core/destination_registry.py - tests/test_destination_registry.py GSD-Task: S04/T01
- src/scc_cli/ports/models.py - src/scc_cli/application/start_session.py - src/scc_cli/adapters/oci_sandbox_runtime.py - src/scc_cli/application/launch/preflight.py - tests/test_oci_egress_integration.py - tests/test_launch_preflight.py GSD-Task: S04/T02
- src/scc_cli/doctor/checks/environment.py - src/scc_cli/doctor/checks/__init__.py - src/scc_cli/doctor/__init__.py - src/scc_cli/doctor/core.py - src/scc_cli/application/support_bundle.py - tests/test_doctor_checks.py - tests/test_support_bundle.py GSD-Task: S04/T03
- src/scc_cli/application/compute_effective_config.py - src/scc_cli/commands/config.py - tests/test_config_explain.py - README.md GSD-Task: S05/T01
- tests/test_docs_truthfulness.py GSD-Task: S05/T02
GSD-Unit: M003
- src/scc_cli/core/enums.py - src/scc_cli/core/shell_tokenizer.py - src/scc_cli/ports/safety_engine.py - tests/test_shell_tokenizer.py GSD-Task: S01/T01
- src/scc_cli/core/git_safety_rules.py - src/scc_cli/core/network_tool_rules.py - tests/test_git_safety_rules.py - tests/test_network_tool_rules.py GSD-Task: S01/T02
- src/scc_cli/core/safety_engine.py - src/scc_cli/bootstrap.py - tests/fakes/fake_safety_engine.py - tests/fakes/__init__.py - tests/test_safety_engine.py - tests/test_safety_engine_boundary.py GSD-Task: S01/T03
- images/scc-base/wrappers/scc_safety_eval/engine.py - images/scc-base/wrappers/scc_safety_eval/policy.py - images/scc-base/wrappers/scc_safety_eval/__main__.py - images/scc-base/wrappers/scc_safety_eval/contracts.py - images/scc-base/wrappers/scc_safety_eval/enums.py - images/scc-base/wrappers/scc_safety_eval/shell_tokenizer.py - images/scc-base/wrappers/scc_safety_eval/git_safety_rules.py - images/scc-base/wrappers/scc_safety_eval/network_tool_rules.py GSD-Task: S02/T01
- images/scc-base/wrappers/bin/git - images/scc-base/wrappers/bin/curl - images/scc-base/wrappers/bin/wget - images/scc-base/wrappers/bin/ssh - images/scc-base/wrappers/bin/scp - images/scc-base/wrappers/bin/sftp - images/scc-base/wrappers/bin/rsync - images/scc-base/Dockerfile GSD-Task: S02/T02
- src/scc_cli/core/contracts.py - src/scc_cli/ports/safety_adapter.py - src/scc_cli/adapters/claude_safety_adapter.py - src/scc_cli/adapters/codex_safety_adapter.py - tests/test_claude_safety_adapter.py - tests/test_codex_safety_adapter.py GSD-Task: S03/T01
- tests/fakes/fake_safety_adapter.py - src/scc_cli/bootstrap.py - tests/fakes/__init__.py - tests/test_safety_adapter_audit.py GSD-Task: S03/T02
- src/scc_cli/core/safety_policy_loader.py - src/scc_cli/doctor/checks/safety.py - src/scc_cli/doctor/checks/__init__.py - src/scc_cli/doctor/core.py - tests/test_safety_policy_loader.py - tests/test_safety_doctor_check.py GSD-Task: S04/T01
- src/scc_cli/application/safety_audit.py - src/scc_cli/presentation/json/safety_audit_json.py - src/scc_cli/commands/support.py - src/scc_cli/application/support_bundle.py - src/scc_cli/kinds.py - tests/test_safety_audit.py GSD-Task: S04/T02
- .gsd/milestones/M005/slices/S01/MAINTAINABILITY-AUDIT.md GSD-Task: S01/T01
- tests/test_oci_sandbox_runtime.py GSD-Task: S05/T11
- tests/test_docs_truthfulness.py - .gsd/DECISIONS.md GSD-Task: S05/T12
GSD-Unit: M007-cqttot
- tests/test_launch_preflight_characterization.py GSD-Task: S01/T01
- src/scc_cli/commands/launch/preflight.py - tests/test_launch_preflight.py GSD-Task: S01/T02
- src/scc_cli/commands/launch/flow.py - src/scc_cli/commands/launch/flow_interactive.py - src/scc_cli/ui/dashboard/orchestrator_handlers.py - tests/test_cli.py - tests/test_start_live_conflict.py - tests/test_start_codex_auth_bootstrap.py - tests/test_launch_preflight.py GSD-Task: S01/T03
- src/scc_cli/commands/launch/flow.py - tests/test_cli_setup.py - tests/test_setup_wizard.py - tests/test_start_dryrun.py - tests/test_integration.py - tests/test_oci_egress_integration.py - tests/test_import_boundaries.py - tests/test_no_root_sprawl.py GSD-Task: S01/T04
- tests/test_launch_preflight_guardrail.py GSD-Task: S01/T05
- src/scc_cli/commands/launch/provider_choice.py - src/scc_cli/setup.py - src/scc_cli/doctor/checks/environment.py - tests/test_auth_vocabulary_guardrail.py GSD-Task: S02/T01
- src/scc_cli/commands/admin.py - src/scc_cli/commands/worktree/container_commands.py - tests/test_doctor_provider_errors.py - tests/test_docs_truthfulness.py - tests/test_lifecycle_inventory_consistency.py GSD-Task: S02/T02
- src/scc_cli/commands/launch/dependencies.py - src/scc_cli/commands/launch/provider_choice.py - src/scc_cli/setup.py - tests/test_docs_truthfulness.py GSD-Task: S02/T03
- (none) GSD-Task: S02/T04
- tests/test_workspace_provider_persistence.py GSD-Task: S03/T01
- tests/test_resume_after_drift.py - src/scc_cli/commands/launch/auth_bootstrap.py GSD-Task: S03/T02
- tests/test_setup_idempotency.py - tests/test_error_message_quality.py GSD-Task: S03/T03
- src/scc_cli/docker/core.py - src/scc_cli/docker/launch.py - src/scc_cli/docker/sandbox.py - src/scc_cli/adapters/docker_sandbox_runtime.py GSD-Task: S03/T04
GSD-Unit: M008-g7jk8d
GSD-Unit: M008-g7jk8d
- src/scc_cli/commands/launch/preflight.py - src/scc_cli/commands/worktree/worktree_commands.py - src/scc_cli/ui/dashboard/orchestrator_handlers.py - tests/test_launch_preflight.py - tests/test_resume_after_drift.py GSD-Task: S01/T01
- src/scc_cli/commands/launch/flow.py - src/scc_cli/commands/launch/flow_interactive.py - tests/test_launch_preflight_guardrail.py - tests/test_start_codex_auth_bootstrap.py - tests/test_workspace_provider_persistence.py - tests/test_cli.py - tests/test_launch_preflight_characterization.py GSD-Task: S01/T02
- src/scc_cli/commands/launch/auth_bootstrap.py - src/scc_cli/commands/launch/preflight.py - tests/test_auth_vocabulary_guardrail.py GSD-Task: S01/T03
- src/scc_cli/setup.py GSD-Task: S02/T01
GSD-Unit: M009-xwi4bt
Keep the durable .gsd project and milestone docs in Git while removing runtime churn from normal feature diffs. This updates .gitignore to exclude GSD state files, event logs, databases, local preference/override files, completed-unit manifests, reports, and recovery snapshots. It also removes the currently tracked runtime and recovery artifacts from the index only, so local GSD functionality continues to work unchanged while future commits stay focused on product code and durable documentation.
Remove milestone slice/task churn, generated reports, and local helper artifacts from the branch so the PR stays focused on product code, tests, images, and durable project docs. Keep the AGENTS-referenced M001 milestone docs, preserve local copies of the removed GSD artifacts under ignored runtime backup storage, and ignore local-only files such as .bg-shell, coverage.json, and READMEGSD.md going forward.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
This PR turns SCC into a provider-neutral governed runtime for AI coding agents instead of a Claude-only wrapper.
It brings Claude Code and Codex onto the same core launch model, hardens the OCI runtime and network-control path, improves setup/start/provider UX, and refreshes the product surface so SCC reads and behaves like a multi-provider platform.
What changed
scc-base,scc-agent-claude,scc-agent-codex, andscc-egress-proxyopen,web-egress-enforced,locked-down-webscc setup,scc provider show/set,scc start --provider ...).gsdbranch noise and keep only durable project documentation in GitWhy it matters
SCC now supports a more realistic organizational rollout model:
Validation
uv run ruff checkuv run mypy src/scc_cliuv run pytest -q5117 passed, 23 skipped, 2 xfailedNotes
1.7.3.release/...branch rather than inside this merge PR.Companion docs
A matching docs refresh was prepared in the docs repo to align the public documentation with the multi-provider SCC product story.