2026-02-03 18:51:57 -08:00
---
2026-02-07 21:44:57 -08:00
title: AI Assistance Guide
2026-02-23 16:19:54 -08:00
modified: 2026-02-23
2026-02-03 18:51:57 -08:00
tags:
- tutorials
- ai
---
# AI Assistance Guide
> **Audiences:** AI, Owner
This guide provides context for AI agents (like Claude Code) assisting with BlumeOps operations, and helps Erich understand how to work effectively with AI assistance.
## Critical Rules
These are non-negotiable for AI agents working in this repo:
1. **Always use `--context=minikube-indri` with kubectl ** - Work contexts exist that must never be touched
2026-02-20 08:15:20 -08:00
2. **Run `mise run ai-docs` at session start ** - Review current infrastructure state
2026-02-03 18:51:57 -08:00
3. **Never commit secrets ** - The repo is public at github.com/eblume/blumeops
4. **Wait for user review before deploying ** - Create PRs, don't auto-deploy
5. **Never merge PRs without explicit request ** - The user merges after review
2026-02-23 16:19:54 -08:00
Full rules are in the repo's `CLAUDE.md` . See [[agent-change-process]] for the C0/C1/C2 change classification methodology — C0 (direct to main), C1 (feature branch + PR), C2 (Mikado Branch Invariant).
2026-02-03 18:51:57 -08:00
## Workflow Conventions
2026-02-23 16:19:54 -08:00
### Branching
2026-02-03 18:51:57 -08:00
2026-02-23 16:19:54 -08:00
Branching depends on change classification (see [[agent-change-process]]):
- **C0 (Quick Fix):** Commit directly to main — no branch or PR needed
- **C1/C2:** Feature branch required:
2026-02-03 18:51:57 -08:00
```bash
git checkout main && git pull
git checkout -b feature/descriptive-name
# ... make changes ...
git commit -m "Description"
```
### Pull Requests
Use the forge's `tea` CLI:
```bash
tea pr create --title "Title" --description "$(cat <<'EOF'
## Summary
- Change 1
- Change 2
## Deployment and Testing
- [ ] Test step
EOF
)"
```
### Changelog Fragments
Add a fragment for user-visible changes:
```bash
2026-03-03 15:30:00 -08:00
# C1/C2: use branch name
2026-02-03 19:06:14 -08:00
echo "Description" > docs/changelog.d/branch-name.feature.md
2026-03-03 15:30:00 -08:00
# C0: use orphan prefix (no branch to name after)
echo "Description" > docs/changelog.d/+descriptive-slug.feature.md
2026-02-03 18:51:57 -08:00
```
2026-02-04 07:09:28 -08:00
Types (file suffix): `.feature` , `.bugfix` , `.infra` , `.doc` , `.ai` , `.misc`
### Wiki-Link Formatting
Use simple wiki-links without alternate text or extra spaces:
2026-02-04 17:21:34 -08:00
- Prefer `[[borgmatic]]` over `[[borgmatic|Borgmatic]]`
2026-02-04 07:09:28 -08:00
- Only use alternate text when grammatically warranted (e.g., `[[cluster|Kubernetes]]` reads better than `[[cluster]]` )
2026-02-04 17:21:34 -08:00
- No spaces around the pipe: `[[path|Text]]` not `[[ path|Text ]]`
2026-02-04 07:09:28 -08:00
When editing documentation, rewrite links to follow this convention as you encounter them.
2026-02-03 18:51:57 -08:00
## Service Locations
Understanding where services run helps target changes correctly:
| Location | Services | Management |
|----------|----------|------------|
| [[indri]] (native) | Forgejo, Zot, Jellyfin, Caddy | Ansible |
2026-02-04 07:09:28 -08:00
| [[cluster|Kubernetes]] | Everything else | ArgoCD |
2026-02-03 18:51:57 -08:00
## Mise Tasks
BlumeOps operations are driven by mise tasks. Run `mise tasks` to list all available tasks.
| Task | When to Use |
|------|-------------|
2026-03-09 11:59:43 -07:00
| `ai-docs` | At session start - review infrastructure documentation (see [[mise-tasks]]) |
2026-02-23 16:19:54 -08:00
| `docs-mikado` | View active Mikado dependency chains for C2 changes |
| `docs-mikado --resume` | Resume a C2 chain: detect branch, show state and next steps |
2026-02-03 18:51:57 -08:00
| `provision-indri` | Deploy changes to [[indri]]-hosted services via Ansible |
2026-02-04 07:49:15 -08:00
| `services-check` | After deployments - verify all services are healthy |
2026-02-03 18:51:57 -08:00
| `pr-comments` | Check unresolved PR comments during review |
| `blumeops-tasks` | Find pending tasks from Todoist |
| `container-list` | View available container images and tags |
2026-02-20 22:56:20 -08:00
| `container-build-and-release` | Trigger container build workflows |
2026-02-03 18:51:57 -08:00
| `dns-preview` | Preview DNS changes before applying |
| `dns-up` | Apply DNS changes via Pulumi |
| `tailnet-preview` | Preview Tailscale ACL changes |
| `tailnet-up` | Apply Tailscale ACL changes via Pulumi |
2026-03-09 11:59:43 -07:00
| `docs-check-links` | Validate wiki-links resolve correctly (supports path-based links, orphan detection) |
2026-02-06 07:08:46 -08:00
| `docs-review-stale` | Report docs by last-modified date, highlight stale ones |
| `docs-review-tags` | Print frontmatter tag inventory across all docs |
2026-02-09 07:29:45 -08:00
| `docs-review` | Review the most stale doc by last-reviewed date |
2026-02-22 10:20:11 -08:00
| `runner-logs` | View Forgejo workflow logs (indri or ringtail runner) |
2026-02-03 18:51:57 -08:00
For ArgoCD operations, use the `argocd` CLI directly:
- `argocd app diff <service>` - Preview changes
- `argocd app sync <service>` - Deploy changes
## Reference Navigation
For AI agents building context:
2026-03-09 11:59:43 -07:00
- [Reference ](/reference/ ) - Entry point for technical details
2026-02-03 18:51:57 -08:00
- [[hosts|Host Inventory]] - What hardware exists
- [[apps|ArgoCD Apps]] - What's deployed in Kubernetes
- [[routing|Routing]] - How services are exposed
## Credential Access
Credentials live in 1Password. Never retrieve them directly - use existing patterns:
- Ansible `pre_tasks` gather secrets at playbook start
2026-02-04 07:09:28 -08:00
- [[external-secrets]] syncs to Kubernetes
2026-02-03 18:51:57 -08:00
- Scripts use `op` CLI with user biometric prompts
## Common Pitfalls
| Pitfall | Correct Approach |
|---------|------------------|
| Missing kubectl context | Always add `--context=minikube-indri` |
| Deploying without review | Create PR first, wait for user approval |
| Re-explaining reference material | Link to reference cards instead |
2026-02-23 16:19:54 -08:00
| Committing to main without classifying | Classify as C0/C1/C2 first — only C0 goes to main |
2026-02-03 18:51:57 -08:00
| Guessing at credentials | Ask user or check 1Password patterns |