A native macOS and iOS application for engineering managers who run 1:1s, team meetings, and performance reviews. OneOnOne combines meeting management, action item tracking, goal and OKR planning, career development, and AI-powered summaries into a single privacy-first tool. All AI inference runs locally on your Mac via Ollama, OpenWebUI, MLX, or TinyChat -- your data never leaves your machine.
Written by Jordan Koch.
+------------------------------------------------------------------+
| OneOnOne.app |
| |
| +------------------+ +-------------------+ +-------------+ |
| | SwiftUI Views | | Services | | Models | |
| | | | | | | |
| | DashboardView | | DataStore | | Person | |
| | MeetingsView | | AIService | | Meeting | |
| | PeopleView | | CloudKitService | | ActionItem | |
| | GoalsView | | CalendarService | | Goal | |
| | OKRView | | SyncService | | Objective | |
| | ActionItemsView | | RecordingService | | KeyResult | |
| | CareerView | | IntegrationServ. | | Feedback | |
| | FeedbackView | | TeamInsightsSvc | | Skill | |
| | TeamInsightsView| | SearchService | | Sentiment | |
| | AIInsightsView | | WidgetSyncSvc | | Recording | |
| | SettingsView | | OLMImportService | | Template | |
| | | | | | | |
| | +-- Markdown Components --+ | | | |
| | | MarkdownNotesView | | | | |
| | | CodeBlockView | | | | |
| | | FormattingToolbar | | | | |
| | | RichNotesEditor | | | | |
| | | InlineMarkdownText | | | | |
| | +------------------------+ | | | |
| +--------+---------+ +--------+----------+ +------+------+ |
| | | | |
| +------------------------+----------------------+ |
| | |
| +---------------------+ +------+-------+ +--------------+ |
| | Nova API Server | | CloudKit | | WidgetKit | |
| | 127.0.0.1:37421 | | iCloud Sync | | Extension | |
| | (macOS only) | | (all devices)| | (macOS/iOS) | |
| +---------------------+ +--------------+ +--------------+ |
+------------------------------------------------------------------+
| | |
v v v
+-------------+ +----------------+ +-------------+
| OpenClaw / | | iCloud Private | | Home Screen |
| Nova AI | | Database | | Widgets |
+-------------+ +----------------+ +-------------+
|
v
+----------------------------------------------+
| Local AI Backends (macOS) |
| |
| Ollama (:11434) OpenWebUI (:3000) |
| MLX Toolkit (:8800) TinyChat (:8000) |
+----------------------------------------------+
- Track 1:1s, team meetings, stand-ups, retrospectives, planning sessions, reviews, brainstorms, interviews, and training
- Record agendas, free-form notes, and structured outcomes per meeting
- Log decisions with rationale and participant attribution
- Tag meetings and track mood (Productive, Challenging, Neutral, Positive, Tense)
- Recurring meeting support with calendar integration
- Outlook calendar import via OLM files and web import
- Maintain profiles with name, title, department, email, and custom tags
- Set meeting frequency preferences (Daily through Quarterly, or As Needed)
- View complete meeting history per person with last-met and next-scheduled dates
- Color-coded avatar initials
- Central cross-meeting action item dashboard
- Priority levels: Low, Medium, High, Urgent
- Due date tracking with overdue and due-soon alerts
- Assignee management linked to person profiles
- Filter by priority, assignee, or completion status
- Categories: Development, Performance, Learning, Project, Personal, Team, Career
- Milestone tracking with automatic progress calculation
- Link goals to related meetings for context
- Status: Not Started, In Progress, On Hold, Completed, Cancelled
- Create objectives with measurable key results
- Metric types: Increase, Decrease, Maintain, Binary (Yes/No)
- Hierarchical/cascading OKRs at Company, Department, Team, and Individual levels
- Quarterly planning with status tracking (On Track, At Risk, Behind, Achieved, Cancelled)
- Key result update history with notes
- Skill tracking: Technical, Leadership, Communication, Problem Solving, Collaboration, Domain Knowledge, Project Management
- Proficiency levels: Beginner, Intermediate, Advanced, Expert
- Target skill level setting with gap analysis
- Assessment history
- Types: Praise, Recognition, Constructive, Achievement, Thanks, Milestone
- Direction tracking (Given / Received)
- Link feedback to meetings for context
- Monthly aggregation and trend analysis
- Relationship health scoring with trend analysis (Improving, Stable, Declining)
- Sentiment tracking on a 1--5 scale
- Risk factor identification
- Cross-person pattern recognition
- Full-text search across meetings, people, goals, and action items
- Search history
- iCloud sync via CloudKit with incremental change tokens
- JSON export and import with merge (does not overwrite existing records)
- Automatic local backups
- All data persisted as JSON in Application Support/OneOnOne/
- Meeting summary generation from notes
- Automatic action item extraction
- Conversation starter suggestions based on meeting history
- Weekly recaps across all meetings and open action items
- Follow-up topic suggestions
- Goal progress analysis with recommendations
- Email summarization for Nova integration
- Multi-backend support with automatic failover
- Sync with system Calendar.app
- Create calendar events for meetings
- Recurring meeting support
- Outlook calendar integration
- Audio recording with consent tracking
- Whisper-based transcription via bundled Python script
- Speaker diarization support
- Recordings linked to meetings
- Slack webhook integration for sharing meeting summaries
- Microsoft Teams webhook integration
- Small, Medium, and Large widget sizes
- Upcoming meetings at a glance
- Overdue action item count
- People due for a meeting
- Automatic refresh when app data changes
- App Group data sharing between app and widget
OneOnOne supports Slack-style markdown formatting across all text areas. Notes are stored as plain strings (no migration required) and rendered with rich formatting in view mode.
Code blocks with optional language labels:
```sql
SELECT name, last_meeting
FROM people
WHERE meeting_overdue = true;
```
Formatting toolbar provides one-tap insertion of all syntax elements:
+------+--------+-------+---+----------+--------+
| B | I | </> | | | { } | * |
| Bold | Italic | Code | | Block | Bullet |
+------+--------+-------+---+----------+--------+
Supported syntax:
| Syntax | Renders As |
|---|---|
**text** |
Bold |
*text* |
Italic |
`code` |
Inline code (cyan monospace with background) |
``` |
Fenced code block with copy button |
```swift |
Code block with language label |
- item or * item |
Bullet list with accent-colored bullets |
Code block features:
- Language label badge (top-left corner)
- Copy-to-clipboard button with animated checkmark feedback
- Horizontal scroll for long lines
- Monospace font on dark glass background
- Text selection enabled
Applied across all text areas:
| View | Edit Mode | View Mode |
|---|---|---|
| Meeting Notes | Toolbar + Editor | Markdown Renderer |
| Person Notes | Toolbar + Editor | Markdown Renderer |
| Feedback | Toolbar + Editor | Markdown Renderer |
| Meeting Agenda | Toolbar + Editor | -- |
| Goal Description | Toolbar + Editor | -- |
| Career Goals | Toolbar + Editor | -- |
Rendering pipeline:
Plain String (stored in JSON)
|
v
+--------------------+
| MarkdownParser |
| (block-level) |
+----+-------+-------+
| | |
text | code | list |
v v v
+----------+ +----------+ +-----------+
| Inline | | CodeBlock| | Bullet |
| Markdown | | View | | List |
| Text | | | | View |
+----------+ +----------+ +-----------+
| | |
| +--------+--------+ |
| | Language label | |
| | Copy button | |
| | Monospace text | |
| +----------------+ |
v v
AttributedString Accent-colored
(markdown: ...) bullet points
|
+-- **bold** --> .bold weight
+-- *italic* --> .italic trait
+-- `code` --> cyan monospace + background
- Glassmorphic dark-mode UI with navy gradient backgrounds
- Animated floating blobs
- Frosted glass panels
- Vibrant accent palette: cyan, purple, pink, orange, green
- Consistent with the MLXCode design system
| Feature | macOS | iOS |
|---|---|---|
| Meeting Management | Yes | Yes |
| People Management | Yes | Yes |
| Action Items | Yes | Yes |
| Goals and OKRs | Yes | Yes |
| Career Development | Yes | Yes |
| Feedback System | Yes | Yes |
| Markdown & Code Snippets | Yes | Yes |
| Team Insights | Yes | Yes |
| iCloud Sync | Yes | Yes |
| Calendar Integration | Yes | Yes |
| WidgetKit Widgets | Yes | Yes |
| AI Insights | Yes | -- |
| Voice Recording | Yes | -- |
| Transcription | Yes | -- |
| Slack/Teams Integration | Yes | -- |
| Nova API Server | Yes | -- |
OneOnOne exposes a local HTTP API on 127.0.0.1:37421 for integration with Nova (OpenClaw AI assistant) and other local tools. The server starts automatically when the macOS app launches and binds to the loopback interface only -- there is no external network exposure.
Returns app status, name, version, and port.
curl -s http://127.0.0.1:37421/api/status{
"status": "running",
"app": "OneOnOne",
"version": "1.0",
"port": "37421"
}Returns the N most recent meetings sorted by date descending. Default limit is 20.
curl -s http://127.0.0.1:37421/api/meetings?limit=5Returns a single meeting by UUID, including notes, action items, decisions, and follow-ups.
curl -s http://127.0.0.1:37421/api/meetings/550e8400-e29b-41d4-a716-446655440000Returns 400 for invalid UUIDs, 404 if not found.
Returns all people profiles.
curl -s http://127.0.0.1:37421/api/peopleSubmits text content (such as an email) and returns an AI-generated summary. Requires a JSON body with a content field. An optional context field provides additional context for the summary.
curl -s -X POST http://127.0.0.1:37421/api/summarize \
-H "Content-Type: application/json" \
-d '{"content": "Full email body here", "context": "Q1 planning thread"}'{
"summary": "AI-generated summary text..."
}Returns 400 if content is missing or empty, 500 if the AI backend is unavailable.
Generates an AI summary for a specific meeting's notes and saves it to the meeting record.
curl -s -X POST http://127.0.0.1:37421/api/meetings/550e8400-e29b-41d4-a716-446655440000/summary{
"summary": "Generated summary text...",
"meetingId": "550e8400-e29b-41d4-a716-446655440000"
}Returns 404 if meeting not found, 422 if meeting has no notes, 500 if AI generation fails.
All errors return JSON with an error field:
{
"error": "Description of what went wrong"
}The API runs on loopback only (127.0.0.1) and requires no authentication for local macOS requests. iOS requests require an X-Nova-Token header.
OneOnOne supports four local AI backends. The app probes each on startup and automatically selects the first available provider. You can switch providers in Settings.
| Backend | Default Endpoint | Protocol |
|---|---|---|
| Ollama | http://localhost:11434 | Ollama native API |
| OpenWebUI | http://localhost:3000 | OpenAI-compatible |
| MLX Toolkit | http://localhost:8800 | OpenAI-compatible |
| TinyChat | http://localhost:8000 | OpenAI-compatible |
All endpoints, models, and the selected provider are configurable in the app's Settings view and persisted in UserDefaults.
Bundled Python scripts (macOS only, in the Python/ directory):
ai_daemon.py-- MLX-based local inference daemonwhisper_transcribe.py-- Whisper-based audio transcription
Download the DMG from the latest release and drag OneOnOne.app to your Applications folder.
OneOnOne is distributed directly via DMG. It is not available on the Mac App Store. The app runs without sandbox restrictions so it can access local AI backends, voice recording hardware, and the full file system.
Install via TestFlight or build from source.
- Install a local AI backend. Ollama is the simplest:
brew install ollama
ollama pull llama3.2
ollama serve- Launch OneOnOne. It will detect Ollama automatically.
Alternatively, if you already run OpenWebUI, MLX Toolkit (mlx_lm.server), or TinyChat, OneOnOne will detect and use those.
For the bundled MLX daemon and Whisper transcription:
pip3 install mlx mlx-lm
pip3 install huggingface-hub openai-whisper
huggingface-cli download mlx-community/Llama-3.2-3B-Instruct-4bit \
--local-dir ~/.mlx/models/Llama-3.2-3B-Instruct-4bit- Sign in to iCloud on all devices.
- Enable iCloud for OneOnOne in System Settings (macOS) or Settings (iOS).
- Data syncs automatically in the background using CloudKit with incremental change tokens.
Synced data: People, Meetings, Action Items, Goals, OKRs, Feedback, Career Profiles, Sentiment History, Recordings metadata.
- macOS 14.0+ with Xcode 15+
- Apple Silicon (M1/M2/M3/M4) for AI features
- XcodeGen for project generation
brew install xcodegen
cd /path/to/OneOnOne
xcodegen generate
# macOS
xcodebuild -scheme OneOnOne -configuration Release
# iOS
xcodebuild -scheme OneOnOne-iOS -configuration Release \
-destination 'generic/platform=iOS'| Target | Platform | Bundle ID |
|---|---|---|
| OneOnOne | macOS 14.0+ | com.jordankoch.OneOnOne |
| OneOnOne-iOS | iOS 17.0+ | com.jordankoch.OneOnOne |
| OneOnOneWidget-macOS | macOS 14.0+ | com.jordankoch.OneOnOne.Widget |
| OneOnOneWidget-iOS | iOS 17.0+ | com.jordankoch.OneOnOne.Widget |
All data is stored as JSON files in ~/Library/Application Support/OneOnOne/:
| File | Contents |
|---|---|
| people.json | Person profiles |
| meetings.json | Meetings with embedded action items, decisions, follow-ups |
| goals.json | Goals with milestones |
| objectives.json | OKRs with key results and update history |
| feedback.json | Feedback entries |
| career_profiles.json | Skill inventories keyed by person UUID |
| sentiment.json | Sentiment history keyed by person UUID |
| templates.json | Meeting templates (built-in and custom) |
| recordings.json | Recording metadata |
| integrations.json | Slack and Teams webhook configuration |
Voice recordings are stored in ~/Library/Application Support/OneOnOne/Recordings/.
- iCloud: CloudKit private database with a custom record zone. Incremental sync via server change tokens. Debounced push on local saves. Remote notification subscription (
OneOnOne-Changes) triggers pull on other devices. - Widget: App Group shared container with
WidgetSyncServicepushing data to the widget extension. Widget refreshes automatically on data changes.
- SwiftUI (UI layer, all platforms)
- Foundation
AttributedString(markdown:)(inline markdown rendering) - CloudKit (iCloud sync)
- Network.framework (Nova API server via NWListener)
- AVFoundation (voice recording, macOS)
- EventKit (calendar integration)
- WidgetKit (home screen widgets)
| Shortcut | Action |
|---|---|
| Cmd+N | New Meeting |
| Cmd+Shift+N | New Person |
| Cmd+Shift+G | New Goal |
| Cmd+Shift+E | Export Data |
| Cmd+Shift+I | Import Data |
| Cmd+Option+S | Sync with iCloud |
- All meeting data is stored locally on your device.
- iCloud sync uses end-to-end encrypted CloudKit private database.
- AI features run entirely on your machine -- no data is sent to external servers.
- Calendar access is used only to create and sync meeting events.
- Voice recordings are stored locally and never uploaded.
- The Nova API server binds to 127.0.0.1 only.
- Slack-style markdown rendering in all text areas (meeting notes, person notes, feedback, agendas, goals, career goals)
- Fenced code blocks with language labels and copy-to-clipboard button
- Inline code, bold, italic, and bullet list rendering
- Formatting toolbar with one-tap syntax insertion (Bold, Italic, Code, Code Block, Bullet List)
- New reusable components: MarkdownNotesView, CodeBlockView, FormattingToolbar, RichNotesEditor, InlineMarkdownText
- Person notes now have edit/view toggle (was always-edit before)
- Fix: CloudKitService deferred initialization to prevent crash on macOS 26
- Nova API server on port 37421 for OpenClaw integration
- POST /api/summarize endpoint for email summarization
- POST /api/meetings/{uuid}/summary for AI meeting summary generation
- Multi-backend AI support (Ollama, OpenWebUI, MLX Toolkit, TinyChat)
- Automatic backend detection and failover
- Outlook calendar integration (OLM import, web import)
- WidgetKit extension (Small, Medium, Large sizes)
- App Group data sharing for widget
- Automatic widget refresh
- iOS support
- iCloud sync via CloudKit
- Cross-platform synchronization
- AI-powered insights (meeting summaries, action item extraction, weekly recaps)
- Calendar integration
- Voice recording and Whisper transcription
- Initial macOS release
- Meeting, people, goal, and action item management
- Feedback and career development tracking
- OKR system
- Team insights and sentiment tracking
MIT License
Copyright (c) 2026 Jordan Koch
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
Written by Jordan Koch (kochj23).
| App | Description |
|---|---|
| MLXCode | Local AI coding assistant for Apple Silicon |
| NMAPScanner | Network scanning and host discovery tool |
| RsyncGUI | macOS GUI for rsync backup and sync |
| JiraSummary | AI-powered Jira dashboard with sprint analytics |
| MailSummary | AI-powered email categorization and summarization |
| ExcelExplorer | Native macOS Excel/CSV file viewer |
| TopGUI | macOS system monitor with real-time metrics |
Disclaimer: This is a personal project created on my own time. It is not affiliated with, endorsed by, or representative of my employer.