/apollo-tasks
**Project context:** Values in angle brackets below (e.g. `<scheme>`, `<JIRA_KEY>`, `<flag-key-enum>`) are resolved at runtime — detect them from the project (`xcodebuild -list -json` for the scheme, `git`/`gh` for repo & owner, the branch name for the Jira key, a codebase
$ npx -y skills add carloshpdoc/ios-workflow-claude --agent claude-codeHow it fires
How this command gets triggered: by you, by Claude, or both.
- Fires itselfClaude auto-loads it when your prompt matches the work.
- You can call itInvoke it directly when you want it.
- Slash command
/apollo-tasks
Context preview
What this command does when you run it.
**Project context:** Values in angle brackets below (e.g. `<scheme>`, `<JIRA_KEY>`, `<flag-key-enum>`) are resolved at runtime — detect them from the project (`xcodebuild -list -json` for the scheme, `git`/`gh` for repo & owner, the branch name for the Jira key, a codebase
Command definition
apollo-tasks.mdCreate Apollo Migration Jira Tasks
> **Project context:** Values in angle brackets below (e.g. `<scheme>`, `<JIRA_KEY>`, `<flag-key-enum>`) are resolved at runtime — detect them from the project (`xcodebuild -list -json` for the scheme, `git`/`gh` for repo & owner, the branch name for the Jira key, a codebase search for flag/font files), or ask if they cannot be inferred. This plugin ships no per-project config.
Create Jira tasks for Apollo GraphQL migration repositories.
Usage
/apollo-tasks <RepoName1> <RepoName2> ...
Or without arguments to use the recommended next repositories from `/apollo-status`.
Arguments
- `$ARGUMENTS` - Space-separated list of repository names to create tasks for (optional)
Jira Configuration
- **Project:** <JIRA_KEY>
- **Cloud ID:** <jira-cloud-id>
- **Epic:** <JIRA_KEY>-XXXX (Apollo Removal)
- **Labels:** apollo-removal, tech-debt
- **Assignee:** <jira-assignee-id> (current user)
- **Sprint field:** customfield_10020
Steps
1. Get Repository List
If `$ARGUMENTS` is provided, parse the space-separated repository names.
If no arguments, run `/apollo-status` logic to get the recommended next 5 repositories from `docs/apollo-migration-status.md`.
2. Gather Repository Details
For each repository, search the codebase to find:
- **Location:** The directory path (e.g., `<scheme>/Repositories/<RepoName>/`)
- **Consumers:** Files that import/use the repository (ViewModels, Factories, Builders)
- **Tier:** Complexity tier (1=simple, 2=medium, 3=complex) based on number of queries/mutations
3. Find Current Sprint
Use `mcp__claude_ai_Atlassian__getJiraIssue` to get an existing Apollo task (e.g., <JIRA_KEY>-XXXX) and extract the active sprint ID from `customfield_10020`.
4. Create Jira Tasks
For each repository, use `mcp__claude_ai_Atlassian__createJiraIssue` with:
cloudId: <jira-cloud-id>
projectKey: <JIRA_KEY>
issueTypeName: Task
summary: [APOLLO] Migrate <RepoName> repository to GraphQLClientProtocol
contentFormat: markdown
assignee_account_id: <jira-assignee-id>
additional_fields: {"labels": ["apollo-removal", "tech-debt"]}
description: |
## Overview
Migrate Network<RepoName>Repository from Apollo to GraphQLClientProtocol.
## Tier
<tier> (<complexity description>)
## Location
`<location>`
## Consumers (<count>)
- <Consumer1>
- <Consumer2>
...
## Tasks
- Create Query file
- Create DataSource file
- Create Response/Mapper files
- Create Factory file
- Update <count> consumers to use factory pattern
- Write unit tests (mock, repository tests, ViewModel tests)
- Delete old Apollo files (.graphql, .graphql.swift, Network*Repository.swift)
- Build and verify
- Run tests and verify
## Acceptance Criteria
- All consumers use the new factory pattern
- Unit tests pass
- No Apollo dependencies remain in this repository5. Assign to Epic
For each created task, use `mcp__claude_ai_Atlassian__editJiraIssue` to set the parent:
cloudId: <jira-cloud-id>
issueIdOrKey: <created task key>
fields: {"parent": {"key": "<JIRA_KEY>-XXXX"}}6. Move to Current Sprint
For each created task, use `mcp__claude_ai_Atlassian__editJiraIssue` to set the sprint:
cloudId: <jira-cloud-id>
issueIdOrKey: <created task key>
fields: {"customfield_10020": <sprint_id>}7. Display Summary
Show a table of created tasks:
## Created Jira Tasks
| Key | Repository | Consumers | Sprint | Epic |
|-----|------------|-----------|--------|------|
| <JIRA_KEY>-XXXX | RepoName | N | Sprint XX | Apollo Removal |
...
All tasks assigned to: <user name>
Notes
- Run all Jira API calls in parallel where possible (e.g., create all tasks at once, then update all at once)
- If a task already exists for a repository, skip it and notify the user
- The epic <JIRA_KEY>-XXXX and sprint field customfield_10020 are specific to this Jira instance
Read more
Create Apollo Migration Jira Tasks
> **Project context:** Values in angle brackets below (e.g. `<scheme>`, `<JIRA_KEY>`, `<flag-key-enum>`) are resolved at runtime — detect them from the project (`xcodebuild -list -json` for the scheme, `git`/`gh` for repo & owner, the branch name for the Jira key, a codebase search for flag/font files), or ask if they cannot be inferred. This plugin ships no per-project config.
Create Jira tasks for Apollo GraphQL migration repositories.
Usage
/apollo-tasks <RepoName1> <RepoName2> ...
Or without arguments to use the recommended next repositories from `/apollo-status`.
Arguments
- `$ARGUMENTS` - Space-separated list of repository names to create tasks for (optional)
Jira Configuration
- **Project:** <JIRA_KEY>
- **Cloud ID:** <jira-cloud-id>
- **Epic:** <JIRA_KEY>-XXXX (Apollo Removal)
- **Labels:** apollo-removal, tech-debt
- **Assignee:** <jira-assignee-id> (current user)
- **Sprint field:** customfield_10020
Steps
1. Get Repository List
If `$ARGUMENTS` is provided, parse the space-separated repository names.
If no arguments, run `/apollo-status` logic to get the recommended next 5 repositories from `docs/apollo-migration-status.md`.
2. Gather Repository Details
For each repository, search the codebase to find:
- **Location:** The directory path (e.g., `<scheme>/Repositories/<RepoName>/`)
- **Consumers:** Files that import/use the repository (ViewModels, Factories, Builders)
- **Tier:** Complexity tier (1=simple, 2=medium, 3=complex) based on number of queries/mutations
3. Find Current Sprint
Use `mcp__claude_ai_Atlassian__getJiraIssue` to get an existing Apollo task (e.g., <JIRA_KEY>-XXXX) and extract the active sprint ID from `customfield_10020`.
4. Create Jira Tasks
For each repository, use `mcp__claude_ai_Atlassian__createJiraIssue` with:
cloudId: <jira-cloud-id>
projectKey: <JIRA_KEY>
issueTypeName: Task
summary: [APOLLO] Migrate <RepoName> repository to GraphQLClientProtocol
contentFormat: markdown
assignee_account_id: <jira-assignee-id>
additional_fields: {"labels": ["apollo-removal", "tech-debt"]}
description: |
## Overview
Migrate Network<RepoName>Repository from Apollo to GraphQLClientProtocol.
## Tier
<tier> (<complexity description>)
## Location
`<location>`
## Consumers (<count>)
- <Consumer1>
- <Consumer2>
...
## Tasks
- Create Query file
- Create DataSource file
- Create Response/Mapper files
- Create Factory file
- Update <count> consumers to use factory pattern
- Write unit tests (mock, repository tests, ViewModel tests)
- Delete old Apollo files (.graphql, .graphql.swift, Network*Repository.swift)
- Build and verify
- Run tests and verify
## Acceptance Criteria
- All consumers use the new factory pattern
- Unit tests pass
- No Apollo dependencies remain in this repository5. Assign to Epic
For each created task, use `mcp__claude_ai_Atlassian__editJiraIssue` to set the parent:
cloudId: <jira-cloud-id>
issueIdOrKey: <created task key>
fields: {"parent": {"key": "<JIRA_KEY>-XXXX"}}6. Move to Current Sprint
For each created task, use `mcp__claude_ai_Atlassian__editJiraIssue` to set the sprint:
cloudId: <jira-cloud-id>
issueIdOrKey: <created task key>
fields: {"customfield_10020": <sprint_id>}7. Display Summary
Show a table of created tasks:
## Created Jira Tasks | Key | Repository | Consumers | Sprint | Epic | |-----|------------|-----------|--------|------| | <JIRA_KEY>-XXXX | RepoName | N | Sprint XX | Apollo Removal | ... All tasks assigned to: <user name>
Notes
- Run all Jira API calls in parallel where possible (e.g., create all tasks at once, then update all at once)
- If a task already exists for a repository, skip it and notify the user
- The epic <JIRA_KEY>-XXXX and sprint field customfield_10020 are specific to this Jira instance
Reusable Claude Code slash-commands, skills, and workflows extracted from real iOS / backend projects. Packaged as three installable plugins - register the marketplace and /plugin install what you need.
Repo: carloshpdoc/ios-workflow-claude
Other commands on ios-workflow-claude.
- /apollo-check
**Project context:** Values in angle brackets below (e.g. `<scheme>`, `<JIRA_KEY>`, `<flag-key-enum>`) are resolved at runtime — detect them from the project (`xcodebuild -list -json` for the scheme, `git`/`gh` for repo & owner, the branch name for the Jira key, a codebase
Open command - /apollo-migrate
**Project context:** Values in angle brackets below (e.g. `<scheme>`, `<JIRA_KEY>`, `<flag-key-enum>`) are resolved at runtime — detect them from the project (`xcodebuild -list -json` for the scheme, `git`/`gh` for repo & owner, the branch name for the Jira key, a codebase
Open command - /apollo-review
**Project context:** Values in angle brackets below (e.g. `<scheme>`, `<JIRA_KEY>`, `<flag-key-enum>`) are resolved at runtime — detect them from the project (`xcodebuild -list -json` for the scheme, `git`/`gh` for repo & owner, the branch name for the Jira key, a codebase
Open command - /apollo-status
**Project context:** Values in angle brackets below (e.g. `<scheme>`, `<JIRA_KEY>`, `<flag-key-enum>`) are resolved at runtime — detect them from the project (`xcodebuild -list -json` for the scheme, `git`/`gh` for repo & owner, the branch name for the Jira key, a codebase
Open command - /bump
Bump the app version or build number across all targets in the current project.
Open command - /code-review
Review code quality applying DRY, SOLID, naming, and formatting standards
Open command

