packages/docs/guides/soc2-readiness.mdx
SOC 2 is an organization-level attestation covering people, process, and technology. This repository (as an OSS library/SDK) cannot be “SOC 2 compliant” by itself.
This guide documents SOC 2–aligned engineering defaults and operator guidance for downstream teams building a SOC 2–scoped service on top of elizaOS packages.
Within this repository, the SOC 2–relevant components are the runtimes and interoperability layers:
packages/typescript (@elizaos/core)packages/python (elizaos)packages/rust (elizaos)packages/interop (@elizaos/interop + Python/Rust helpers)packages/prompts (@elizaos/prompts)Anything outside these packages (your deployment, infrastructure, access controls, monitoring, incident response, vendor management) is owned by the operator.
In typical deployments:
Memory and State (messages, usernames, IDs, metadata, attachments).Default stance for SOC 2: treat Memory, State, logs, and prompt context as Confidential.
flowchart LR
User[UserInput] --> Runtime[AgentRuntime]
Runtime --> Plugins[PluginsActionsProvidersEvaluators]
Runtime --> Models[ModelProviders]
Runtime --> Storage[(DBAdapters)]
subgraph interop [InteropPaths]
IPC[IPCSubprocess_JSON]
WASM[WASM]
FFI[FFI_SharedLib]
end
Runtime --> IPC
Runtime --> WASM
Runtime --> FFI
IPC --> Plugins
WASM --> Plugins
FFI --> Plugins
This is a practical mapping of what the codebase helps with vs what operators must implement.
packages/typescript/src/logger.ts) and Python core (packages/python/elizaos/logger.py).packages/interopinheritEnv: false and pass only required env vars for the plugin.packages/promptsnpm run check:secrets in packages/prompts to catch obvious credential strings.packages/typescript, packages/python, packages/rust (core runtimes)v2:<ivHex>:<ciphertextHex>:<tagHex> (AES-256-GCM, AAD = elizaos:settings:v2)<ivHex>:<ciphertextHex> (AES-256-CBC) is still readable for backward compatibility.Secrets
SECRET_SALT to a strong, unique value per environment.NODE_ENV=production), the core settings helpers fail closed if SECRET_SALT is unset/default (secretsalt). You can override with ELIZA_ALLOW_DEFAULT_SECRET_SALT=true (not recommended).Logging
Plugins / interop
Supply chain
This is an operator-focused “final checklist” for deploying a service that embeds these packages.
Tests (real execution)
bun run test:corecd packages/interop && bun run testcd packages/python && python -m pytest -qcd packages/interop/python && python -m pytest -qcd packages/rust && cargo test -qConfiguration (no hardcoded secrets)
SECRET_SALT (unique per env).Monitoring & alerting
src fields (and, for key interop paths, stable event codes)event=interop.ipc.stdout_buffer_exceeded OR event=interop.ipc.message_exceeded OR event=interop.ipc.parse_failedevent=core.settings.default_secret_salt (should be 0 in production)src=interop:python-bridge AND (stream=stderr) with elevated rateRollback path
Performance
cd packages/typescript && bun run perf:settingsbenchmarks/ and benchmark_results/ as starting points, and add deployment-specific load tests.bun.lock pins the workspace dependency graph when installing with Bun.packages/rust/Cargo.lock is committed; CI runs cargo ... --locked to enforce it.packages/python/requirements.lock and packages/python/requirements-dev.lock are generated via pip-compile and used by CI to pin transitive dependencies.SECURITY.md (vulnerability reporting).github/workflows/codeql.yml (static analysis).github/workflows/supply-chain.yaml (SBOM + vulnerability scan artifacts).github/workflows/ci.yaml (tests, including prompt secret scan)