Mandatory Protocols

Compliance with SOS requires implementing specific interaction patterns.

The "Safety-Valve" Protocol

Every compliant tool must implement a --dry-run flag.

Interaction Requirements

  1. Dry Run Output: When --dry-run is passed, the tool MUST NOT perform any destructive actions.

  2. Execution Tree: The tool MUST output the exact execution tree (the logical steps it would have taken) in structured JSON format.

  3. Machine Readability: This allows for CI/CD pipelines to validate command intent before execution on production systems.

# Example
my-app --file=data.json --delete --dry-run

Output:

{
  "action": "delete",
  "target": "data.json",
  "verified": true,
  "safety_valve": "triggered"
}

Config Lifecycle Management

Every compliant tool that reads user, project, or global config keys MUST implement Config Lifecycle Management.

Summary:

  • Catalog every key the tool has ever recognized (active, deprecated, expired).

  • Never delete catalog entries or stop detecting expired keys.

  • Always notify on deprecated, expired, and unknown matches found in config sources.

  • Prefer a shared library for classify → match → alert.

Full normative text: Config Lifecycle Management Protocol.

Text Encoding

Every compliant shell and every compliant tool that reads or writes text MUST meet the text encoding requirements in Design Considerations: UTF-8 by default, no silent transcoding, explicit and reported legacy encodings, byte-order mark handling, round-trip safety, and machine-readable encoding errors. They exist because AI agents edit through the shell and cannot see corrupted text.