Automatizzare i controlli con gli hook

Sviluppo software con Claude Code

Dani Zysman

AI Curriculum Manager @ DataCamp

Il problema del manuale

recraft: half: Uno sviluppatore alla scrivania, stanco, esegue a mano lo stesso comando più volte

  • Gli hook si attivano quando Claude esegue un'azione specifica
  • Gli hook girano in automatico: ideali per task ripetibili
  • Gli hook impediscono di saltare passaggi critici
Sviluppo software con Claude Code

Cosa sono gli hook?

  • Strumenti:
    • Lettura/scrittura file
    • Esecuzione di un comando
  • Hook:

    • Comandi shell definiti dall'utente che girano in automatico
    • Configurati in .claude/settings.json
    • Pensali come "se succede questo, allora fai quello" per Claude Code

    Usa /hooks per elencare quelli attivi

Sviluppo software con Claude Code

Il progetto finora

music-analytics-api/
  app.py
  routes.py
  test_routes.py    
  CLAUDE.md
  .claude/
    agents/
    skills/
    settings.json    # <- Hook configuration
Sviluppo software con Claude Code

Tipi di hook e flusso

Diagramma del flusso degli hook

PreToolUse: scatta prima che lo strumento giri → Usalo per ispezionare o bloccare operazioni rischiose

PostToolUse: scatta dopo il completamento → Usalo per test, linting o logging dei risultati

Sviluppo software con Claude Code

Configurare un hook

{
  "hooks": {
    "PostToolUse": [
      {
        "matcher": "Write|Edit",
        "hooks": [
          {
            "type": "command",
            "command": "cd $CLAUDE_PROJECT_DIR && python -m pytest --tb=short -q"
          }
        ]
      }
    ]
  }
}
Sviluppo software con Claude Code

Acquisire l'output degli hook

def pytest_terminal_summary(terminalreporter, exitstatus, config):
    passed = len(terminalreporter.stats.get('passed', []))
    failed = len(terminalreporter.stats.get('failed', []))

    if failed:
        title = "pytest FAILED"
        message = f"{failed} failed {passed} passed"
    else:
        title = "pytest PASSED"
        message = f"All {passed} tests passed!"

    with open("/tmp/pytest_results.log", "a") as f:
        f.write(f"{title}: {message}\n")
Sviluppo software con Claude Code

Log output degli hook

[23:07:35] pytest FAILED: ❌; 2 failed, 15 passed

[23:07:38] pytest PASSED: ✅ All 17 tests passed!

[23:08:09] pytest PASSED: ✅ All 17 tests passed!

[23:08:12] pytest PASSED: ✅ All 17 tests passed!

Sviluppo software con Claude Code

Quando usare gli hook

Diagramma decisionale su quando usare gli hook

  • Buoni candidati:
    • Test dopo modifiche ai file
    • Controlli di linting
    • Blocchi di sicurezza
Sviluppo software con Claude Code

Riepilogo del Capitolo 2

Funzionalità Invoca Elenca Percorso config
Agent @agent-name /agents .claude/agents/name.md
Skill /skill-name /skills .claude/skills/name/SKILL.md
Hook (automatico) /hooks .claude/settings.json
Sviluppo software con Claude Code

Esercitiamoci!

Sviluppo software con Claude Code

Preparing Video For Download...