{
  "status": "experimental",
  "provider": "nostr-vpn-fips",
  "upstream": {
    "website": "https://nostrvpn.org/",
    "repository": "https://github.com/jmcorgan/fips",
    "release_channel": "pinned-release",
    "minimum_reviewed_version": "v0.4.0-rc1",
    "macos_binary_package_status": "v0.4.0-rc1 macOS arm64 package checksum and structure validated locally; package is unsigned, so treat pkgutil no-signature output as a warning before privileged install",
    "verify_checksums": true
  },
  "macos_source_build": {
    "enabled_until_upstream_package": "release packages are unavailable or fail integrity checks",
    "prerequisites": ["rustup", "xcode-select command line tools", "pkgbuild"],
    "commands": [
      "git clone https://github.com/jmcorgan/fips.git",
      "cd fips",
      "git checkout v0.4.0-rc1",
      "./packaging/macos/build-pkg.sh",
      "pkgutil --check-signature deploy/fips-0.4.0-rc1-macos-$(uname -m).pkg",
      "pkgutil --payload-files deploy/fips-0.4.0-rc1-macos-$(uname -m).pkg",
      "rm -rf /tmp/fips-source-pkg-expanded-${USER} && pkgutil --expand deploy/fips-0.4.0-rc1-macos-$(uname -m).pkg /tmp/fips-source-pkg-expanded-${USER}",
      "sudo installer -pkg deploy/fips-0.4.0-rc1-macos-$(uname -m).pkg -target /"
    ],
    "notes": "Do not install if pkgutil integrity checks fail. Never store private Nostr keys in the cloned source tree."
  },
  "identity": {
    "mode": "per-device",
    "privacy_mode": "fresh identity per device and purpose; do not reuse public/social Nostr npubs",
    "private_key_storage": "aidevops secret set FIPS_NSEC for import/recovery only; otherwise use the upstream key file with owner-only permissions",
    "public_address_format": "npub",
    "never_commit": [
      "Nostr private keys",
      "nsec values",
      "FIPS key files",
      "OpenCode server tokens"
    ]
  },
  "devices": {
    "laptop": {
      "role": "client",
      "npub": "npub1examplelaptop...",
      "alias": "laptop.fips",
      "allowed_services": ["ssh"]
    },
    "workstation": {
      "role": "compute",
      "npub": "npub1exampleworkstation...",
      "alias": "workstation.fips",
      "allowed_services": ["ssh", "opencode"]
    },
    "vps": {
      "role": "rendezvous-or-gateway-candidate",
      "npub": "npub1examplevps...",
      "alias": "vps.fips",
      "allowed_services": ["ssh"]
    }
  },
  "opencode_remote_compute": {
    "enabled": false,
    "bind": "loopback-or-fips-interface-only",
    "token_secret": "OPENCODE_SERVER_TOKEN",
    "allowed_peers": ["npub1examplelaptop..."],
    "notes": "Store the token with aidevops secret set OPENCODE_SERVER_TOKEN; do not expose OpenCode ports on public interfaces."
  },
  "aidevops_candidate_services": [
    "OpenCode remote server after SSH is proven",
    "private Git remotes over mesh SSH",
    "MCP services bound to loopback or FIPS-only addresses",
    "local dashboards and staging apps with explicit peer ACLs",
    "homelab storage, GPU workers, and CI/debug workers without public listeners"
  ],
  "security_defaults": {
    "peer_acl": "allowlist",
    "mesh_firewall": "enable-before-service-exposure",
    "single_node_posture": "disable LaunchDaemon after install validation when no trusted peer is ready",
    "fresh_install_acl_warning": "macOS v0.4.0-rc1 single-node testing observed effective_mode default_open with enforcement inactive",
    "lan_gateway": "disabled-until-reviewed",
    "exit_node": "disabled-until-reviewed",
    "public_relay_metadata_warning": true
  },
  "privacy_defaults": {
    "positioning": "private self-sovereign device mesh, not a standalone anonymity network",
    "relay_policy": "prefer self-hosted or trusted private relays; assume public relays can observe npubs, IPs, timing, and discovery metadata",
    "identity_compartmentalization": ["personal", "experiment", "client-work", "travel", "high-risk-research"],
    "service_binding": "loopback-or-fips-interface-only",
    "companion_tools": ["tools/security/opsec.md", "services/communications/privacy-comparison.md", "Tor or reputable no-logs VPN", "self-hosted Nostr relay", "FileVault/LUKS/BitLocker", "YubiKey", "EXIF stripping", "separate browser profiles", "CamoFox or hardened Firefox/Arkenfox"],
    "hard_limit": "full privacy/anonymity cannot be guaranteed by FIPS alone; IPs, timing, fingerprints, writing style, relay logs, and compromised endpoints can identify users"
  },
  "tools": {
    "required": ["fips", "fipsctl"],
    "optional": ["fipstop", "fips-gateway", "jq", "systemctl", "launchctl", "git", "cargo", "pkgbuild", "xcode-select"]
  },
  "setup_steps": [
    "1. Verify and install a pinned upstream FIPS release.",
    "2. On macOS, use v0.4.0-rc1 or later packages only after checksum plus pkgutil/xar structure validation.",
    "3. Reject macOS packages that fail checksum, pkgutil --payload-files, pkgutil --expand, or xar -tf; treat pkgutil no-signature as an unsigned-package warning.",
    "4. Generate one persistent identity per device.",
    "5. Store recovery nsec with: aidevops secret set FIPS_NSEC (only if needed).",
    "6. Record npubs and aliases in a private local config, not in git.",
    "7. If no trusted peer is ready, stop and disable the macOS LaunchDaemon after validating install state.",
    "8. Configure peer allowlists before joining untrusted meshes.",
    "9. Enable the fips0 firewall baseline before exposing SSH/OpenCode.",
    "10. Run: .agents/scripts/nostr-vpn-helper.sh diagnostics, safe-posture, and privacy-guide"
  ]
}
