{"id":50833195,"url":"https://github.com/synheart-ai/synheart-core-swift","last_synced_at":"2026-06-14T01:30:36.405Z","repository":{"id":360583555,"uuid":"1095751804","full_name":"synheart-ai/synheart-core-swift","owner":"synheart-ai","description":"iOS/macOS SDK for the Human Stat Index (HSI) — biosignals, behavior, on-device state computation","archived":false,"fork":false,"pushed_at":"2026-06-03T23:09:58.000Z","size":478,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-06-04T02:07:46.201Z","etag":null,"topics":["behavior","biosignals","hrv","hsi","ios","macos","mental-health","on-device","sdk","swift","wellbeing"],"latest_commit_sha":null,"homepage":"https://docs.synheart.ai/synheart-core/swift","language":"Swift","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"other","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/synheart-ai.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":"CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":".github/CODEOWNERS","security":"SECURITY.md","support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2025-11-13T13:25:12.000Z","updated_at":"2026-06-03T23:10:01.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/synheart-ai/synheart-core-swift","commit_stats":null,"previous_names":["synheart-ai/synheart-core-swift"],"tags_count":1,"template":false,"template_full_name":null,"purl":"pkg:github/synheart-ai/synheart-core-swift","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/synheart-ai%2Fsynheart-core-swift","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/synheart-ai%2Fsynheart-core-swift/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/synheart-ai%2Fsynheart-core-swift/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/synheart-ai%2Fsynheart-core-swift/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/synheart-ai","download_url":"https://codeload.github.com/synheart-ai/synheart-core-swift/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/synheart-ai%2Fsynheart-core-swift/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":34306772,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-06-13T02:00:06.617Z","response_time":62,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["behavior","biosignals","hrv","hsi","ios","macos","mental-health","on-device","sdk","swift","wellbeing"],"created_at":"2026-06-14T01:30:35.672Z","updated_at":"2026-06-14T01:30:36.397Z","avatar_url":"https://github.com/synheart-ai.png","language":"Swift","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Synheart Core SDK - SWIFT\n\n[![Version](https://img.shields.io/badge/version-0.0.5-blue.svg)](https://github.com/synheart-ai/synheart-core-swift)\n[![Swift](https://img.shields.io/badge/swift-%3E%3D5.9-orange.svg)](https://swift.org)\n[![License](https://img.shields.io/badge/license-Apache%202.0-green.svg)](LICENSE)\n\n\u003e **Source-available.** This repository is open for reading, auditing, and\n\u003e filing issues. We do **not** accept pull requests — see\n\u003e [CONTRIBUTING.md](CONTRIBUTING.md) for the rationale and how to contribute\n\u003e via issues. Security reports go through [SECURITY.md](SECURITY.md).\n\niOS/macOS/watchOS platform SDK for Synheart. This is a thin wrapper around the Synheart runtime — a native binary that owns the on-device business logic and is loaded by this SDK at startup.\n\nHuman state inference is computed on-device by a deterministic signal-processing pipeline that runs inside the runtime. This SDK communicates with the runtime via `dlsym` / static linking (`libsynheart_core_runtime`).\n\nThis SDK handles platform-specific concerns only: sensor collection (HealthKit, WatchConnectivity), Secure Enclave key management, Keychain storage, Combine reactive streams, and SwiftUI integration.\n\n## Architecture\n\n```\nSwift App\n    |\nsynheart-core-swift (this SDK)\n    |-- Wear/Phone/Behavior modules (platform sensor collection)\n    |-- CoreRuntimeBridge (loads the runtime native binary)\n    |\nSynheart runtime native binary\n    |-- HSI computation\n    |-- Storage, Crypto, Sync, Auth, Consent, Capabilities\n```\n\n## Repositories\n\n| Repository | Purpose |\n|------------|---------|\n| **[synheart-core-flutter](https://github.com/synheart-ai/synheart-core-flutter)** | Flutter/Dart platform SDK |\n| **[synheart-core-kotlin](https://github.com/synheart-ai/synheart-core-kotlin)** | Android/Kotlin platform SDK |\n| **[synheart-core-swift](https://github.com/synheart-ai/synheart-core-swift)** | iOS/Swift platform SDK (this repository) |\n\n## Overview\n\nThe Synheart Core SDK consolidates all Synheart signal channels into one SDK:\n\n- **Wear Module** → Biosignals (HR, HRV, sleep, motion)\n- **Phone Module** → Motion + context signals\n- **Behavior Module** → Digital interaction patterns\n- **HSI Runtime** → Signal fusion + state computation (via the runtime native binary)\n- **Consent Module** → User permission management\n- **Capabilities Module** → Feature gating (core/extended/research)\n- **Cloud Connector** → Secure HSI snapshot uploads\n\n**Key principle:**\n\u003e One SDK, many modules, unified human-state model\n\n## Architecture\n\n### Core Principle\n\n\u003e **All inference is computed by synheart-engine.**\n\u003e\n\u003e **SDKs coordinate data collection and distribution.**\n\nThe Core SDK strictly separates:\n- **Computation** — synheart-engine computes HSV\n- **Collection** — Core SDK modules (Wear, Phone, Behavior, Consent, Capability)\n- **Distribution** — HSI JSON export, cloud upload, raw HSV diagnostics\n\n### Core Modules\n\n1. **Capabilities Module** — Feature gating (core/extended/research)\n2. **Consent Module** — User permission management\n3. **Wear Module** — Biosignal collection from wearables\n4. **Phone Module** — Device motion and context signals\n5. **Behavior Module** — User-device interaction patterns\n6. **HSI Runtime** — Signal fusion and state computation (via the runtime native binary)\n7. **Cloud Connector** — Secure HSI snapshot uploads\n\n### Optional Modules\n\nThese ship in the same target and are wired through the runtime, but only become useful once you've granted the relevant consent / capabilities. Each is a thin Swift facade around an existing FFI surface.\n\n| Module | Purpose | Entry point |\n|---|---|---|\n| **Baselines** | Reactive snapshot of the user's wearable-baseline state — `AnyPublisher\u003cBaselinesSnapshot, Never\u003e` with `latestSleepScore` / `latestRecoveryScore` / `latestReadinessScore` / `reference` / 7-night recent-scores ring. | `Baselines.shared` |\n| **Breathing** | 4-pillar breathing-compliance detector. RR samples from `pushRr` feed it automatically; module configures target BPM / population / window. | `BreathingModule(bridge:)` |\n| **Syni** | Consent-gated facade around the [`SyniSwift`](https://github.com/synheart-ai/syni-swift) on-device agent SDK. Wraps `SyniAgent` install lifecycle + chat with a `consent.syni` check. | `SyniModule(consent:)` |\n| **HealthKit backfill** | Cold-start SRM seeding from HealthKit sleep + overnight HR/HRV history. Pushes `sleep_need` / `deep_sleep_min` / `rem_sleep_min` / `hrv_rmssd` / `resting_hr` per wake-day. | `HealthKitRuntimeSink(reader:, pushDaily:, triggerRecompute:)` |\n| **Scoring models** | Typed input + result types for the runtime's Sleep / Recovery / Readiness scorers, plus a self-report `SleepQuestionnaireAnswers`. | `Models/{SleepScore,RecoveryScore,ReadinessScore,SleepQuestionnaire}.swift` |\n| **Cloud upload models** | Typed `UploadRequest` / `UploadResponse` / `UploadErrorResponse` for the snapshot-upload protocol. Round-trips byte-equivalent JSON with Flutter + Kotlin siblings. | `Modules/Cloud/UploadModels.swift` |\n\nExamples:\n\n```swift\n// Baselines — react to every score / reference update\nBaselines.shared.updates\n    .sink { snap in\n        if let s = snap.latestSleepScore { render(s.score) }\n        if let r = snap.latestRecoveryScore { render(r.score) }\n    }\n    .store(in: \u0026cancellables)\n\n// Breathing — configure once, evaluate per UI frame\nlet breathing = BreathingModule(bridge: coreRuntime)\nbreathing.setTargetBpm(6.0)\nbreathing.setPopulation(.beginner)\nswitch breathing.evaluate() {\ncase let .compliant(metrics):\n    showCompliant(metrics)\ncase let .notCompliant(_, reason):\n    showCoaching(BreathingGuidanceCopy.copyFor(reason))\ncase let .insufficient(reason):\n    showWarming(reason)\n}\n\n// HealthKit backfill — call on first launch after authorization\nlet reader = HealthKitHistoryReader() // from synheart-wear-swift\nlet sink = HealthKitRuntimeSink(\n    reader: reader,\n    pushDaily: { dim, day, value, conf, fid in\n        coreRuntime.pushWearableDailyValue(\n            dimension: dim, dayIndex: day, value: value,\n            confidence: conf, fidelity: fid\n        )\n    },\n    triggerRecompute: { coreRuntime.triggerWearableRecompute(triggerType: 0, asOfDay: 0) }\n)\nlet result = try await sink.backfill(daysBack: 365)\nprint(\"seeded \\(result.daysIngested) days, \\(result.dimensionsPushed) dimensions\")\n\n// Syni — consent-gated agent\nlet syni = SyniModule(consent: consentModule)\ntry await syni.install(\n    persona: try await SyniSpecPersona.load(\"focus.coach.v1\"),\n    model: SyniModels.qwen25_15bInstructQ4\n)\nlet reply = try await syni.chat(\"how should I focus right now?\")\n```\n\n### Data Flow\n\n```\nWear, Phone, Behavior Modules (raw samples)\n    ↓\nCoreRuntimeBridge → runtime native binary\n    ↓                       ↓\n    ↓             session → state → HSI 1.3 JSON\n    ↓                       ↓\n    ←──── HSI JSON ←────────┘\n    ↓\nSynheart.onHSIUpdate (raw JSON) / Synheart.onStateUpdate (typed)\n```\n\n## Installation\n\n### Swift Package Manager\n\nAdd Synheart Core SDK to your project using Swift Package Manager:\n\n```swift\ndependencies: [\n    .package(url: \"https://github.com/synheart-ai/synheart-core-swift\", from: \"0.0.5\")\n]\n```\n\n## Usage\n\n### Basic Setup\n\nThe Core SDK publishes **HSI 1.3 JSON** as its public output. Apps subscribe via `Synheart.onHSIUpdate` (raw JSON) or `Synheart.onStateUpdate` (typed `HSIState`). There are no separate Focus / Emotion streams.\n\n```swift\nimport SynheartCore\nimport Combine\n\n// Initialize the Core SDK\ntry await Synheart.initialize(config: SynheartConfig(\n    appId: \"com.example.app\",\n    subjectId: \"anon_user_123\",\n    allowUnsignedCapabilities: true  // Use capabilityToken + capabilitySecret in production\n))\n\n// Grant consent for biosignal collection\ntry await Synheart.grantConsent(\"biosignals\")\n\n// Subscribe to HSI updates (core state representation)\nvar cancellables = Set\u003cAnyCancellable\u003e()\n\nSynheart.onHSIUpdate\n    .sink { hsiJson in\n        print(\"HSI JSON: \\(hsiJson)\")\n    }\n    .store(in: \u0026cancellables)\n\n// Subscribe to typed state updates\nSynheart.onStateUpdate\n    .sink { state in\n        print(\"State: \\(state)\")\n    }\n    .store(in: \u0026cancellables)\n\n// Start session — data collection begins\ntry await Synheart.startSession()\n\n// Later, stop when done\ntry await Synheart.stopSession()\ntry await Synheart.dispose()\n```\n\n### Module-Based Architecture\n\nThe SDK exposes individual modules for hosts that need finer-grained lifecycle control. Most apps use the `Synheart.initialize` entry point above and don't need to wire modules by hand.\n\n```swift\nimport SynheartCore\n\nlet capabilities = CapabilityModule()\ncapabilities.loadDefaults() // Development only — use loadFromToken in production\n\nlet consent = ConsentModule()\n\nlet wearModule = WearModule(capabilities: capabilities, consent: consent)\nlet phoneModule = PhoneModule(capabilities: capabilities, consent: consent)\nlet behaviorModule = BehaviorModule(capabilities: capabilities, consent: consent)\n\ntry await capabilities.initialize()\ntry await consent.initialize()\ntry await consent.grantAll()\ntry await wearModule.initialize()\ntry await phoneModule.initialize()\ntry await behaviorModule.initialize()\n\ntry await wearModule.start()\ntry await phoneModule.start()\ntry await behaviorModule.start()\n```\n\n### Accessing Current State\n\n```swift\n// currentState returns the latest raw HSI JSON frame (String?).\nif let currentJson = Synheart.currentState {\n    print(\"Latest HSI JSON: \\(currentJson)\")\n}\n\n// For typed access, use currentHSIState:\nif let state = Synheart.currentHSIState {\n    print(\"Current state: \\(state)\")\n}\n```\n\n\n## Error Handling\n\nThe SDK uses Swift's native error handling with typed errors:\n\n```swift\ndo {\n    try await Synheart.initialize(config: SynheartConfig(\n        appId: \"com.example.app\",\n        subjectId: \"user_123\",\n        allowUnsignedCapabilities: true\n    ))\n    try await Synheart.startSession()\n} catch SynheartError.alreadyConfigured {\n    print(\"SDK already initialized\")\n} catch SynheartError.capabilityTokenRequired {\n    print(\"Provide a valid capability token or set allowUnsignedCapabilities: true\")\n} catch SynheartError.notInitialized {\n    print(\"Call initialize() first\")\n} catch {\n    print(\"Unexpected error: \\(error)\")\n}\n```\n\n### Error Types\n\n| Error | When |\n|-------|------|\n| `SynheartError.notInitialized` | Method called before `initialize()` |\n| `SynheartError.alreadyConfigured` | `initialize()` called twice |\n| `SynheartError.capabilityTokenRequired` | No token provided and `allowUnsignedCapabilities` is false |\n| `SynheartError.notImplemented(String)` | Feature not yet available |\n\n\n## Architecture Details\n\n### Modular Architecture (`SynheartCore/Modules/`)\n\nA module-based system for data collection and processing:\n\n- **WearModule**: Collects biosignal features from wearables\n- **PhoneModule**: Collects phone context features (motion, app switches, screen time)\n- **BehaviorModule**: Extracts behavioral patterns (typing, scrolling, interactions)\n- **CapabilityModule**: Handles feature flags and capability levels\n- **ConsentModule**: Manages user consent for data collection\n\nSee [ARCHITECTURE.md](docs/ARCHITECTURE.md) for detailed architecture documentation.\n\n## Data Models\n\nThe runtime emits **HSI 1.3 JSON** as its public output. Apps subscribe via `Synheart.onHSIUpdate` (raw JSON) or `Synheart.onStateUpdate` (typed `HSIState`). Internal types (`Hsv` and friends) are not part of the public SDK API.\n\n### Window Features (`SynheartCore/Modules/Interfaces/FeatureProviders.swift`)\n\nFor the modular architecture, features are collected in time windows:\n\n- **WearWindowFeatures**: HR, HRV, motion, sleep stage, respiration\n- **PhoneWindowFeatures**: Motion level, app switch rate, screen on ratio, notification rate\n- **BehaviorWindowFeatures**: Typing cadence, scroll velocity, burstiness, distraction score, focus hints\n\n## API Reference\n\n### Synheart (Main Entry Point)\n\n| Method | Description |\n|--------|-------------|\n| `initialize(config:userId:autoStart:)` | Initialize the SDK (must be called first) |\n| `startSession()` | Start data collection |\n| `stopSession()` | Stop data collection |\n| `activate(_:)` | Enable a feature (wear, behavior, phoneContext, etc.) |\n| `deactivate(_:)` | Disable a feature |\n| `syncNow()` | Execute a sync cycle (push + pull) |\n| `grantConsent(_:)` | Grant consent for a data type |\n| `revokeConsent(_:)` | Revoke consent for a data type |\n| `hasConsent(_:)` | Check if consent is granted |\n| `stop()` | Stop the session |\n| `dispose()` | Release all resources |\n\n### Properties\n\n| Property | Type | Description |\n|----------|------|-------------|\n| `onHSIUpdate` | `AnyPublisher\u003cString, Never\u003e` | HSI JSON frames from synheart-engine |\n| `onStateUpdate` | `AnyPublisher\u003cHSIState, Never\u003e` | Typed HSI state updates |\n| `currentState` | `String?` | Latest HSI JSON frame |\n| `currentHSIState` | `HSIState?` | Latest typed HSI state |\n| `currentConsent` | `ConsentSnapshot?` | Current consent state |\n| `isInitialized` | `Bool` | Whether SDK is initialized |\n| `isRunning` | `Bool` | Whether a session is active |\n\n## Project Structure\n\n```\nSynheartCore/\n├── Config/                  # SynheartConfig, CloudConfig, etc.\n├── CoreRuntime/             # Bridge to the runtime native binary\n├── Models/                  # Internal data models (HSI 1.3 typed projection)\n├── Modules/\n│   ├── Base/               # Module base classes and manager\n│   ├── Wear/               # Wearable data collection\n│   ├── Phone/              # Phone context collection\n│   ├── Behavior/            # Behavior event collection\n│   ├── Capabilities/       # Feature flags and capabilities\n│   ├── Consent/            # Consent management\n│   ├── Cloud/              # Cloud connector\n│   ├── SRM/                # Self-Reference Model (baseline persistence)\n│   └── Interfaces/         # Module contracts and data types\n└── Synheart.swift          # Public SDK facade / main entry point\n```\n\n## Platform Integration\n\n### HealthKit (via synheart-wear-swift)\n\nThe Wear Module collects biosignals from HealthKit via synheart-wear-swift:\n\n- Heart rate monitoring\n- Heart rate variability (HRV)\n- Respiratory rate\n- Sleep stage detection\n- Motion/activity data\n\n### CoreMotion (via synheart-behavior-swift)\n\nThe Phone Module collects device motion via CoreMotion:\n\n- Accelerometer data\n- Gyroscope data\n- Device motion (attitude, rotation rate)\n\n### Behavior Tracking (via synheart-behavior-swift)\n\nThe Behavior Module captures user-device interaction patterns:\n\n- Tap events\n- Scroll gestures\n- Typing/keystroke events\n\n## Privacy \u0026 Security\n\n- All processing is **on-device by default**\n- **No raw biosignals** stored or transmitted\n- **HSI stream is consent-gated** — `onHSIUpdate` only emits frames when `biosignals` consent is granted\n- Cloud sync only for aggregated HSI (with consent)\n- **SRM baseline persistence** — Learned baselines are encrypted and persisted to Keychain, restored automatically on next launch\n- Consent management via `ConsentModule`\n- Capability-based feature access control\n- Non-medical use only\n\n## Requirements\n\n- iOS 16.0+ / macOS 13.0+ / watchOS 8.0+ / tvOS 15.0+\n- Swift 5.9+\n\n## Testing\n\n### Running Tests\n\n```bash\nswift test\n```\n\n### Testing with Mock Providers\n\nThe SDK ships with mock data sources for development and testing. When no real wearable or sensor is connected, modules use mock collectors that emit synthetic data.\n\nTo test your integration without hardware:\n\n```swift\n// Initialize with default capabilities (no real token needed)\ntry await Synheart.initialize(config: SynheartConfig(\n    appId: \"com.example.test\",\n    subjectId: \"test_user\",\n    allowUnsignedCapabilities: true\n))\n\n// Start session — mock data will flow through all streams\ntry await Synheart.startSession()\n\n// Subscribe and verify\nSynheart.onHSIUpdate\n    .sink { hsiJson in\n        // Verify HSI JSON from synheart-engine\n        print(\"HSI: \\(hsiJson)\")\n    }\n    .store(in: \u0026cancellables)\n```\n\n## Related Repositories\n\nThis iOS implementation is part of a multi-platform SDK:\n\n- **Flutter:** `synheart-core-flutter` (Dart/Flutter implementation)\n- **iOS:** `synheart-core-swift` (this repository)\n- **Android:** `synheart-core-kotlin` (Kotlin implementation)\n\nAll three implementations share the same modular architecture. See the Flutter repository for comprehensive documentation.\n\n## Local Development with `synheart local`\n\nFor offline SDK development and testing, use the **Synheart CLI** local platform server. It replicates the cloud consent and ingest APIs locally.\n\n### Setup\n\n1. Install the Synheart CLI:\n\n```bash\n# macOS / Linux\ncurl -fsSL https://synheart.sh/install | sh\n\n# Windows (PowerShell)\niwr -useb https://synheart.sh/install.ps1 | iex\n```\n\nSee [docs.synheart.ai/setup/install-cli](https://docs.synheart.ai/setup/install-cli) for details.\n\n2. Start the local platform:\n\n```bash\nsynheart local\n```\n\nThis starts an HTTP server on `localhost:8083` with mock consent profiles, token issuance, and ingest endpoints.\n\n### Connecting your iOS app\n\nPoint the SDK at the local server:\n\n```swift\nlet config = SynheartConfig(\n    appId: \"your_app_id\",\n    subjectId: \"user_123\",\n    allowUnsignedCapabilities: true,\n    labIngestConfig: LabIngestConfig(\n        baseUrl: \"http://localhost:8083\",  // Simulator can reach host localhost\n        apiKey: \"mock-dev-api-key-2026\"\n    )\n)\n```\n\nFor a physical device on the same network:\n\n```swift\nbaseUrl: \"http://192.168.1.100:8083\"  // your machine's LAN IP\n```\n\n**Note:** For physical devices, add an App Transport Security exception in `Info.plist` to allow HTTP:\n\n```xml\n\u003ckey\u003eNSAppTransportSecurity\u003c/key\u003e\n\u003cdict\u003e\n    \u003ckey\u003eNSAllowsLocalNetworking\u003c/key\u003e\n    \u003ctrue/\u003e\n\u003c/dict\u003e\n```\n\n### Available endpoints\n\n| Method | Path | Description |\n|--------|------|-------------|\n| `GET` | `/api/v1/apps/{id}/consent-profiles` | Fetch consent profiles |\n| `POST` | `/api/v1/sdk/consent-token` | Issue consent token |\n| `POST` | `/api/v1/sdk/consent-revoke` | Revoke consent |\n| `POST` | `/v1/ingest/hsi` | Ingest HSI snapshots |\n| `POST` | `/v1/platform/session/ingest` | Ingest session data |\n| `POST` | `/v1/platform/metadata/ingest` | Ingest metadata |\n| `GET` | `/status` | Server status and stats |\n\n### Default credentials\n\nProduction cloud ingest is signed with **ECDSA P-256** via\n`X-Synheart-Proof` (compact JWS) plus a `X-Consent-Token` JWT — see\n[`synheart-auth`](https://github.com/synheart-ai/synheart-auth) and\nRFC-AUTH-MOBILE-0001. The `synheart local` server below ships\ndevelopment-only mock keys for offline iteration.\n\n- **API Key:** `mock-dev-api-key-2026` (mock platform only)\n- **Mock dev secret:** `mock-dev-hmac-secret-2026` (local testing only — production is ECDSA, not a shared secret)\n\nIngested payloads are persisted as JSON files in the local server's data directory.\n\n## Documentation\n\n- **[Architecture](docs/ARCHITECTURE.md)** - Detailed architecture documentation\n\n## 📄 License\n\nApache 2.0 License - see [LICENSE](LICENSE) for details.\n\nCopyright 2025-2026 Synheart AI Inc.\n\n## Author\n\nSynheart AI Team\n\n## Patent Pending Notice\n\nThis project is provided under an open-source license. Certain underlying systems, methods, and architectures described or implemented herein may be covered by one or more pending patent applications.\n\nNothing in this repository grants any license, express or implied, to any patents or patent applications, except as provided by the applicable open-source license.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsynheart-ai%2Fsynheart-core-swift","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fsynheart-ai%2Fsynheart-core-swift","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsynheart-ai%2Fsynheart-core-swift/lists"}