Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
58 commits
Select commit Hold shift + click to select a range
5c9bf52
[codex] Guard Cloudflare tunnel setup without ID (#9)
codepilotios Jul 2, 2026
b688bbd
[codex] Fix setup audit friction (#6)
codepilotios Jul 2, 2026
2910058
[codex] prepare public beta presence (#7)
codepilotios Jul 2, 2026
221ee94
[codex] Fix setup readiness triage issues (#10)
codepilotios Jul 3, 2026
1adb19c
[codex] Record issue triage status (#11)
codepilotios Jul 3, 2026
06eebc3
fix: require approved remote pairing for beta (#14)
codepilotios Jul 4, 2026
83c274e
docs: add app store metadata draft (#12)
codepilotios Jul 4, 2026
ad9abea
security: harden launch defaults and privacy audit (#13)
codepilotios Jul 4, 2026
cf174c9
chore: reconcile public launch PR history
codepilotios Jul 4, 2026
2953067
test: align remote desktop tests with current gateway setup
codepilotios Jul 4, 2026
4608b36
Expose Codex rate limit reset in iOS app
codepilotios Jul 4, 2026
eae3f07
Show reset credits per account
codepilotios Jul 4, 2026
e29980d
Fix bundled gateway launch path
codepilotios Jul 4, 2026
911cc57
Enable reset credits per account
codepilotios Jul 4, 2026
3d93620
Fix per-account reset and manual switch hold
codepilotios Jul 5, 2026
b56973a
Use limiting window for total credit
codepilotios Jul 6, 2026
52827f5
Record launch decision approvals
codepilotios Jul 6, 2026
a962065
Refresh agent worktrees before runs
codepilotios Jul 6, 2026
0caee3e
Add timeout guard to agent runner
codepilotios Jul 8, 2026
324a991
Draft beta community outreach packet
codepilotios Jul 13, 2026
fb38ed3
docs: refresh CodePilot community drafts
codepilotios Jul 14, 2026
380b78b
docs: update community promotion rules
codepilotios Jul 14, 2026
e004c8c
docs: refresh community beta drafts
codepilotios Jul 17, 2026
1c778a3
docs: correct current community promotion rules
codepilotios Jul 17, 2026
d8ef5d9
docs: refresh macOS community draft policy
codepilotios Jul 17, 2026
6041385
docs: require manual posting in codex community
codepilotios Jul 17, 2026
01c5f48
docs: expand community beta drafts
codepilotios Jul 17, 2026
2904489
docs: expand community rule research
codepilotios Jul 17, 2026
4653375
docs: correct iOSApps promotion route
codepilotios Jul 17, 2026
61de7e2
docs: add GenAI community beta draft
codepilotios Jul 17, 2026
436ba76
docs: add community promotion holds
codepilotios Jul 17, 2026
a9a25fa
docs: add GitHub community beta draft
codepilotios Jul 17, 2026
2354f03
docs: add SideProject beta draft
codepilotios Jul 17, 2026
ea88240
docs: hold SideProject standalone post
codepilotios Jul 17, 2026
045a02a
docs: add AI agents community beta draft
codepilotios Jul 17, 2026
708c291
docs: add BetaTests community draft
codepilotios Jul 17, 2026
e3d52a8
docs: correct iOSApps promotion eligibility
codepilotios Jul 17, 2026
4c1c5ca
docs: expand beta tester community drafts
codepilotios Jul 17, 2026
d0380b7
docs: stage community beta rollout
codepilotios Jul 17, 2026
07cc147
docs: refresh community beta placement
codepilotios Jul 17, 2026
cba6871
docs: refresh community promotion gates
codepilotios Jul 18, 2026
88d870f
docs: expand community beta research
codepilotios Jul 18, 2026
d8f01e0
docs: record additional community promotion gate
codepilotios Jul 18, 2026
0b1e65c
docs: correct ChatGPTCoding contribution gate
codepilotios Jul 18, 2026
b03a559
docs: clarify BetaTests posting guidance
codepilotios Jul 18, 2026
3269227
docs: record current Show HN contribution gate
codepilotios Jul 18, 2026
aedb9dd
docs: exclude iOSBeta from beta outreach
codepilotios Jul 18, 2026
c35aa2c
docs: add LLMDevs beta outreach draft
codepilotios Jul 18, 2026
be5677c
docs: add Apple community beta draft
codepilotios Jul 18, 2026
fdb000d
docs: add ChatGPTPro community draft
codepilotios Jul 18, 2026
95ebdea
docs: prepare beta community outreach drafts
codepilotios Jul 18, 2026
ea9bd2e
docs: refresh community promotion rules
codepilotios Jul 18, 2026
0a472b3
docs: align community approval queue
codepilotios Jul 18, 2026
c68cd81
docs: refresh community beta draft research
codepilotios Jul 18, 2026
00054da
docs: align App Saturday community draft
codepilotios Jul 18, 2026
93cfb14
docs: tighten community posting gates
codepilotios Jul 19, 2026
1ecb07c
docs: keep TestFlight draft link-only
codepilotios Jul 19, 2026
6cc0494
docs: add thread-gated community drafts
codepilotios Jul 19, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
37 changes: 33 additions & 4 deletions Sources/CodexAccountSwitcher/main.swift
Original file line number Diff line number Diff line change
Expand Up @@ -104,6 +104,7 @@ struct AccountUsage: Codable {
var weeklyLimitUsedPercent: Int?
var weeklyLimitWindowMins: Int?
var weeklyLimitResetsAt: Date?
var rateLimitResetCreditsRemaining: Int?
var lastRateLimitRefreshAt: Date?
var rateLimitError: String?
var authStaleAt: Date?
Expand All @@ -120,6 +121,7 @@ struct LimitWindowSummary {
struct RateLimitSummary {
let daily: LimitWindowSummary?
let weekly: LimitWindowSummary?
let resetCreditsRemaining: Int?
}

private struct AutomaticSwitchCandidate {
Expand Down Expand Up @@ -598,6 +600,7 @@ final class CodexAccountSwitcher {
usage.weeklyLimitUsedPercent = summary.weekly?.usedPercent
usage.weeklyLimitWindowMins = summary.weekly?.windowDurationMins
usage.weeklyLimitResetsAt = summary.weekly?.resetsAt
usage.rateLimitResetCreditsRemaining = summary.resetCreditsRemaining
case .failure(let error):
let message = Self.singleLine(error.localizedDescription, limit: 300)
usage.rateLimitError = message
Expand Down Expand Up @@ -1286,6 +1289,9 @@ final class CodexAccountSwitcher {

try next.name.write(to: settings.activeAccountMarker, atomically: true, encoding: .utf8)
recordSwitch(to: next.name, isAutomatic: isAutomatic)
if !isAutomatic {
clearPendingSwitch()
}
let relaunch = relaunchCodexAppIfRunning()
switch relaunch {
case .relaunched:
Expand Down Expand Up @@ -1746,7 +1752,10 @@ private final class CodexUsageAPIClient {
throw CodexUsageAPIClientError.missingRateLimit
}

return Self.summary(from: rateLimit)
return Self.summary(
from: rateLimit,
resetCreditsRemaining: response.rateLimitResetCredits?.availableCount
)
}

private func readAccessToken() throws -> String {
Expand Down Expand Up @@ -1794,7 +1803,7 @@ private final class CodexUsageAPIClient {
return try result.get()
}

private static func summary(from rateLimit: WhamRateLimit) -> RateLimitSummary {
private static func summary(from rateLimit: WhamRateLimit, resetCreditsRemaining: Int?) -> RateLimitSummary {
let primary = rateLimit.primaryWindow.map(windowSummary)
let secondary = rateLimit.secondaryWindow.map(windowSummary)

Expand All @@ -1819,7 +1828,11 @@ private final class CodexUsageAPIClient {
daily = nil
}

return RateLimitSummary(daily: daily, weekly: weekly)
return RateLimitSummary(
daily: daily,
weekly: weekly,
resetCreditsRemaining: resetCreditsRemaining
)
}

private static func windowSummary(_ window: WhamRateLimitWindow) -> LimitWindowSummary {
Expand Down Expand Up @@ -1849,9 +1862,19 @@ private struct CodexAuthTokens: Decodable {

private struct WhamUsageResponse: Decodable {
let rateLimit: WhamRateLimit?
let rateLimitResetCredits: WhamRateLimitResetCredits?

enum CodingKeys: String, CodingKey {
case rateLimit = "rate_limit"
case rateLimitResetCredits = "rate_limit_reset_credits"
}
}

private struct WhamRateLimitResetCredits: Decodable {
let availableCount: Int?

enum CodingKeys: String, CodingKey {
case availableCount = "available_count"
}
}

Expand Down Expand Up @@ -1970,7 +1993,8 @@ private final class CodexAppServerClient {

return RateLimitSummary(
daily: dailySource.map(windowSummary),
weekly: weeklySource.map(windowSummary)
weekly: weeklySource.map(windowSummary),
resetCreditsRemaining: response.rateLimitResetCredits?.availableCount
)
}

Expand Down Expand Up @@ -2247,6 +2271,11 @@ private struct JSONRPCErrorPayload: Decodable {
private struct CodexRateLimitsResponse: Decodable {
let rateLimits: CodexRateLimitSnapshot
let rateLimitsByLimitId: [String: CodexRateLimitSnapshot]?
let rateLimitResetCredits: CodexRateLimitResetCredits?
}

private struct CodexRateLimitResetCredits: Decodable {
let availableCount: Int?
}

private struct CodexRateLimitSnapshot: Decodable {
Expand Down
85 changes: 85 additions & 0 deletions docs/community/2026-07-18-community-research.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,85 @@
# Community Research and Approval Queue

Initial research checked on 2026-07-18; the current `r/AI_Agents` and
`r/SideProject` threads were re-checked on 2026-07-19. Community rules change;
re-check each destination immediately before requesting approval to post.

## Recommended initial queue

| Priority | Community | Fit | Current constraints | Approval state |
| --- | --- | --- | --- | --- |
| 1 | r/GenAiApps | Direct fit for a generative-AI iPhone workflow | Self-promotion must be contextual and useful, use the appropriate flair, and avoid duplicate or unsafe links. | Maintainer approves the exact link-free post and `iOS` flair. Add a beta link only after separate verification and approval. |
| 2 | r/TestFlight | Direct access to beta testers | Link posts must point only to TestFlight; title should be the app name with at most a short message; use the app flair; keep comments on the beta; avoid repeat posts. | Hold until a public TestFlight link is tested, then maintainer approves the exact post. |
| 3 | r/BetaTests | Focused product-beta feedback | Posting identities must be at least 24 hours old with at least 2 combined karma. Posts should explain the product and ask specific feedback questions. | Maintainer approves the exact post and confirms identity eligibility. Keep it link-free until a direct beta URL is verified. |
| 4 | r/alphaandbetausers | Broad alpha/beta tester recruitment | No community-specific rules are visible, but recent moderation behavior and Reddit-wide authenticity rules still apply. | Maintainer approves the exact link-free post after a same-day rules and removals check. |
| 5 | r/AI_Agents | Coding-agent builders and users | Project promotion belongs in the weekly Project Display thread; links belong there rather than in standalone posts. Self-promotion should remain around one in ten contributions and must include useful context. | Hold until the identity has genuine non-promotional participation and the current thread is re-checked; then approve one no-link comment. |
| 6 | r/SideProject | Broad maker feedback | No community-specific About-page rules are visible. A current thread explicitly invites project sharing, but community discussion rejects promotion-only accounts and low-effort link dropping. | Prefer one approved no-link thread comment after genuine participation and a same-day thread/removal check. |
| 7 | r/ChatGPTCoding | AI coding users and agent-tool builders | Promotion belongs in the designated self-promotion thread; flair is required for main posts; promote a project only once in the thread's stated policy. Main-feed promotion requires moderator sponsorship through modmail. | Maintainer approval required. Use only the current self-promotion thread, not the main feed. |
| 8 | r/Codex | Best audience match for the Codex-focused beta | Content must be directly related to Codex, use the right flair, and avoid bots. The rules do not explicitly permit self-promotion. | Moderator approval and maintainer approval required before any promotional post. A human must post; do not automate. |
| 9 | r/iOSProgramming | Useful for a technical build retrospective | App promotion is allowed only on Saturday, limited to one app once per year, and requires genuine participation. Current automated moderation requires labeled Tech Stack, Development Challenge, and AI Disclosure sections. | Maintainer approval required after confirming account eligibility, Saturday timing, unused annual allowance, and all three required sections. |

## Secondary or hold destinations

| Community | Assessment | Decision |
| --- | --- | --- |
| r/MacApps | Relevant to the menu-bar app, but the community requires 10 local karma and limits promotion to once per developer in 30 days. Main-feed promotion also requires an established trust signal or a public transparency path; other promotions belong in the monthly App Pile megathread. | Hold for the App Pile only. A maintainer must verify local-karma eligibility, the current megathread, and its required format. Never manufacture karma or expose a private identity to qualify. |
| r/OpenAI | Relevant but broad. Self-promotion should remain under 10% of participation, must be a contextual text post rather than a direct-link post, and participation is expected before advertising. | Hold until the identity has genuine participation and a maintainer approves a contextual post. |
| Show HN | A project must be personally built, directly usable, non-trivial, and ready for the author to discuss. Show HN discourages signup barriers and vote coordination. | Hold until the public beta is immediately testable and a maintainer can be present to answer questions. |
| r/SwiftUI | Promotion is allowed only when source code is provided and the app is open source. CodePilot is source-available under a noncommercial license, not OSI open source. | Do not promote CodePilot there under the current rules. |
| r/iOSApps | Requires 10 local karma, disclosure, ABC-format promotion, official App Store/TestFlight links, and either qualification or the monthly App Shelf megathread. More importantly, its current rules exclude generative-AI and AI-wrapped apps when AI is a core feature. | Do not promote CodePilot there under the current rules. Use r/TestFlight instead. |

## Rule sources

- [r/GenAiApps rules](https://www.reddit.com/r/GenAiApps/about/rules)
- [r/TestFlight rules](https://www.reddit.com/r/TestFlight/about/rules)
- [r/BetaTests rules](https://www.reddit.com/r/BetaTests/about/rules)
- [r/BetaTests posting guidance](https://www.reddit.com/r/BetaTests/comments/1ufs2a9/community_rules/)
- [r/alphaandbetausers rules](https://www.reddit.com/r/alphaandbetausers/about/rules)
- [r/AI_Agents rules](https://www.reddit.com/r/AI_Agents/about/)
- [r/AI_Agents current Project Display thread](https://www.reddit.com/r/AI_Agents/comments/1ukprfr/weekly_thread_project_display/)
- [r/SideProject current self-promotion thread](https://www.reddit.com/r/SideProject/comments/1utus1n/whats_everyone_working_on_lets_self_promote/)
- [r/ChatGPTCoding rules](https://www.reddit.com/r/ChatGPTCoding/about/rules)
- [r/ChatGPTCoding promotion thread example](https://www.reddit.com/r/ChatGPTCoding/comments/1ryqth6/self_promotion_thread/)
- [r/Codex rules](https://www.reddit.com/r/codex/about/rules)
- [r/iOSProgramming rules](https://www.reddit.com/r/iOSProgramming/about/rules)
- [r/iOSProgramming App Saturday format update](https://www.reddit.com/r/iOSProgramming/comments/1pnivdy/proposed_update_to_app_saturday_feedback_requested/)
- [r/iOSProgramming current missing-section enforcement example](https://www.reddit.com/r/iOSProgramming/comments/1utie4g/removed/)
- [r/MacApps rules](https://www.reddit.com/r/macapps/about/rules)
- [r/MacApps trust and transparency update](https://www.reddit.com/r/macapps/comments/1ryaeex/rmacapps_mods_went_too_far_whats_changing_phase_3/)
- [r/OpenAI rules](https://www.reddit.com/r/OpenAI/about/rules)
- [r/SideProject rules](https://www.reddit.com/r/SideProject/about/rules)
- [r/SwiftUI rules](https://www.reddit.com/r/SwiftUI/about/rules)
- [r/iOSApps rules](https://www.reddit.com/r/iosapps/about/rules)
- [Show HN guidelines](https://news.ycombinator.com/showhn.html)

## Required approvals

- Every public post or comment requires final maintainer approval under the
CodePilot launch policy.
- r/GenAiApps requires approval of the exact text and `iOS` flair. Any later
beta link requires separate verification and approval.
- r/BetaTests requires confirmation that the identity is at least 24 hours old
and has at least 2 combined karma; do not create or manufacture activity to
qualify.
- r/alphaandbetausers requires a same-day check of its live rules and recent
removals because it publishes no community-specific rules.
- r/AI_Agents requires genuine non-promotional participation, a safely
compliant one-in-ten ratio, and a same-day check of the weekly Project
Display thread. Do not use a standalone project post.
- r/SideProject requires genuine participation and a same-day check of the
current self-promotion thread and recent removals. Use the no-link thread
comment rather than a standalone launch post.
- r/Codex requires moderator confirmation because its published rules do not
explicitly authorize project promotion.
- r/iOSProgramming requires confirmation of Saturday timing, current account
eligibility, genuine prior activity, the once-per-year allowance, and the
required Tech Stack, Development Challenge, and AI Disclosure sections.
- r/MacApps requires confirmation of 10 local karma, the current App Pile
megathread, the 30-day allowance, and the required post format. The
`codepilotios` identity must not disclose private identity details to qualify
for a main-feed transparency path.
- r/OpenAI requires genuine prior participation before self-promotion.
- r/iOSApps is excluded from the posting queue while its no-AI rule remains.

The broader research archive, including held and excluded destinations, is in
[`ops/agents/community-drafts/2026-07-01-codepilot-beta-drafts.md`](../../ops/agents/community-drafts/2026-07-01-codepilot-beta-drafts.md).
Loading
Loading