Skip to content

chore: sync local skills and shell config into the image - #22

Merged
icco merged 3 commits into
mainfrom
chore/sync-local-config
Oct 13, 2026
Merged

icco merged 3 commits into
mainfrom
chore/sync-local-config

Conversation

@icco

@icco icco commented Oct 13, 2026

Copy link
Copy Markdown
Owner

Why

Brings locally installed skills (algorithmic-art, discernment-nudge, domain-modeling, research, slack-gif-creator, why) and the zsh shell setting into the image so they survive rebuilds.

Risks

slack-gif-creator vendors Python helpers (approved); the image has no Python deps installed for it.

@icco
icco marked this pull request as ready for review October 13, 2026 04:48
@icco
icco requested a balanced review from Copilot October 13, 2026 04:48
@icco
icco merged commit 2235373 into main Oct 13, 2026
10 checks passed
@icco
icco deleted the chore/sync-local-config branch October 13, 2026 04:50

Copilot AI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🟡 Changes recommended

The why skill targets an incompatible agent API, and the GIF utilities contain validation and optimization defects.

9 open findings
What changed in this PR

Adds six skills and configures zsh so they persist in the OpenCode image.

Changes:

  • Adds research, modeling, art, GIF, discernment, and rationale skills.
  • Vendors supporting templates, references, licenses, and GIF utilities.
  • Sets zsh as the configured shell.
File Description
skills/​why/​SKILL.md Defines rationale investigations.
skills/​why/​references/​synthesizer-prompt.md Defines synthesis output.
skills/​why/​references/​sources/​slack.md Adds Slack guidance.
skills/​why/​references/​sources/​sentry.md Adds Sentry guidance.
skills/​why/​references/​sources/​notion.md Adds Notion guidance.
skills/​why/​references/​sources/​linear.md Adds Linear guidance.
skills/​why/​references/​sources/​incident-postmortem.md Adds incident guidance.
skills/​why/​references/​sources/​datadog.md Adds Datadog guidance.
skills/​why/​references/​sources/​databricks.md Adds Databricks guidance.
skills/​why/​references/​sources/​code-archaeology.md Adds repository-history guidance.
skills/​why/​references/​source-playbook.md Maps evidence playbooks.
skills/​why/​references/​investigator-prompt.md Defines investigator prompts.
skills/​why/​references/​epistemics.md Defines confidence rules.
skills/​slack-gif-creator/​SKILL.md Documents Slack GIF creation.
skills/​slack-gif-creator/​requirements.txt Lists Python dependencies.
skills/​slack-gif-creator/​LICENSE.txt Adds licensing terms.
skills/​slack-gif-creator/​core/​validators.py Validates GIF properties.
skills/​slack-gif-creator/​core/​gif_builder.py Builds optimized GIFs.
skills/​slack-gif-creator/​core/​frame_composer.py Provides drawing helpers.
skills/​slack-gif-creator/​core/​easing.py Provides animation easing.
skills/​research/​SKILL.md Defines delegated research.
skills/​research/​agents/​openai.yaml Adds research metadata.
skills/​domain-modeling/​SKILL.md Defines domain-modeling workflow.
skills/​domain-modeling/​GLOSSARY-FORMAT.md Defines glossary format.
skills/​domain-modeling/​agents/​openai.yaml Adds modeling metadata.
skills/​domain-modeling/​ADR-FORMAT.md Defines ADR format.
skills/​discernment-nudge/​SKILL.md Defines discernment prompts.
skills/​discernment-nudge/​LICENSE.txt Adds licensing terms.
skills/​algorithmic-art/​templates/​viewer.html Adds interactive art template.
skills/​algorithmic-art/​templates/​generator_template.js Adds p5.js reference template.
skills/​algorithmic-art/​SKILL.md Defines algorithmic-art workflow.
skills/​algorithmic-art/​LICENSE.txt Adds licensing terms.
opencode.jsonc Selects zsh as the shell.

🧠 Review effort: Balanced


💡 Add a code-review agent skill or configure MCP servers for context-aware, tailored reviews. Learn more in the docs.

<div class="control-section">
<h3>Actions</h3>
<div class="button-row">
<button class="button" onclick="resetParameters()">Reset</button>
Comment on lines +252 to +253
```bash
pip install pillow imageio numpy
Comment on lines +41 to +42
if isinstance(frame, Image.Image):
frame = np.array(frame.convert("RGB"))

# Optimize for emoji if requested
if optimize_for_emoji:
if self.width > 128 or self.height > 128:
f" Reducing frames from {len(self.frames)} to ~12 for emoji size"
)
# Keep every nth frame to get close to 12 frames
keep_every = max(1, len(self.frames) // 12)
Comment on lines +39 to +40
with Image.open(gif_path) as img:
width, height = img.size
Comment on lines +42 to +58
# Count frames
frame_count = 0
try:
while True:
img.seek(frame_count)
frame_count += 1
except EOFError:
pass

# Get duration
try:
duration_ms = img.info.get("duration", 100)
total_duration = (duration_ms * frame_count) / 1000
fps = frame_count / total_duration if total_duration > 0 else 0
except:
total_duration = None
fps = None
Comment on lines +135 to +136
passes, _ = validate_gif(gif_path, is_emoji, verbose)
return passes
Comment thread skills/why/SKILL.md
Comment on lines +11 to +13
Each spawn below names a role line in the `pstack-models.mdc` rule and a default. Set `model` to that line's value, or to the default if the rule or the line is missing. Leave `model` unset when the value is `auto` or `inherit-parent`. If the Task tool rejects a slug, use the default and say so. If it rejects the default, use the closest valid slug of the same family from its error message.

Every spawn is `generalPurpose` with `readonly: false` (agent mode). **Do not use readonly/Ask mode.** It strips MCP access, which disables the MCP-backed investigators and the synthesizer's citation spot-checks. Investigators still shouldn't write anything.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants