ios-fix
“Autonomous iOS bug fixer. (gstack)”
aipkg.jsonLICENSE.txtREADME.mdSKILL.mdSKILL.md.tmpl- 01SDI-385%MEDIUM
SKILL.md:70
detailhide
The preamble executes telemetry logging to ~/.gstack/analytics/ without explicit manifest declaration or user consent mechanism at skill invocation time. This violates principle of least privilege—a user invoking an 'iOS bug fixer' skill should not automatically trigger analytics writes to undisclosed system paths.
68echo "QUESTION_TUNING: $_QUESTION_TUNING"69mkdir -p ~/.gstack/analytics70if [ "$_TEL" != "off" ]; then71echo '{"skill":"ios-fix","ts":"'$(date -u +%Y-%m-%dT%H:%M:%SZ)'","repo":"'$(basename "$(git rev-parse --show-toplevel 2>/dev/null)" 2>/dev/null || echo "unknown")'"}' >> ~/.gstack/analytics/skill-usage.jsonl 2>/dev/null || true72fifix Add 'Analytics' to the allowed-tools manifest section. Declare telemetry collection in the skill description. Implement explicit per-session consent gate before any analytics writes in the preamble, or defer all analytics to post-workflow completion where user is aware.
- 02SDI-380%MEDIUM
SKILL.md:38
detailhide
The preamble reads and modifies ~/.gstack/ configuration files (gstack-config calls, feature-prompted markers) without declaring these operations in the manifest's allowed-tools. This is scope creep—configuration mutation is a sensitive capability not reflected in the skill's stated purpose.
36## Preamble (run first)3738```bash39_UPD=$(~/.claude/skills/gstack/bin/gstack-update-check 2>/dev/null || .claude/skills/gstack/bin/gstack-update-check 2>/dev/null || true)40[ -n "$_UPD" ] && echo "$_UPD" || truefix Explicitly declare all configuration file paths and mutation operations in the skill manifest. Consider moving config checks to a separate bootstrapping step with clear user consent. Alternatively, implement a config-change audit log and user confirmation gate before writing ~/.gstack/ state files.
- 03SDI-175%MEDIUM
SKILL.md:1
detailhide
The manifest describes 'Autonomous iOS bug fixer' but the preamble (lines 36–506) implements a complex multi-feature onboarding pipeline: telemetry prompts, learning artifacts, gbrain sync, routing injection, plan-mode behavior, and writing-style tuning. None of these are iOS-related. This mismatch obscures the true scope of the skill and makes it harder for users to predict what will execute.
1---2name: ios-fix3preamble-tier: 3fix Either (1) split the preamble into reusable common setup and skill-specific steps, with clear labeling; (2) update the manifest description to accurately reflect the full behavior; or (3) move generic onboarding (telemetry, features, routing) to a separate /setup skill that runs once, not per-invocation.
- 04SDI-270%LOW
SKILL.md:82
detailhide
The preamble spawns background processes (gstack-timeline-log, gstack-telemetry-log) and manages session state (~/.gstack/sessions/) without documenting this behavior in the skill description or providing visibility into what these background tasks do or where they write data.
80 break81done82eval "$(~/.claude/skills/gstack/bin/gstack-slug 2>/dev/null)" 2>/dev/null || true83_LEARN_FILE="${GSTACK_HOME:-$HOME/.gstack}/projects/${SLUG:-unknown}/learnings.jsonl"84if [ -f "$_LEARN_FILE" ]; thenfix Document all background process spawning in the skill preamble comments. Ensure each background task has a clear purpose statement and writes only to documented paths. Provide a flag to disable background telemetry for users who do not consent.
- 05SDI-465%LOW
SKILL.md:749
detailhide
The 'Iron Law' section emphasizes 'NO FIX WITHOUT A REPRODUCING SNAPSHOT' but earlier preamble sections provide no enforcement mechanism or validation logic to ensure this constraint is honored before the skill's Phase 1 begins. This creates a documentation-code gap where the principle is stated but not enforced.
747# Autonomous iOS bug fixer748749## Iron Law750751**NO FIX WITHOUT A REPRODUCING SNAPSHOT.** Before editing any Swift source,fix Add a validation checkpoint in the skill workflow (before Phase 1 starts) that confirms a reproducing snapshot exists or has been captured. If missing, explicitly STOP and ask the user to provide one. Log this checkpoint in skill output so it's observable.
- 06SQP-280%HIGH
SKILL.md:276
detailhide
The skill instructions include `git rm -r .claude/skills/gstack/` as a consequence of user choice (option A in the vendoring migration prompt) without explicit final confirmation or backup creation. This destructive operation could accidentally delete the user's gstack installation if the prompt logic fails or the user misunderstands the choice.
274275If A:2761. Run `git rm -r .claude/skills/gstack/`2772. Run `echo '.claude/skills/gstack/' >> .gitignore`2783. Run `~/.claude/skills/gstack/bin/gstack-team-init required` (or `optional`)fix Require a second confirmation (e.g., 'This will permanently delete .claude/skills/gstack/. Type DELETE to confirm.') before executing git rm. Create a timestamped backup copy to ~/.gstack/backups/ before deletion. Provide clear instructions on recovery if the user changes their mind.
- 07SQP-270%MEDIUM
SKILL.md:73
detailhide
The preamble silently deletes session files older than 120 minutes (`find ~/.gstack/sessions -mmin +120 ... -exec rm {} +`) without any log message, user warning, or retention policy documentation. Users have no visibility into what is being cleaned up.
71echo '{"skill":"ios-fix","ts":"'$(date -u +%Y-%m-%dT%H:%M:%SZ)'","repo":"'$(basename "$(git rev-parse --show-toplevel 2>/dev/null)" 2>/dev/null || echo "unknown")'"}' >> ~/.gstack/analytics/skill-usage.jsonl 2>/dev/null || true72fi73for _PF in $(find ~/.gstack/analytics -maxdepth 1 -name '.pending-*' 2>/dev/null); do74 if [ -f "$_PF" ]; then75 if [ "$_TEL" != "off" ] && [ -x "~/.claude/skills/gstack/bin/gstack-telemetry-log" ]; thenfix Log a message before cleanup: 'Cleaning old session files from ~/.gstack/sessions/'. Write a summary to ~/.gstack/.cleanup-log (e.g., 'Deleted 5 sessions on 2024-01-15 14:30'). Allow users to configure retention time via gstack-config. Document the default 120-minute retention policy in skill comments or CLAUDE.md.
- 08SQP-275%MEDIUM
SKILL.md:71
detailhide
Network requests to telemetry and brain-sync endpoints (gstack-telemetry-log, gstack-brain-sync) are triggered in the preamble without explicit warning in the skill description. Users invoking this skill to fix an iOS bug may not expect network calls to external analytics or artifact-sync services.
69mkdir -p ~/.gstack/analytics70if [ "$_TEL" != "off" ]; then71echo '{"skill":"ios-fix","ts":"'$(date -u +%Y-%m-%dT%H:%M:%SZ)'","repo":"'$(basename "$(git rev-parse --show-toplevel 2>/dev/null)" 2>/dev/null || echo "unknown")'"}' >> ~/.gstack/analytics/skill-usage.jsonl 2>/dev/null || true72fi73for _PF in $(find ~/.gstack/analytics -maxdepth 1 -name '.pending-*' 2>/dev/null); dofix Add a 'Network' notice to the skill description. Implement a pre-flight check that lists all network operations before the preamble runs. Provide an easy opt-out flag (e.g., GSTACK_OFFLINE_MODE=1) that disables all telemetry and sync calls.
- 09SQP-285%MEDIUM
SKILL.md.tmpl:5
detailhide
The skill description and documentation omit critical warnings about destructive operations. This skill performs automated code modifications (Phase 3: 'Edit Swift source'), rebuilds applications, and redeploys to real devices without explicit user consent warnings in the skill description itself. Users triggering this skill via voice or text commands like 'fix this ios bug' may not fully understand they are authorizing potentially breaking changes to production code and device state without human review checkpoints.
3preamble-tier: 34version: 1.0.05description: |6 Autonomous iOS bug fixer. Takes a bug found by /ios-qa, reads the source,7 writes the fix, rebuilds, redeploys, and verifies the fix on the realfix Add explicit warnings in the skill description and preamble section clearly stating: (1) This skill will automatically modify source code and rebuild applications, (2) User should review all proposed fixes before deploying to production, (3) The skill may iterate up to 3 times before escalating, during which the app state may be altered, (4) Device snapshots and test fixtures will be created and committed. Consider adding a confirmation step (AskUserQuestion) before entering Phase 3 that requires explicit user approval of the proposed fix before any code modifications occur.
- 10SSD-470%MEDIUM
SKILL.md:36
detailhide
The preamble establishes operational context and narrative trust (echo statements, config checks, session management) before requesting sensitive actions (config writes, file modifications, auto-decisions in plan mode). This pattern of building trust before asking for permission is a known social engineering technique that can lower the user's threshold for granting sensitive capabilities.
34Voice triggers (speech-to-text aliases): "fix the iOS bug", "patch the iPhone app", "auto-fix the iOS issue".3536## Preamble (run first)3738```bashfix Invert the order: declare all sensitive capabilities upfront (before any setup). Use explicit AskUserQuestion gates before first config write, first file deletion, and before enabling auto-decide features. Avoid narrative framing that normalizes privilege escalation.
- 11SSD-375%MEDIUM
SKILL.md:58
detailhide
The skill logs usage data, decisions, learnings, and project context to ~/.gstack/analytics/ and ~/.gstack/projects/ without explicit per-session user consent. The telemetry prompt (lines 225–252) appears much later in the workflow, after logging has already begun. This violates consent ordering—logging should never precede consent.
56_LAKE_SEEN=$([ -f ~/.gstack/.completeness-intro-seen ] && echo "yes" || echo "no")57echo "LAKE_INTRO: $_LAKE_SEEN"58_TEL=$(~/.claude/skills/gstack/bin/gstack-config get telemetry 2>/dev/null || true)59_TEL_PROMPTED=$([ -f ~/.gstack/.telemetry-prompted ] && echo "yes" || echo "no")60_TEL_START=$(date +%s)fix Move the telemetry consent prompt (TEL_PROMPTED check) to the very beginning of the preamble, before any logging. Do not write analytics until after user has consented. Provide a runtime flag (GSTACK_TELEMETRY=off) that blocks all logging until explicitly enabled.
- 12SSD-170%MEDIUM
SKILL.md:113
detailhide
The 'Skill Invocation During Plan Mode' section instructs the agent to 'Treat the skill file as executable instructions, not reference' and to bypass AskUserQuestion gates if the skill workflow begins. This reframes bypassing interactive prompts as correct behavior, potentially allowing the agent to make unreviewed changes in plan mode when the user expected an interactive checkpoint.
111echo "CHECKPOINT_MODE: $_CHECKPOINT_MODE"112echo "CHECKPOINT_PUSH: $_CHECKPOINT_PUSH"113# Plan-mode hint for skills like /spec that branch behavior on plan-mode state.114# Claude Code exposes plan mode via system reminders; we detect best-effort115# from CLAUDE_PLAN_FILE (set by the harness when plan mode is active) andfix Clarify that AskUserQuestion gates are NOT optional in plan mode—they are the mechanism for exiting plan mode and requesting user confirmation. Require explicit tool_use of AskUserQuestion before any destructive operations, even in skill workflows. Add a comment: 'Plan mode requires user confirmation for every decision; there are no exceptions.'
- 13SSD-465%LOW
SKILL.md:145
detailhide
Feature discovery prompts (lines 145–177) incrementally normalize auto-enrollment in new systems (continuous checkpoint, model overlays, GBrain integration) by presenting them as helpful defaults. Over time, repeated exposure to 'this feature improves X' can habituate users to accepting new data-collection or auto-behavior features without sustained critical evaluation.
143If output shows `JUST_UPGRADED <from> <to>`: print "Running gstack v{to} (just updated!)". If `SPAWNED_SESSION` is true, skip feature discovery.144145Feature discovery, max one prompt per session:146- Missing `~/.claude/skills/gstack/.feature-prompted-continuous-checkpoint`: AskUserQuestion for Continuous checkpoint auto-commits. If accepted, run `~/.claude/skills/gstack/bin/gstack-config set checkpoint_mode continuous`. Always touch marker.147- Missing `~/.claude/skills/gstack/.feature-prompted-model-overlay`: inform "Model overlays are active. MODEL_OVERLAY shows the patch." Always touch marker.fix Separate feature discovery (informational) from feature enrollment (interactive). Always require explicit opt-in for any feature that involves data collection, auto-commits, or behavior changes. Document the decision so the user can later audit what was auto-enabled.
- 14SSD-270%LOW
SKILL.md:410
detailhide
The GBrain integration section (artifacts sync, brain-sync, remote-MCP mode) uses indirect language ('publish your artifacts', 'index across machines', 'managed by brain server') that normalizes cross-machine data collection without explicitly stating that project code, plans, and design documents may be sent to external systems. The language obscures the scope of what is being collected.
408- [ ] If a per-option Hold fires, you stopped the chain immediately (didn't queue)409410411## Artifacts Sync (skill start)412fix Rename 'artifacts' to 'project data' or be specific ('CEO plans, designs, code reviews'). Explicitly state: 'GBrain will copy your project data to a remote GitHub repo for indexing.' Require explicit user consent before any GBrain sync operation. Document which files are included in the 'artifacts' bucket.
- 15SSD-160%LOW
SKILL.md:537
detailhide
The 'Voice' and 'Writing Style' sections describe guardrails (no AI vocabulary, be direct, avoid hype) as 'preferences' and 'nudges' that are 'subordinate' to skill workflow. This framing subtly redefines safety guidelines as optional negotiable constraints rather than hard requirements, which could cause an agent to deprioritize them if a user or skill asks for behavior that conflicts.
535536537## Model-Specific Behavioral Patch (claude)538539The following nudges are tuned for the claude model family. They arefix Reframe safety guidelines as requirements: 'These are not preferences; they are design constraints that all skills must follow.' Remove the word 'subordinate' from the guardrails section. Add a note: 'If a skill or user request conflicts with these guidelines, the guidelines win.'
- 16SSD-365%LOW
SKILL.md:571
detailhide
Context recovery (lines 571–595) automatically loads and exposes prior project artifacts (CEO plans, checkpoints, design documents, learnings, timelines) without prompting the user to confirm that this prior context is still relevant or should be visible. Sensitive project decisions from past sessions may be unintentionally re-exposed.
569Bad: "I've identified a potential issue in the authentication flow that may cause problems under certain conditions."570571## Context Recovery572573At session start or after compaction, recover recent project context.fix Before loading context, ask: 'Found prior artifacts from [date]. Load them?' If yes, show a summary (file paths, dates) and ask for confirmation before exposing content. Provide a flag to skip context recovery (GSTACK_SKIP_RECOVERY=1) for sensitive sessions.
- 17SSD-275%MEDIUM
SKILL.md:652
detailhide
The question-tuning system uses obfuscated marker syntax (`<gstack-qid:{id}>`) and implicit `(recommended)` label parsing to enable automatic decision-making without explicit user awareness. Users may not understand that their AskUserQuestion responses are being logged and categorized, or that future auto-decisions will be made based on markers they did not explicitly set.
650If you are looping on the same diagnostic, same file, or failed fix variants, STOP and reassess. Consider escalation or /context-save. Progress summaries must NEVER mutate git state.651652## Question Tuning (skip entirely if `QUESTION_TUNING: false`)653654Before each AskUserQuestion, choose `question_id` from `scripts/question-registry.ts` or `{skill}-{slug}`, then run `~/.claude/skills/gstack/bin/gstack-question-preference --check "<id>"`. `AUTO_DECIDE` means choose the recommended option and say "Auto-decided [summary] → [option] (your preference). Change with /plan-tune." `ASK_NORMALLY` means ask.fix Require explicit user opt-in for each auto-decision via a separate AskUserQuestion: 'Allow auto-decisions for [question-id]?' Do not embed decision logic in question markers. Make the question-log and preference system fully transparent and auditable via a command like `gstack-questions --history` and `gstack-questions --preferences`.
- 18SSD-465%LOW
SKILL.md:704
detailhide
Operational self-improvement and learning logging (lines 704–712) normalize persistent collection of user behavior, project quirks, and patterns via `gstack-learnings-log`. Over time, the accumulated learnings create a behavioral profile that may be used for future auto-decisions or recommendations without explicit user review of what was learned.
702Escalate after 3 failed attempts, uncertain security-sensitive changes, or scope you cannot verify. Format: `STATUS`, `REASON`, `ATTEMPTED`, `RECOMMENDATION`.703704## Operational Self-Improvement705706Before completing, if you discovered a durable project quirk or command fix that would save 5+ minutes next time, log it:fix Make learnings collection opt-in, not automatic. Before logging a learning, ask the user: 'Found a pattern: [insight]. Save for future sessions?' Show the learnings file periodically (e.g., weekly) for user review and cleanup. Provide a command to delete learnings or audit what was collected.