# Add to your Claude Code skills
git clone https://github.com/ProtonLumo/ios-lumoLast scanned: 8/16/2026
{
"issues": [
{
"file": "README.md",
"line": 181,
"type": "remote-install",
"message": "Install command (remote install script piped to a shell — review the source before running): \"curl https://mise.run | sh\"",
"severity": "low"
}
],
"status": "PASSED",
"scannedAt": "2026-08-16T04:34:26.563Z",
"npmAuditRan": true,
"pipAuditRan": true,
"promptInjectionRan": true
}ios-lumo is an open-source ai agents skill for AI coding assistants such as Claude Code, Codex CLI, and ChatGPT, built by ProtonLumo. iOS application for Lumo. It has 100 GitHub stars.
Yes. ios-lumo passed SkillsLLM's automated security scan — a dependency vulnerability audit plus prompt-injection heuristics — with no high-severity issues. You can read the full report in the Security Report section on this page.
Clone the repository with "git clone https://github.com/ProtonLumo/ios-lumo" and add it to your Claude Code skills directory (see the Installation section above).
ios-lumo is primarily written in Swift. It is open-source under ProtonLumo on GitHub, so you can review or fork the full source.
Yes. SkillsLLM lists many other AI Agents skills you can browse and compare side by side. Open the AI Agents category from the badge at the top of this page, or use the Related Skills and comparison links further down to weigh ios-lumo against similar tools.
No comments yet. Be the first to share your thoughts!
Lumo is the privacy-first AI assistant created by Proton, the team behind encrypted email, VPN, password manager, and cloud storage trusted by over 100 million people.
Lumo helps you stay productive, curious, and informed — without ever compromising your privacy.
Here is our SwiftUI-based iOS application that provides a web-based interface for Lumo services with native payment integration and speech recognition capabilities.
graph TB
%% App Entry Point
App["lumoApp.swift
@main App Entry"] --> ContentView
%% Main Content View
ContentView["ContentView.swift
Main SwiftUI View"] --> WebView
ContentView --> PaymentSheet
ContentView --> CurrentPlansView
ContentView --> SpeechRecorderView
%% WebView Layer
WebView["LumoWebView.swift
WKWebView Wrapper"] --> JSBridge
WebView --> Config["Config.swift
URL Configuration"]
%% JavaScript Bridge
JSBridge["JSBridgeManager.swift
Native-JS Communication"] --> JSFiles
%% JavaScript Files
JSFiles["JavaScript Files
• initial-setup.js
• payment-api.js
• voice-entry-setup.js
• message-submission-listener.js
• manage-plan-handler.js
• upgrade-link-classifier.js
• promotion-button-handler.js
• insert-submit-clear.js
• utilities.js
• common-setup.js
• hide-your-plan.js
• page-utilities.js"]
%% Payment System
PaymentSheet["PaymentSheet.swift
Payment UI"] --> PaymentHandler
PaymentHandler["PaymentHandler.swift
Payment Orchestration"] --> PaymentBridge
PaymentBridge["PaymentBridge.swift
WebView-Payment Bridge"] --> AppleSubscriptionManager
AppleSubscriptionManager["AppleSubscriptionManager.swift
StoreKit Integration"] --> StoreKitObserver
StoreKitObserver["StoreKitObserver.swift
Transaction Monitoring"] --> PurchaseManager
PurchaseManager["PurchaseManager.swift
Purchase Logic"] --> StoreKitReceiptManager
StoreKitReceiptManager["StoreKitReceiptManager.swift
Receipt Validation"]
%% UI Components
CurrentPlansView["CurrentPlansView.swift
Subscription Display"] --> CurrentPlansViewModel
CurrentPlansViewModel["CurrentPlansViewModel.swift
Subscription Data"]
SpeechRecorderView["SpeechRecorderView.swift
Voice Input UI"] --> SpeechRecognizer
SpeechRecognizer["SpeechRecognizer.swift
Speech Recognition"]
%% Data Models
DataModels["DataModels/
• AvailablePlans.swift
• ComposedPlan.swift
• CreateSubscription.swift
• CurrentSubscriptionResponse.swift
• Decorations.swift
• Entitlements.swift
• NewToken.swift
• PaymentToken.swift"]
%% Helpers & Utilities
Helpers["Helpers/
• DictionaryConvertible.swift
• Extensions.swift
• PlansComposer.swift
• TestExtensions.swift"]
%% External Services
Config --> ExternalServices["External Services
• account.proton.me
• lumo.proton.me
• StoreKit APIs"]
%% Data Flow
WebView -.->|JavaScript Calls| JSBridge
JSBridge -.->|Native Methods| PaymentBridge
PaymentBridge -.->|Payment Requests| AppleSubscriptionManager
AppleSubscriptionManager -.->|Transaction Updates| StoreKitObserver
StoreKitObserver -.->|Status Updates| PaymentBridge
PaymentBridge -.->|Response Data| JSBridge
JSBridge -.->|JavaScript Callbacks| WebView
%% Speech Flow
SpeechRecorderView -.->|Voice Input| SpeechRecognizer
SpeechRecognizer -.->|Transcribed Text| WebView
%% Widget Integration
Widget[LumoWidgetExtension<br/>iOS Widget] -.->|URL Scheme| App
%% Styling
classDef appLayer fill:#e1f5fe
classDef webLayer fill:#f3e5f5
classDef paymentLayer fill:#e8f5e8
classDef uiLayer fill:#fff3e0
classDef dataLayer fill:#fce4ec
classDef externalLayer fill:#f1f8e9
class App,ContentView appLayer
class WebView,JSBridge,JSFiles,Config webLayer
class PaymentSheet,PaymentHandler,PaymentBridge,AppleSubscriptionManager,StoreKitObserver,PurchaseManager,StoreKitReceiptManager paymentLayer
class CurrentPlansView,CurrentPlansViewModel,SpeechRecorderView,SpeechRecognizer uiLayer
class DataModels,Helpers dataLayer
class ExternalServices,Widget externalLayer
The easiest way to install Tuist is using mise:
# Install mise
curl https://mise.run | sh
# Install Tuist
mise install tuist
tuist installtuist generate./scripts/setup-git-hooks.sh
swift-formatLumo.xcodeproj - For regular development (recommended for most cases)Lumo.xcworkspace - Only if you need to browse/edit dependency source codeNote: After modifying
Project.swiftorPackage.swift, runtuist generateto regenerate the workspace.Workspace vs Project: Both work for building and running the app. The workspace includes dependency projects for direct source code access, while the project file resolves dependencies automatically. Use the workspace only when you need to debug or modify dependency code.
lumo.proton.melumo.proton.dev (requires local web client setup)For developing against a local web client, use the LumoApp-Dev scheme.
proton/web/clients repository with local-sso configured and runningbrew install haproxybrew install mkcert1. Start the web server (automatically generates certificates)
When you run yarn start-all for the first time, it automatically generates SSL certificates if they don't exist:
cd <path-to-proton-web-clients>
yarn start-all --applications "proton-account proton-lumo" --api proton.black --no-error-logs
This will:
*.proton.dev (saved in utilities/local-sso/)/etc/hosts for local development domainsThe root CA is created at /Users/<username>/Library/Application Support/mkcert/rootCA.pem
Note: Certificates are generated only once. Subsequent runs of yarn start-all will reuse existing certificates.
2. Install root CA in iOS Simulator
xcrun simctl keychain booted add-root-cert "/Users/$(whoami)/Library/Application Support/mkcert/rootCA.pem"
Note:
mkcert -install or ./generate-certificate.sh), you must reset the simulator keychain and add the new certificate:
xcrun simctl keychain booted reset
xcrun simctl keychain booted add-root-cert "/Users/$(whoami)/Library/Application Support/mkcert/rootCA.pem"
3. Build and run
In Xcode:
https://lumo.proton.dev/etc/hosts resolves to 127.0.0.1 (configured in proton/web/clients)lumo.proton.black)*.proton.dev (signed by mkcert root CA)https://lumo.proton.dev for local developmentURL configuration is managed through xcconfig files, which populate Info.plist values at build time. The LumoApp-Dev scheme uses Info-Dev.plist + Debug-Dev.xcconfig, while LumoApp uses Info.plist + standard configurations.
The code and data files in this distribution are licensed under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 o