Templates/HR Tech & Recruiting/Interview transcript scorer

Interview transcript scorer

Competency-rubric scoring from interview transcripts (TEXT only — never emotion/voice/facial). Spec-hash binds the rubric version per decision.

Category: classifier·Reviewer-gate: always-human·For HR Tech & Recruiting·Use-case page →

What this template is

Pattern: extractor + classifier hybrid that scores transcript answers against a rubric. CRUCIAL: text-only — no voice-tone, facial-expression, or emotion inference (AI Act Art. 5(1)(f) prohibits workplace emotion recognition from Aug 2026). Rubric (spec) is hash-committed; retroactive rubric tweaks are detectable. Reviewer-gate always-human on any negative-rubric-score competency to preserve Art. 22 meaningful-intervention posture.

The template

TypeScript · BSL-1.1 · License

import { RuntimeAISpec } from '@promethean/runtime-ai';

// IMPORTANT: this spec scores TEXT-TRANSCRIPT content only.
// Voice-tone, facial-expression, and emotion inference are
// prohibited in workplace contexts under AI Act Art. 5(1)(f) from
// Aug 2026 — do NOT add those fields to the input schema.
export const interviewScorerSpec: RuntimeAISpec = {
  specId: 'interview-scorer-v1',
  displayName: 'Interview transcript scorer',
  description:
    'Competency-rubric scoring against transcript text. No emotion / voice inference.',
  category: 'classifier',
  schemaVersion: 'promethean-runtime-ai-spec-1.0',
  canonicalForm: 'v1',

  inputSchema: {
    fields: [
      { name: 'interviewId', type: 'string', required: true,
        redaction: 'hash-only' },
      { name: 'rubricKey', type: 'string', required: true,
        maxLength: 64 },
      // Text only. Never accept audio metadata, facial cues, etc.
      { name: 'transcript', type: 'string', required: true,
        maxLength: 25_000, redaction: 'hash-only' },
    ],
  },

  outputSchema: {
    fields: [
      { name: 'competencyScores', type: 'string-list', required: true,
        maxItems: 10, maxLength: 80 },
      { name: 'overallVerdict', type: 'enum', required: true,
        enumValues: ['strong-evidence', 'partial-evidence', 'limited-evidence'] },
      { name: 'confidence', type: 'number', required: true,
        min: 0, max: 1 },
    ],
  },

  promptTemplate: {
    system:
      'Score the candidate against the rubric using ONLY the transcript content. ' +
      'Do not infer emotional state, tone, or non-verbal cues. ' +
      'Each competencyScore string: "competency-name:0-3 evidence-summary".',
    user:
      'Interview {{interviewId}}, rubric {{rubricKey}}. ' +
      'Transcript: {{transcript}}.',
  },

  modelIdentity: {
    provider: 'anthropic',
    model: 'claude-sonnet-4-5',
    version: '20250929',
  },

  reviewerGate: 'always-human',
  maxLatencyMs: 8000,
  fallbackBehavior: 'queue-for-review',
};

Regulations addressed

This template's configuration choices map to specific regulatory obligations. The substrate doesn't certify compliance — but the spec hash + reviewer-verdict + modelIdentity per L12 entry give you the evidence layer for these citations:

  • ·EU AI Act Annex III §4 — employment + workers management
  • ·EU AI Act Art. 5(1)(f) — prohibited emotion recognition (DO NOT VIOLATE)
  • ·GDPR Art. 22 — solely-automated decisions
  • ·Illinois AI Video Interview Act

See citations index for official source URLs →

Installation + usage

  1. Create a free Dev-tier workspace — API key + Ed25519 signing key issued instantly.
  2. Install the SDK: npm install https://promethean.software/runtime-ai/latest.tgz.
  3. Paste the template above into your codebase. Adjust modelIdentity + prompt for your context.
  4. Call runConstrainedAI(spec, input, { client, receiptLogPath, productId, signingKey }) from your service code. For local testing pass createMockRuntimeAIClient(spec); for production, an Anthropic / OpenAI / Azure adapter.
  5. Verify the chain with the Apache-2.0 verifier.