Skip to content

Instantly share code, notes, and snippets.

@michaelewens
Last active January 20, 2026 01:17
Show Gist options
  • Select an option

  • Save michaelewens/36cdb8baddc3f5c55c16241d31919736 to your computer and use it in GitHub Desktop.

Select an option

Save michaelewens/36cdb8baddc3f5c55c16241d31919736 to your computer and use it in GitHub Desktop.
Havelock.ai Claude Code Skill
name description version
orality-check
Analyze text for orality markers using the Havelock API. Use when the user asks to check orality, analyze text for oral/literate characteristics, or mentions "orality score" or "Havelock".
1.0.0

Orality Check Skill

Analyzes text for orality markers using the Havelock API. Returns a score from 0 (highly literate) to 1 (highly oral) with interpretation.

How to Use

The user will provide text in one of these ways:

  1. A file path to analyze
  2. Direct text in quotes or a code block
  3. Reference to content already in context

Workflow

  1. Get the text: If user provides a file path, read it. If direct text, use it as-is.

  2. Call the Havelock API:

curl -s -X POST "https://jnathan--havelock-api-havelockapi-analyze.modal.run" -H "Content-Type: application/json" -d '{"text": "TEXT_HERE", "include_chunks": true}'
  1. Parse the response which contains:

    • orality_score: 0-1 float
    • interpretation: object with mode and description
    • word_count: words processed
    • chunks_analyzed: number of 512-token chunks
    • warning: optional notice for short texts
  2. Present results using this visual format:

    ═══════════════════════════════════════════════════════
    
                             78%
                        ORALITY SCORE
    
         LITERATE ○━━━━━━━━━━━━━━━━━━━━━━━━━━━━●━━━━━ ORAL
    
         Oral — Speeches, podcasts, storytelling
    
    ═══════════════════════════════════════════════════════
    
    61 words analyzed · 1 chunk
    

    How to build the visual bar:

    • The bar has 40 characters between LITERATE and ORAL
    • Calculate position: round(score * 40)
    • Use for the line, for the score position
    • Place at position 0 (literate end)

    Score-to-label mapping:

    • 0.85-1.0: "Highly Oral — Epic verse, sermons, rhythmic speech"
    • 0.65-0.85: "Oral — Speeches, podcasts, storytelling"
    • 0.45-0.65: "Mixed — Casual blogs, opinion essays"
    • 0.25-0.45: "Literate — Journalism, formal writing"
    • 0.0-0.25: "Highly Literate — Academic works, legal documents"

    After the visual summary, optionally add brief commentary on why the text scored as it did (e.g., noting repetition, invocations, epithets for oral texts, or complex syntax and abstraction for literate texts).

Important Notes

  • No authentication required (free API)
  • For long texts, use include_chunks: true to get per-chunk analysis
  • Short texts (<100 words) may include a reliability warning
  • Escape quotes and special characters in the text before sending to API
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment