Agentero
에이전트를 연결해 로컬 Vault에 연구 컨텍스트를 보관·Zotero에서 무결점 이동·읽고 이해·재활용
아직 감지된 업데이트가 없습니다. GitHub 릴리스가 나오면 여기에 보입니다.
개인 계정의 공개 저장소 소유자는 GitHub로 로그인해 운영자를 확인하고 소개를 직접 관리할 수 있습니다. 관리자 승인은 필요하지 않습니다.
로그인한 뒤 확인 파일을 만들어 이 저장소의 기본 브랜치에 30분 안에 커밋해 주세요. 다른 브랜치나 포크의 파일은 인정하지 않습니다. 파일을 올린 뒤 아래에서 확인하면 관리자 승인 없이 관리할 수 있습니다. 자격을 유지하려면 파일을 남겨 두세요.
로그인이 필요하면 로그인 화면으로 이동합니다. 로그인 후 이곳으로 돌아와 원하는 확인 버튼을 다시 눌러 주세요.
프로젝트 폴더에서 /nomorevibe verify를 실행하면 소유권을 확인하고 소개를 직접 관리할 수 있습니다.
1분 만에 확인하기Life Wrapped records audio throughout your day, transcribes it locally on your device, and helps you discover insights about how you spend your time.
저장소 README에서 가져옴
README 전체를 불러오는 중입니다.
README 전문 보기 ↗A private audio journal for iPhone and iPad. Record your day, get it transcribed on your device, read a summary of every recording and every month, and look back with a Year Wrap.
Download on the App Store · Website · Privacy policy · Support · Terms of service
| Platform | iOS and iPadOS 18.0 or later |
| App version in this repo | 1.3 (build number set by Xcode Cloud) |
| Language | Swift 6 (language mode 6.0, strict concurrency) |
| UI | SwiftUI |
| Toolchain | Xcode 26.1 or later |
| Bundle ID | com.jsayram.lifewrapped (widget: com.jsayram.lifewrapped.widget) |
| License | MIT |
lifewrapped://record, lifewrapped://home, lifewrapped://history, lifewrapped://overview, lifewrapped://settings (record links accept a category query parameter)requiresOnDeviceRecognition = true, so audio is never sent off the deviceFour summary qualities. The app falls back automatically when the chosen one is not available.
| Quality | Engine | Where it runs | Fallback order |
|---|---|---|---|
| Key Sentences | BasicEngine: extractive summaries with TF-IDF ranking and Apple's NaturalLanguage framework (NLEmbedding, NLTokenizer, NLTagger) | On device | Key Sentences |
| Offline AI | LocalEngine: Qwen3 4B Instruct 2507, 4-bit (mlx-community/Qwen3-4B-Instruct-2507-4bit, pinned to one commit) run with MLX. One-time download of about 2.3 GB from Hugging Face. Devices with 4 GB of memory (iPhone 12, 12 mini, 13, 13 mini, SE 3rd gen) get Qwen3 1.7B, 4-bit (mlx-community/Qwen3-1.7B-4bit, about 1.0 GB, thinking turned off) instead, and devices with 3 GB don't offer Offline AI. The app checks free memory before loading the model and falls back instead of crashing. Updating from a version that used Phi-3.5, or that downloaded the other Qwen3 size, deletes the old model | On device | Offline AI, then Key Sentences |
| Apple Intelligence | AppleEngine: Apple Intelligence through the Foundation Models framework, always SystemLanguageModel.default (the on-device model). Needs iOS 26 or later on a device with Apple Intelligence turned on | On device | Apple Intelligence, then Offline AI, then Key Sentences |
| Cloud AI | ExternalAPIEngine: OpenAI (Chat Completions API) or Anthropic (Messages API) with the user's own API key. The model ID is free text; defaults are gpt-6-luna and claude-sonnet-5 | Cloud | Cloud AI, then Offline AI, then Key Sentences |
com.jsayram.lifewrapped.smartestai). There is no subscription: the user pays their provider directly through their own keykSecAttrAccessibleAfterFirstUnlock)com.jsayram.lifewrapped.finalize-months) that iOS runs while the device chargessummary_versions table, schema v4). Recordings, months and the Year Wrap have an Earlier versions sheet that restores one, and restoring keeps the replaced text tooGraphite design language: warm off-white and near-black surfaces, ink as the only accent, serif (New York) titles, SF Symbols, hairline borders and no gradients. Light and dark mode are supported. Colors live in App/Constants/AppTheme.swift.
On iPad, screens keep their content in a centered, readable column instead of stretching across the display. History shows the list and the chosen recording side by side, and a recording, the Overview's Today and Yesterday cards and the Year Wrap sections switch to two columns when there's room. The helpers (readableColumn, readableMargins, AppTheme.twoColumnWidth) are in AppTheme.swift.
https://www.apple.com before using Cloud AI. With no key saved it makes no request.group.com.jsayram.lifewrapped. The database directory uses FileProtectionType.completeUntilFirstUserAuthentication. The widget only receives a few numbers: the streak, and today's recording count, words, minutes and last recording time.The full policy is at jsayram.github.io/life-wrapped/privacy.
# 1. Clone
git clone https://github.com/jsayram/life-wrapped.git
cd life-wrapped
# 2. Create the local secrets file (required: Config/Debug.xcconfig includes it)
cp Config/Secrets.example.xcconfig Config/Secrets.xcconfig
# 3. Open the workspace
open LifeWrapped.xcworkspace
Select the LifeWrapped scheme and an iPhone simulator, then Run. Swift packages (MLX, swift-transformers and their dependencies) resolve automatically on first open.
The LifeWrapped scheme uses Config/StoreKitConfiguration.storekit, so the Cloud AI purchase can be tested in the simulator without a real payment.
Tests use Swift Testing, except LocalLLM, which uses XCTest. Xcode creates a scheme for each local package. Select a package scheme (for example Summarization or Storage) and choose Product, then Test.
| Package | Test files |
|---|---|
| AudioCapture | AudioCaptureTests.swift |
| InsightsRollup | InsightsRollupTests.swift |
| LocalLLM | LocalLLMTests.swift |
| SharedModels | SharedModelsTests.swift, JournalDigestsTests.swift, MonthDigestTextTests.swift, YearWrapDataTests.swift |
| Storage | StorageTests.swift, PDFExportPreviewTests.swift (writes sample PDFs to TestResults/pdf-preview/, which git ignores) |
| Summarization | SummarizationTests.swift, EngineRoutingTests.swift, ExternalModelSettingsTests.swift, FidelityProtectionTests.swift, BasicEngineShortTranscriptTests.swift, SessionTitlerTests.swift, MonthDigestTests.swift, YearWrapBuilderTests.swift, AppleIntelligenceLiveTests.swift (skips itself where Apple Intelligence is unavailable) |
| Transcription | TranscriptionTests.swift |
| WidgetCore | WidgetCoreTests.swift |
life-wrapped/
├── App/ # iOS app target (SwiftUI)
│ ├── LifeWrappedApp.swift # Entry point, deep links, appearance
│ ├── ContentView.swift # Tab bar: Record, History, Overview, Settings
│ ├── Components/ # Reusable views: AI, Cards, Layouts, Loading, Recording, Rows, Shared
│ ├── Constants/ # AppTheme (design tokens and shared components), StopWords
│ ├── Coordinators/ # AppCoordinator, DataCoordinator, LocalModelCoordinator,
│ │ # PermissionsCoordinator, RecordingCoordinator, SummaryCoordinator,
│ │ # TranscriptionCoordinator, WidgetCoordinator
│ ├── Helpers/ # Extensions, KeychainHelper and other utilities
│ ├── Models/ # View-level models such as TimeRange
│ ├── Resources/ # Info.plist, entitlements, asset catalog (app icon)
│ ├── Settings/ # Settings screens (AI & Summaries, Recording, Statistics, Data, Privacy)
│ ├── Store/ # StoreKit purchase handling
│ ├── Views/ # Tabs, Details, Overview, Insights, AI, Components, Utility,
│ │ # onboarding (PermissionsView) and data management
│ └── appDocs/ # Internal notes (architecture, App Store, Xcode Cloud, testing)
├── WidgetExtension/ # WidgetKit extension (Quick Record, Today's Sessions)
├── Packages/ # Local Swift packages (swift-tools-version 6.0)
│ ├── SharedModels/ # Data models, constants, feature flags, logging
│ ├── Storage/ # SQLite (SQLite3) persistence, repositories, migrations,
│ │ # JSON/Markdown/PDF export, JSON import
│ ├── AudioCapture/ # Recording, part splitting, file management, playback
│ ├── Transcription/ # On-device speech recognition and language detection
│ ├── Summarization/ # Key Sentences, Offline AI, Apple Intelligence and Cloud AI engines, routing and fallback
│ ├── LocalLLM/ # MLX model loading and Hugging Face download for Offline AI
│ ├── InsightsRollup/ # Streaks, goals, insights
│ └── WidgetCore/ # Data shared with the widget through the App Group
├── Config/ # Debug/Release xcconfig, secrets template, StoreKit configuration
├── Scripts/ # Shell helpers (see below)
├── docs/ # GitHub Pages site: home, privacy, support, terms
├── Images/ # App Store and marketing screenshots
├── Logo/ # Logo source files
├── LifeWrapped.xcodeproj
├── LifeWrapped.xcworkspace # Open this
└── project.yml # XcodeGen spec (version 1.3, but it doesn't list the LocalLLM package; build from the .xcodeproj)
Resolved versions from LifeWrapped.xcworkspace/xcshareddata/swiftpm/Package.resolved:
| Package | Version |
|---|---|
| mlx-swift | 0.29.1 |
| mlx-swift-lm | d9f46e3 (pinned) |
| swift-transformers | 573e5c9 |
| swift-jinja | 2.2.0 |
| swift-collections | 1.3.0 |
| swift-numerics | 1.1.1 |
All are used only by the LocalLLM package for the Offline AI engine.
| Script | What it does |
|---|---|
Scripts/build.sh packages | Runs swift build in each local package |
Scripts/build.sh ios | Builds the LifeWrapped scheme with xcodebuild |
Scripts/build.sh clean | Removes build output and package .build folders |
Scripts/lint.sh [--fix] | SwiftLint and swift-format checks (uses .swiftlint.yml and .swift-format) |
Scripts/format.sh [path] | Formats Swift files with swift-format |
Scripts/verify-privacy.sh | Lists network and cloud API usage in the source so it can be reviewed |
Some script options (watch, widgets, and the integration, ui and performance test targets) refer to schemes that do not exist in this project.
main is production. Pushing to main starts the Xcode Cloud workflow, which builds, archives and uploads to TestFlight and App Store Connect.dev is the integration branch. Feature branches start from dev.More detail is in App/appDocs/XCODE_CLOUD_BUILD.md and App/appDocs/WORKFLOW.md.
| Document | Contents |
|---|---|
docs/ | Public website, privacy policy, support and terms (served at jsayram.github.io/life-wrapped) |
App/appDocs/ | Internal notes on the AI architecture, local AI, App Store submission, privacy labels, in-app purchases, StoreKit testing, widgets and Xcode Cloud |
Questions, bugs and feature requests: open an issue.
The source code in this repository is released under the MIT License. Copyright (c) 2025-2026 Jose Ramirez-Villa.
The MIT License covers the code. Use of the Life Wrapped app from the App Store is governed by the terms of service. The Life Wrapped name and app icon are not licensed for use as your own branding.