alto-dev-guide
Use when developing ALTO itself - editing devenv.nix, hooks/*.py, agents/*.md, or checking Claude Code hook/agent syntax. Reference guide with documentation URLs and patterns.
Best use case
alto-dev-guide is best used when you need a repeatable AI agent workflow instead of a one-off prompt.
Use when developing ALTO itself - editing devenv.nix, hooks/*.py, agents/*.md, or checking Claude Code hook/agent syntax. Reference guide with documentation URLs and patterns.
Teams using alto-dev-guide should expect a more consistent output, faster repeated execution, less prompt rewriting.
When to use this skill
- You want a reusable workflow that can be run more than once with consistent structure.
When not to use this skill
- You only need a quick one-off answer and do not need a reusable workflow.
- You cannot install or maintain the underlying files, dependencies, or repository context.
Installation
Claude Code / Cursor / Codex
Manual Installation
- Download SKILL.md from GitHub
- Place it in
.claude/skills/alto-dev-guide/SKILL.mdinside your project - Restart your AI agent — it will auto-discover the skill
How alto-dev-guide Compares
| Feature / Agent | alto-dev-guide | Standard Approach |
|---|---|---|
| Platform Support | Not specified | Limited / Varies |
| Context Awareness | High | Baseline |
| Installation Complexity | Unknown | N/A |
Frequently Asked Questions
What does this skill do?
Use when developing ALTO itself - editing devenv.nix, hooks/*.py, agents/*.md, or checking Claude Code hook/agent syntax. Reference guide with documentation URLs and patterns.
Where can I find the source code?
You can find the source code on GitHub using the link provided at the top of the page.
Related Guides
SKILL.md Source
# ALTO Development Guide
Reference for developing ALTO. Use URLs for authoritative docs, summaries for quick reference.
---
## Devenv MCP (always available)
ALTO configures the devenv MCP server automatically. Use it for:
- **Package search** - Find packages and their configuration options
- **Config understanding** - Understand devenv syntax and patterns
- **Config generation** - Generate valid devenv configurations
The MCP is available as `devenv` server. Use MCP tools to query it when you need:
- What packages are available for a language/tool
- How to configure a specific service
- Valid options for a devenv setting
---
## Documentation Sources
### Devenv (authoritative)
| Topic | URL |
|-------|-----|
| All options | https://devenv.sh/reference/options/ |
| Scripts | https://devenv.sh/reference/options/#scripts |
| Tasks | https://devenv.sh/reference/options/#tasks |
| Imports | https://devenv.sh/composing-using-imports/ |
| Claude Code integration | https://devenv.sh/integrations/claude-code/ |
### Claude Code (authoritative)
| Topic | URL |
|-------|-----|
| Hooks reference | https://code.claude.com/docs/en/hooks |
| Subagents | https://code.claude.com/docs/en/sub-agents |
| Skills | https://code.claude.com/docs/en/skills |
| CLI reference | https://code.claude.com/docs/en/cli-reference |
| Settings | https://code.claude.com/docs/en/settings |
### Community resources
| Topic | URL |
|-------|-----|
| Full stack overview | https://alexop.dev/posts/understanding-claude-code-full-stack/ |
| Hooks mastery | https://github.com/disler/claude-code-hooks-mastery |
| Config showcase | https://github.com/ChrisWiles/claude-code-showcase |
---
## Devenv Quick Reference
### Scripts
```nix
scripts.<name> = {
exec = ''
echo "script body"
'';
description = "Shown in devenv info";
};
```
- Available as commands in shell
- Use `${variable}` for nix interpolation
- Use `''$` to escape `$` in bash
### Tasks
```nix
tasks."namespace:name" = {
exec = ''
echo "task body"
'';
before = [ "devenv:enterShell" ]; # Run before shell entry
# after = [ "other:task" ]; # Run after another task
};
```
- Run automatically on shell entry (if `before` includes enterShell)
- Good for setup/deployment that should happen every time
### Native Imports (not flakes)
```yaml
# devenv.yaml
inputs:
alto:
url: github:gonzaloetjo/alto
flake: false # Critical: native import mode
imports:
- alto # References the input name
```
- `flake: false` = use devenv's native import system
- ALTO activates on import, configure with `alto.orchestrator`
---
## Claude Code Quick Reference
### Hook Types
| Type | When | Can Block | Receives |
|------|------|-----------|----------|
| SessionStart | Session begins | No | `{session_id, resume}` |
| PreToolUse | Before tool runs | Yes | `{tool, input, ...}` |
| PostToolUse | After tool runs | No | `{tool, result, ...}` |
| Stop | Session ends | No | `{session_id, ...}` |
| SubagentStop | Agent completes | No | `{agent, ...}` |
| Notification | Claude notifies | No | `{message, ...}` |
| PermissionRequest | Permission asked | Yes | `{tool, ...}` |
### Hook Configuration (devenv)
```nix
claude.code.hooks.<name> = {
hookType = "PostToolUse"; # Required
matcher = "Bash"; # Tool name, or "*" for all
command = "python3 \"$CLAUDE_PROJECT_DIR\"/.claude/hooks/script.py";
};
```
### Hook Script Pattern
```python
#!/usr/bin/env python3
import json, sys, os
from pathlib import Path
def main():
hook_data = json.load(sys.stdin)
project_dir = Path(os.environ.get("CLAUDE_PROJECT_DIR", "."))
# Do work...
# For SessionStart: print context for Claude to see
print("Context message")
if __name__ == "__main__":
main()
```
### Agents (devenv)
```nix
claude.code.agents.<name> = {
description = "Shown when listing agents";
tools = [ "Read" "Edit" "Bash" "Grep" "Glob" "WebFetch" ];
model = "opus"; # or "sonnet", "haiku"
prompt = ''
Agent system prompt here.
This defines behavior, not user request.
'';
};
```
### Available Tools
`Read`, `Write`, `Edit`, `Bash`, `Grep`, `Glob`, `LS`, `WebFetch`, `WebSearch`, `Task`, `TodoWrite`, `AskUserQuestion`
### Skills
Place `SKILL.md` in `.claude/skills/<name>/`
- Invoked with `/<skill-name>` or automatically by context
- Content is instructions for Claude
### MCP Servers
```nix
claude.code.mcpServers.<name> = {
type = "stdio"; # or "http"
command = "devenv";
args = [ "mcp" ];
env = { DEVENV_ROOT = "."; };
};
```
### Permissions
```nix
claude.code.permissions = {
Bash = {
allow = [ "git:*" "npm:*" ];
deny = [ "rm -rf:*" "sudo:*" ];
};
Read = {
deny = [ ".env" "secrets/**" ];
};
};
```
---
## ALTO File Reference
| What | Where | Purpose |
|------|-------|---------|
| Module options | `devenv.nix` -> `options.alto` | All configurable settings |
| Scripts | `devenv.nix` -> `scripts.*` | Shell commands |
| Deploy task | `devenv.nix` -> `tasks."alto:deploy"` | File deployment |
| Agent configs | `devenv.nix` -> `claude.code.agents` | Agent wiring |
| Hook configs | `devenv.nix` -> `claude.code.hooks` | Hook wiring |
| Agent prompts | `agents/*.md` | Agent behavior |
| Hook logic | `hooks/*.py` | Hook implementation |
| Skills | `skills/*/SKILL.md` | Skill content |
| Setup orchestrator | `templates/CLAUDE.md.setup` | Human-interactive mode |
| Build orchestrator | `templates/CLAUDE.md.build` | Autonomous mode |
| Dev orchestrator | `templates/CLAUDE.md.dev` | ALTO development mode |
| User template | `templates/default/` | `nix flake init` output |
| Architecture | `ARCHITECTURE.md` | Design docs |
---
## Testing Workflows
### Fresh install
```bash
mkdir /tmp/test && cd /tmp/test
nix --extra-experimental-features 'nix-command flakes' flake init -t github:gonzaloetjo/alto --refresh
devenv shell
# Check: ls .claude/ runs/ CLAUDE.md
```
### Local development
```yaml
# test project's devenv.yaml - use local path
imports:
- /absolute/path/to/alto
```
Then `devenv shell` to rebuild with local changes.
### Verify deployment
```bash
ls -la .claude/agents/ # Symlinks to nix store
ls -la .claude/hooks/ # Python files
cat runs/state.json # ALTO state
cat .claude/settings.json # Permissions + hooks
```
---
## Common Issues
| Problem | Solution |
|---------|----------|
| jq escaping in nix | Use `echo "$(jq ...)"` not complex jq strings |
| Changes not applied | Run `devenv shell` again |
| Remote changes not applied | Use `--refresh` flag |
| Hook not running | Check settings.json, verify hookType matches |
| Files read-only | Expected - nix store symlinks |
### Nix String Escaping (`''` strings)
- `''$` -> `$` (escape dollar)
- `'''` -> `''` (escape quotes)
- `\n` -> literal `\n` (not newline)
- Use actual newlines for line breaksRelated Skills
assessment-guide
Comprehensive guide for skill assessment, career evaluation, learning paths, knowledge testing, and professional development. Use when assessing technical skills, planning learning journeys, or evaluating career progress.
Onboarding Guide Generator
Generate onboarding guides for new team members based on project structure
documentation-guidelines
Write or update backend feature documentation that follows a repo's DOCUMENTATION_GUIDELINES.md (or equivalent) across any project. Use when asked to create/update module docs, API contracts, or backend documentation that must include architecture, endpoints, payloads, Mermaid diagrams, and seeding instructions.
developer-guidelines
Guidelines for the Developer role: strict adherence, no unsolicited refactoring, documentation, security.
cursor-desktop-guide
Guide for using Cursor desktop features including AGENTS.md, Rules, Skills, Commands, Subagents, MCP, and Hooks. Use when the user asks about Cursor configuration, features, or how to set up the IDE environment.
artifact-guidelines
Guidelines for writing reports, organizing files, and generating code artifacts
android-service-account-guide
Step-by-step guide for creating Google Cloud service account for Play Store API access
devops-guide
Comprehensive DevOps and infrastructure guide covering Docker, Kubernetes, AWS, Terraform, CI/CD pipelines, Linux, and cloud deployment strategies. Use when setting up infrastructure, automation, or deployment systems.
web-design-guidelines
Review UI code for Web Interface Guidelines compliance. Use when asked to "review my UI", "check accessibility", "audit design", "review UX", or "check my site against best practices".
vibecoder-guide-legacy
Guides VibeCoder (non-technical users) through natural language development (legacy). Use when user mentions どうすればいい, 次は何, 使い方, 困った, help, what should I do. Do NOT load for: 技術者向け作業, 直接的な実装指示, レビュー.
vercel-web-design-guidelines
Reviews UI code for compliance with web interface best practices. Use when auditing accessibility, reviewing UI/UX patterns, checking performance, or improving web design quality. Triggers on "check my site", "audit design", "accessibility review", "UX best practices", or UI code review tasks. Covers 100+ rules for accessibility, performance, and user experience.
swift-human-guidelines
Comprehensive Swift 6 and SwiftUI development guidelines for building iOS 26, iOS 18, iPadOS, macOS, watchOS, visionOS, and tvOS applications. Covers Foundation Models API, BGContinuedProcessingTask, Call Translation API, Liquid Glass design system, data-race safety, typed throws, synchronization primitives, SwiftUI/UIKit interoperability, zoom transitions, and document-based apps. Use when building new Apple platform apps, implementing Apple Intelligence features, optimizing performance with Swift 6 concurrency, following Apple Human Interface Guidelines, creating cross-platform applications, or working with iOS 26/18 APIs. Triggers on Swift code, SwiftUI views, Xcode projects, app architecture, background processing, translation features, Foundation Models, synchronization, actors, Sendable types, or modern Apple platform development.