Skip to content

Commit d968d37

Browse files
committed
Polish open source project docs and releases
1 parent 486ca42 commit d968d37

8 files changed

Lines changed: 388 additions & 26 deletions

File tree

.github/ISSUE_TEMPLATE/bug_report.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ body:
1212
attributes:
1313
label: App or bridge version
1414
description: Include the TestFlight build number or `runline-bridge --version`.
15-
placeholder: "Runline 1.0 (11), runline-bridge 0.1.0"
15+
placeholder: "Runline 1.0 (11), runline-bridge 0.1.2"
1616
validations:
1717
required: true
1818
- type: dropdown

CHANGELOG.md

Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
1+
# Changelog
2+
3+
All notable public changes to Runline are tracked here.
4+
5+
Runline is in public beta. Versions may move quickly while the iOS app, TestFlight flow, and optional Cursor SDK bridge settle.
6+
7+
## Unreleased
8+
9+
- Keep Cloud Agent mode as the default iOS experience.
10+
- Continue refining Cursor SDK mode and Runline Bridge pairing for power users.
11+
- Improve iPhone and iPad polish while staying native to SwiftUI and iOS system patterns.
12+
13+
## Runline Public Beta
14+
15+
- Renamed the project and repository to Runline.
16+
- Prepared GitHub source release `v1.0.0-beta.1`.
17+
- Moved the public repository to `https://github.com/parrisdigital/runline`.
18+
- Preserved the App Store bundle identifier `com.matthewparris.runline`.
19+
- Added open source project files: MIT license, security policy, contributing guide, support guide, code of conduct, issue templates, PR template, Dependabot, CI, and gitleaks configuration.
20+
- Added native iPhone and iPad support for Cloud Agent chats, repositories, Settings, attachments, model selection, light/dark mode, and optional Cursor SDK mode.
21+
- Cleaned chat event rendering so streaming text and thinking deltas are grouped into readable timeline entries.
22+
23+
## runline-bridge 0.1.2
24+
25+
- Published `runline-bridge@0.1.2` to npm.
26+
- Set both `latest` and `beta` npm dist-tags to `0.1.2`.
27+
- Updated npm metadata to point to `parrisdigital/runline`.
28+
- Preserved Cursor SDK session endpoints, pairing endpoints, MCP profile metadata, and Cloud compatibility aliases.
29+
- Added dependency overrides and shrinkwrap updates so the local bridge audit passes with no high-severity findings.
30+
31+
## runline-bridge 0.1.1
32+
33+
- Prepared the bridge package for public beta usage.
34+
- Added repository, homepage, bugs, license, keywords, and packaged README metadata.
35+
- Tightened npm package contents to the CLI, compiled output, README, and shrinkwrap.
36+
37+
## runline-bridge 0.1.0
38+
39+
- Initial bridge package for optional Cursor SDK sessions.
40+
- Added local server, health check, pairing, SDK session creation, follow-up messages, session state, and event endpoints.
41+
42+
## TestFlight Build 1.0 (6)
43+
44+
- Historical TestFlight prerelease retained on GitHub as `testflight-1.0-6`.
45+
- Included iPad adaptive layout work and native iPhone/iPad validation.
46+
47+
## Notes
48+
49+
Runline is independent and is not affiliated with, endorsed by, or connected to Cursor or Anysphere.

CONTRIBUTING.md

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@ Run bridge checks:
2424
```bash
2525
npm --prefix orchestrator run typecheck
2626
npm --prefix orchestrator run build
27+
npm --prefix orchestrator audit --audit-level=high
2728
```
2829

2930
Run iOS tests:
@@ -42,7 +43,8 @@ xcodebuild test \
4243
- Keep Cursor SDK mode optional and clearly labeled as requiring Runline Bridge.
4344
- Add or update tests for behavior changes.
4445
- Do not commit generated archives, IPAs, derived data, local ASC artifacts, npm tokens, Apple signing material, API keys, or private repository data.
45-
- Run `git diff --check`, bridge typecheck/build, and relevant iOS tests before opening a PR.
46+
- Run `git diff --check`, bridge typecheck/build/audit, and relevant iOS tests before opening a PR.
47+
- For release process changes, update [docs/RELEASES.md](docs/RELEASES.md) and [CHANGELOG.md](CHANGELOG.md).
4648

4749
## Security
4850

README.md

Lines changed: 127 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -1,41 +1,109 @@
11
# Runline for Cursor
22

3-
Runline is a native iOS 26+ client for managing Cursor Cloud Agents from iPhone and iPad.
3+
<p align="center">
4+
<img src="DesignAssets/runline-logo-transparent-1024.png" alt="Runline logo" width="96" height="96">
5+
</p>
46

5-
The app uses a proven Cloud Agents foundation with a chat-first, system-native iOS interface: stock navigation, lists, forms, sheets, toolbars, and settings surfaces.
7+
Runline is a native iOS 26+ client for working with Cursor Cloud Agents from iPhone and iPad. It keeps the default path simple: connect a Cursor API key, choose a repository, start a Cloud Agent run, and continue the conversation from a system-native chat interface.
8+
9+
Runline also includes an optional Mac-side bridge for Cursor SDK sessions. The bridge is only needed when a user wants SDK-specific workflows such as MCP profiles, SDK session state, or local Mac-assisted pairing.
610

711
Runline is independent and is not affiliated with, endorsed by, or connected to Cursor or Anysphere.
812

9-
## Status
13+
[![License: MIT](https://img.shields.io/badge/License-MIT-blue.svg)](LICENSE)
14+
[![npm runline-bridge](https://img.shields.io/npm/v/runline-bridge.svg)](https://www.npmjs.com/package/runline-bridge)
15+
16+
## Project Status
17+
18+
Runline is in public beta.
19+
20+
- iOS app: native SwiftUI app for iOS 26+ and iPadOS 26+.
21+
- Cloud Agent mode: default, fully on-device direct integration with Cursor's Cloud Agents API.
22+
- Cursor SDK mode: optional, powered by `runline-bridge` on the user's Mac or a trusted HTTPS bridge.
23+
- TestFlight/App Store Connect releases: maintainer-managed.
24+
- npm package: `runline-bridge@0.1.2` is published on both `latest` and `beta`.
25+
26+
## What Runline Does
27+
28+
- Stores the user's Cursor API key in iOS Keychain.
29+
- Lists Cursor repositories and models.
30+
- Starts Cursor Cloud Agent runs from native iOS forms.
31+
- Streams and restores run timelines with cleaner event grouping.
32+
- Lets users continue terminal runs with a native chat composer.
33+
- Supports images and files as prompt context where the Cursor API path accepts them.
34+
- Shows artifacts, PR links, run status, archive/delete/cancel actions, and notification preferences.
35+
- Adapts the same SwiftUI experience to iPhone and iPad, including portrait and landscape.
36+
- Supports system appearance, light mode, dark mode, and user-selected appearance preferences.
37+
- Provides an optional Cursor SDK bridge path for users who want SDK sessions from their Mac.
38+
39+
## Runtime Modes
40+
41+
| Mode | Where it runs | Best for | Requirements |
42+
| --- | --- | --- | --- |
43+
| Cloud Agent | Directly from iOS to Cursor Cloud Agents | Most users, TestFlight users, repository tasks, follow-ups, artifacts, PR workflows | Cursor API key |
44+
| Cursor SDK | iOS app plus Runline Bridge | SDK sessions, MCP profiles, richer local tooling, Mac-assisted workflows | Cursor API key, Node.js 20+, `runline-bridge` |
45+
46+
Cloud Agent mode does not require Node, a Mac bridge, a hosted backend, or any Runline server.
1047

11-
Runline is in public beta. Cloud Agent mode is the default path and works directly from iOS. Cursor SDK mode is optional and requires Runline Bridge on the user's Mac.
48+
Cursor SDK mode is intentionally opt-in. It should be treated as a power-user path until the bridge and pairing flow are hardened further.
1249

13-
## Features
50+
## Install the iOS Beta
1451

15-
- iOS 26+ SwiftUI app target
16-
- Chat-first Cloud Agents navigation for iPhone and iPad
17-
- Cursor Cloud Agents v1 provider for account, repositories, models, agents, runs, streams, artifacts, archive, unarchive, and delete
18-
- Optional `@cursor/sdk` bridge client for Cursor SDK sessions, MCP profiles, subagents, and multi-turn follow-ups
19-
- Runline Bridge pairing with one-time terminal codes and Keychain-backed bridge tokens
20-
- First-run and Settings runtime selection between Cloud Agent and Cursor SDK defaults
21-
- Native Cursor SDK composer controls for intent, model, MCP profile, image context, and file context
22-
- Keychain-backed Cursor API key storage
23-
- Local cache for account, repositories, models, agents, runs, stream events, artifacts, notification preferences, and launch draft
24-
- Unit tests for Cursor v1 request contracts, SSE parsing, cache persistence, app routing, push payloads, chat event cleanup, file attachment loading, and SDK bridge request mapping
52+
The iOS beta is distributed through TestFlight by the maintainer. Once installed:
2553

26-
## Cursor SDK Mode
54+
1. Open Runline.
55+
2. Connect a Cursor API key.
56+
3. Keep Cloud Agent as the default mode unless you specifically want the SDK bridge.
57+
4. Select a repository and launch a chat.
58+
5. Continue completed runs from the chat composer.
2759

28-
Cloud Agent mode works directly from iOS. Cursor SDK mode is optional and requires Runline Bridge on the user's Mac:
60+
Cursor API keys stay on device in Keychain for direct Cloud Agent requests.
61+
62+
## Optional Cursor SDK Mode
63+
64+
Install the bridge only if you want Cursor SDK mode:
2965

3066
```bash
31-
npm install -g runline-bridge@beta
67+
npm install -g runline-bridge
3268
export CURSOR_API_KEY="replace-with-your-cursor-key"
3369
runline-bridge up
3470
```
3571

36-
Runline Bridge prints the iPhone-reachable URL and pairing instructions. The iOS app stores the bridge token in Keychain after pairing.
72+
For Simulator development, `http://localhost:8787` is usually enough.
73+
74+
For a physical iPhone on the same Wi-Fi network:
75+
76+
```bash
77+
ipconfig getifaddr en0
78+
```
79+
80+
Then enter `http://<mac-lan-ip>:8787` in Runline Settings and pair with the one-time code printed by the bridge.
81+
82+
The bridge does not need to store Cursor API keys. It can accept a per-request bearer token from the iOS app, or use `CURSOR_API_KEY` from the user's local shell environment.
83+
84+
## Repository Layout
85+
86+
```text
87+
Runline/ SwiftUI app source
88+
RunlineTests/ Unit tests for app state, providers, cache, routing, and bridge mapping
89+
orchestrator/ runline-bridge npm package
90+
DesignAssets/ Public logo and app icon source previews
91+
Tools/ Maintainer utilities such as build-number updates
92+
.asc/ Maintainer App Store Connect workflow config
93+
.github/ CI, issue templates, PR template, Dependabot
94+
docs/ Release and maintainer documentation
95+
```
96+
97+
## Development Setup
3798

38-
## Development
99+
Requirements:
100+
101+
- macOS
102+
- Xcode 26 or newer with the iOS 26 simulator runtime
103+
- Swift 6
104+
- Node.js 20 or newer
105+
- npm
106+
- XcodeGen, if regenerating the Xcode project from `project.yml`
39107

40108
Install bridge dependencies:
41109

@@ -48,6 +116,7 @@ Run bridge checks:
48116
```bash
49117
npm --prefix orchestrator run typecheck
50118
npm --prefix orchestrator run build
119+
npm --prefix orchestrator audit --audit-level=high
51120
```
52121

53122
Run iOS tests:
@@ -59,7 +128,32 @@ xcodebuild test \
59128
-destination 'platform=iOS Simulator,name=iPhone 17,OS=26.4.1'
60129
```
61130

62-
## Release Workflow
131+
Run metadata checks:
132+
133+
```bash
134+
xcodebuild -list -project Runline.xcodeproj
135+
ruby -c Tools/set_build_number.rb
136+
plutil -lint ExportOptions-AppStore.plist ExportOptions-TestFlightUpload.plist Runline/Resources/Info.plist Runline/Resources/PrivacyInfo.xcprivacy Runline/Resources/Runline.entitlements
137+
```
138+
139+
Run secret scanning before public release work:
140+
141+
```bash
142+
gitleaks detect --source . --redact --verbose
143+
gitleaks detect --source . --no-git --redact --verbose
144+
```
145+
146+
## Release Channels
147+
148+
| Channel | Current state | Notes |
149+
| --- | --- | --- |
150+
| GitHub | Public repository at `parrisdigital/runline` | Source, docs, issues, releases |
151+
| npm | `runline-bridge@0.1.2` on `latest` and `beta` | Optional bridge for Cursor SDK mode |
152+
| TestFlight | Maintainer-managed Runline 1.0 builds | Requires App Store Connect access |
153+
154+
See [docs/RELEASES.md](docs/RELEASES.md) for the maintainer release checklist, [CHANGELOG.md](CHANGELOG.md) for public release notes, and [docs/ROADMAP.md](docs/ROADMAP.md) for the beta roadmap.
155+
156+
## Maintainer TestFlight Workflow
63157

64158
TestFlight and App Store releases are maintainer-only and are not required for contributors.
65159

@@ -79,9 +173,20 @@ asc workflow run testflight BUILD_NUMBER:<next-build-number>
79173

80174
Use explicit build numbers so TestFlight stays aligned with the active Runline sequence.
81175

176+
## Security Model
177+
178+
- Cursor API keys are stored on iOS in Keychain.
179+
- Bridge pairing tokens are stored on iOS in Keychain.
180+
- Cloud Agent mode works without any Runline backend.
181+
- Cursor SDK mode uses a user-controlled bridge.
182+
- The bridge must not log or persist user Cursor API keys.
183+
- Apple signing material, npm tokens, API keys, `.env` files, archives, IPAs, and provisioning profiles must never be committed.
184+
185+
Report vulnerabilities privately through [SECURITY.md](SECURITY.md).
186+
82187
## Contributing
83188

84-
See [CONTRIBUTING.md](CONTRIBUTING.md), [SECURITY.md](SECURITY.md), and [CODE_OF_CONDUCT.md](CODE_OF_CONDUCT.md).
189+
See [CONTRIBUTING.md](CONTRIBUTING.md), [SECURITY.md](SECURITY.md), [SUPPORT.md](SUPPORT.md), and [CODE_OF_CONDUCT.md](CODE_OF_CONDUCT.md).
85190

86191
## License
87192

SUPPORT.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,8 @@ Open a GitHub issue for:
1313

1414
Include the app build number, iOS version, device type, bridge version, and clear reproduction steps when relevant.
1515

16+
For Cursor SDK mode, also include whether the bridge is local LAN, Simulator localhost, or hosted HTTPS. Do not include pairing tokens, API keys, terminal environment dumps, or private repository contents.
17+
1618
## Security Issues
1719

1820
Do not open public issues for security reports. Use [SECURITY.md](SECURITY.md).

0 commit comments

Comments
 (0)