claude-code
Two approvals, then the agent ships the iOS feature
Promtime
claude-codePragma, an open-source Claude Code scaffold for iOS projects published on Github by engineer Akshay Pimprikar, compresses the development cycle into 15 slash commands, three GitHub Actions workflows and two human approvals. The engineer signs off after /spec and after /plan; every later step is an agent command or a CI job.
At a glance
- /spec proposes two or three approaches for a feature, /plan converts the chosen one into a task list, and /feature executes it under strict TDD with one commit per task.
- pr-checks.yml demands unit and integration tests with coverage at or above 60 percent and warns below 80, ui-tests.yml runs UI tests, and release.yml builds on tags matching v*.*.*.
- Four files in .claude/context/ hold invariants, decisions, a feature log and rejected approaches, so constraints and dead ends survive session boundaries instead of resetting at the conversation edge.
The pipeline's claim rests on where enforcement sits: agent-side checks can be renegotiated by rerunning a prompt, while a workflow failing in GitHub Actions cannot. Pairing that with persistent context files reads as an attempt to give one engineer the two things a team supplies by default, institutional memory and a reviewer who is not the author. Whether the arrangement holds beyond a single codebase remains unproven.
Fifteen slash commands carry a feature from /spec to a tagged release
/spec proposes two or three approaches to a feature idea and saves the chosen one as a spec document, /plan converts an approved spec into a task-by-task implementation plan, and /feature executes that plan. /gates then verifies the build, the full test suite and architecture compliance before a pull request opens.
Each task follows a fixed order: a failing test, minimal code to pass it, a full suite run, then one commit, and the agent does not advance while tests are red. /bugfix inverts the same rule for defects, writing a regression test before the fix.
/review posts its verdict as a GitHub review, /test writes tests once that review reports APPROVED, and /release handles the version bump, changelog, pull request to main and tag. Six utility commands sit alongside them, including /status for resuming a session and /pipeline-review for auditing the pipeline itself.
Three workflows re-run the same checks with coverage set at 60 percent
pr-checks.yml fires on pull requests to develop or main and runs unit and integration tests with coverage at or above 60 percent, warning below 80. ui-tests.yml covers UI tests on the same pull requests and on pushes to either branch, while release.yml triggers on tags matching v*.*.* and runs the full suite in Release configuration before creating a GitHub Release.
The agent layer runs locally for fast feedback and CI repeats the checks independently. /gates covers TODO and FIXME markers, branch naming, changelog entries, coverage and abstraction bloat, matching a gitflow layout in which features branch off develop and main is tagged only on release.
The three installed layers are independent: commands in .claude/commands/, the workflows, and support scripts that handle simulator selection and coverage enforcement for CI. A project can adopt all three or take the commands alone, and installation happens inside Claude Code through /plugin marketplace add akshaypimprikar/pragma.
FinanceTracker carries 94 merged pull requests produced by the pipeline
The reference project is FinanceTracker, a production SwiftUI and SwiftData app with 94 merged pull requests, where specs and plans predate every feature and the history runs back to the first commit. Its README carries the full screenshot set for the app.
Default architecture assumptions are MVVM with a repository layer, ViewModels depending on protocols rather than concrete implementations, SwiftData for persistence with no SwiftData imports in domain services, Swift Testing for unit and integration tests and XCUITest for UI. All of it can be overridden in CLAUDE.md.
Setup differs by route: /pragma:init interviews the engineer for CLAUDE.md's architecture and constraints and seeds .claude/context/invariants.md from the same answers, while scripts/setup.sh copies the same files but leaves both as templates that have to be filled in by hand before the first /feature run.
TestFlight upload stays commented out
release.yml ships with the TestFlight upload block documented but commented out, since it needs an Apple Developer Program membership, a distribution certificate and an App Store Connect API key. The repository describes it as phase 2 and gives no timetable for enabling it, leaving the commented block as the instruction for teams that already hold those credentials.
Comments
No comments yet. Be the first.
Join the conversation
Sign in with Google to leave a comment. Your name and avatar come from your Google profile, and the comment appears after moderation.
We only use your name and avatar from Google. We never store your email address.
