Adds README.md to each of the 13 SPM packages (AgentCore, Bus, Config, DevOverlay, Harness, Keychain, Logging, MCP, Memory, Replay, Shell, Vision, Voice). Each covers purpose, key public types, deps, consumers, invariants (pulled from CLAUDE.md + grep-gates + audit findings), test stack, and notable files. Memory README explicitly marks the package functionally OFF until vec0.dylib + Ollama models land. Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
Keychain
Thin actor wrapper over SecItem for secrets (currently the Anthropic API key; any future secret routes through here).
Key public types
| Type | Purpose |
|---|---|
KeychainStore (protocol) |
Test seam — production = SystemKeychainStore, tests = FakeKeychain |
SystemKeychainStore |
Real SecItem actor wrapper |
KeychainItem |
Strong-typed key (account + service) |
KeychainError |
Errors propagated through construction chains, not swallowed |
Depends on
(no internal Jarvis package dependencies — the leaf at the bottom of the graph).
Used by
packages/AgentCore (AnthropicAPIKeyProvider), packages/Config, App/AppDelegate.
Key invariants / contracts
- Errors propagate.
AnthropicAPIKeyProvider.makethrows on missing key (Track A fix — was previously swallowed). - No plaintext secrets in JSON or
UserDefaults. Everything sensitive goes through this package. - Fake taxonomy.
FakeKeychainis an in-memory dictionary-backed store with realistic behavior (Fake per CLAUDE.md §Test naming conventions).
Tests
XCTest. Round-trip read/write/delete on FakeKeychain. Production SystemKeychainStore tests gated to skip in CI (require user-keychain access).
Notable files
Sources/Keychain/KeychainStore.swift— the protocolSources/Keychain/SystemKeychainStore.swift— productionSources/Keychain/KeychainItem.swift— typed keysSources/Keychain/KeychainError.swift— error union