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

256 lines
7.4 KiB
Markdown

# 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)
4. **Research OpenCode agents**
- Understand agent model
- Document in DEPLOYMENT.md
- Decision: Research needed
5. **Define project-local skill pattern**
- When to use vs global
- How to structure
- Decision: Pending research
6. **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