skills/DEPLOYMENT-QUESTIONS.md
dan 5fea49b7c0 feat(tufte-press): evolve skill to complete workflow with JSON generation and build automation
- Transform tufte-press from reference guide to conversation-aware generator
- Add JSON generation from conversation context following strict schema
- Create build automation scripts with Nix environment handling
- Integrate CUPS printing with duplex support
- Add comprehensive workflow documentation

Scripts added:
- skills/tufte-press/scripts/generate-and-build.sh (242 lines)
- skills/tufte-press/scripts/build-card.sh (23 lines)

Documentation:
- Updated SKILL.md with complete workflow instructions (370 lines)
- Updated README.md with usage examples (340 lines)
- Created SKILL-DEVELOPMENT-STRATEGY-tufte-press.md (450 lines)
- Added worklog: 2025-11-10-tufte-press-skill-evolution.org

Features:
- Agent generates valid JSON from conversation
- Schema validation before build (catches errors early)
- Automatic Nix shell entry for dependencies
- PDF build via tufte-press toolchain
- Optional print with duplex support
- Self-contained margin notes enforced
- Complete end-to-end testing

Workflow: Conversation → JSON → Validate → Build → Print

Related: niri-window-capture, screenshot-latest, worklog skills
2025-11-10 15:03:44 -08:00

7.4 KiB

Deployment Architecture Questions

Current Understanding

Development flow:

~/proj/skills/            → Develop & test skills
     ↓ (manual copy)
~/proj/dotfiles/claude/skills/  → Source of truth for deployment
     ↓ (nix home-manager)
~/.claude/skills/         → Runtime (Claude Code)
~/.config/opencode/skills/      → Runtime (OpenCode)

Project-local flow:

<project>/.opencode/command/  → Project-specific commands
     ↓ (auto-loaded by OpenCode)
Available only in that project

Questions to Answer

1. Repository Relationship

Current model: Manual copy from skills repo to dotfiles

Questions:

  • Should ~/proj/skills be a submodule of dotfiles?
  • Should dotfiles symlink to skills repo instead of copying?
  • Is the manual copy step intentional (review gate)?
  • How do we keep them in sync?

Options:

A) Manual copy (current)
   - Pro: Review gate, dotfiles is source of truth
   - Con: Easy to get out of sync

B) Git submodule
   - dotfiles includes skills as submodule
   - Nix deploys from submodule
   - Pro: Version controlled, atomic
   - Con: Submodule complexity

C) Symlink in Nix
   - home.file.".claude/skills/foo".source = ~/proj/skills/skills/foo
   - Pro: No copy, always in sync
   - Con: Development changes immediately live

D) Separate repos, manual sync
   - Keep current model
   - Add deployment script to help
   - Pro: Clear separation, review step
   - Con: Manual process

My take: Option D feels right. Skills repo is for development/experimentation, dotfiles is for stable deployment. The copy step is a deployment decision point.

2. OpenCode Agents

What we know:

  • OpenCode has "agents" concept (keybind: <leader>a for agent list)
  • Commands can specify agent via frontmatter: agent: plan
  • Skills plugin loaded via "plugin": ["opencode-skills"]

Questions:

  • What agents exist? (plan, code, debug, etc.?)
  • Do agents have different capabilities?
  • Should skills target specific agents?
  • Do skills work across all agents by default?

Need to research:

  • OpenCode docs on agents
  • Check .opencode/command/ for agent examples
  • Test if skills work with different agents

Hypothesis: Skills are agent-agnostic, agents are just different personalities/modes. Commands can route to specific agents, but skills work with whoever invokes them.

3. Global vs Project-Local Skills

Global skills (~/.config/opencode/skills/):

  • Available in all projects
  • Examples: worklog, niri-window-capture, screenshot-latest
  • Deployed via Nix from dotfiles

Project-local (.opencode/command/):

  • Available only in that project
  • Examples: /test (nix flake check), /rebuild (nixos-rebuild)
  • Loaded directly from project directory

Questions:

  • Can .opencode/ contain skills/ not just command/?
  • What's the difference between a skill and a command?
  • Should project-local be commands or skills?

Current understanding:

  • Commands = User-invoked slash commands (/test)
  • Skills = AI-invoked based on intent (natural language)
  • Project-local are commands because they're explicit actions
  • Skills are almost always global (AI decides when to use)

Exception: Could have project-specific skills

  • Example: "Django migration skill" only for Django projects
  • Pattern: .opencode/skills/django-migrations/SKILL.md
  • Loaded when working in that project

4. Security-Sensitive Skills

niri-window-capture is unique:

  • High security risk
  • Requires user configuration before deployment
  • Needs audit logging
  • Should users be able to enable/disable at runtime?

Questions:

  • Should security-sensitive skills be opt-in after deployment?
  • How to prevent accidental invocation?
  • Should there be a "skills.disabled" list?
  • How to make security review part of deployment workflow?

Options:

A) Deploy but document requirements
   - Skills always available after deployment
   - User must review SECURITY.md
   - User configures niri block-out rules
   - Trust deployment decision

B) Deploy with enable flag
   - Skill deployed but inactive
   - User runs: enable-skill niri-window-capture
   - Requires acknowledgment of security docs
   - More complex

C) Don't deploy by default
   - Security-sensitive skills opt-in only
   - User manually deploys after review
   - Separate deployment process

My take: Option A. If user deploys to dotfiles and rebuilds, they've made the decision. Security docs in skill are sufficient warning.

5. Deployment Helper Tools

Current: Manual process

  1. Copy skill to dotfiles
  2. Edit claude.nix
  3. Edit opencode.nix
  4. Rebuild
  5. Restart agents

Questions:

  • Should we automate this?
  • Should deployment script update Nix configs?
  • Should there be validation before deployment?
  • Should there be rollback capability?

Created: bin/deploy-skill.sh (copies + shows instructions)

Could add:

  • Automatic Nix config updates
  • Validation (check SKILL.md exists, security docs present)
  • Test suite (does skill work before deploying?)
  • Rollback (remove from dotfiles + Nix configs)

Decisions Needed

Immediate (for current skills)

  1. Deploy screenshot-latest?

    • Low risk, useful globally
    • Decision: Yes, deploy
  2. Deploy niri-window-capture?

    • High risk, requires review
    • Decision: After user reviews SECURITY.md
  3. Update DEPLOYMENT.md with final model?

    • Document chosen approach
    • Decision: Pending answers above

Short-term (for future skills)

  1. Research OpenCode agents

    • Understand agent model
    • Document in DEPLOYMENT.md
    • Decision: Research needed
  2. Define project-local skill pattern

    • When to use vs global
    • How to structure
    • Decision: Pending research
  3. Enhance deployment tooling

    • Auto-update Nix configs?
    • Validation checks?
    • Decision: After more experience

Proposed Deployment Model (Draft)

For Global Skills

Development:

  1. Develop in ~/proj/skills/skills/<name>/
  2. Test locally with symlink
  3. Iterate until stable

Deployment:

  1. Run: ./bin/deploy-skill.sh <name>
  2. Review security docs if present
  3. Edit ~/proj/dotfiles/home/claude.nix (add skill)
  4. Edit ~/proj/dotfiles/home/opencode.nix (add skill)
  5. Commit to dotfiles: git add && git commit -m "Add <name> skill"
  6. Rebuild: sudo nixos-rebuild switch --flake .#delpad
  7. Restart agents

Maintenance:

  • Update in skills repo
  • Copy to dotfiles when stable
  • Rebuild to deploy updates

For Project-Local Commands

Development:

  1. Create in <project>/.opencode/command/<name>.md
  2. Restart OpenCode to load
  3. Test in that project

No deployment needed - auto-loaded from project directory

For Project-Local Skills (if needed)

Pattern (hypothetical):

  1. Create in <project>/.opencode/skills/<name>/SKILL.md
  2. OpenCode loads from project directory?
  3. Available only when working in that project

Need to verify: Does OpenCode support .opencode/skills/?

Next Steps

  1. Research OpenCode agents documentation
  2. Test project-local skills pattern
  3. Make deployment decision for screenshot-latest
  4. Review SECURITY.md for niri-window-capture
  5. Update DEPLOYMENT.md with final model
  6. Document in dotfiles after deployment

References

  • Dotfiles workflow: ~/proj/dotfiles/docs/skills-and-commands-workflow.md
  • OpenCode docs: https://opencode.ai/docs
  • Current deployment: DEPLOYMENT.md
  • Security analysis: skills/niri-window-capture/SECURITY.md