惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

D
DataBreaches.Net
罗磊的独立博客
M
MIT News - Artificial intelligence
G
Google Developers Blog
V
V2EX
D
Docker
博客园_首页
The Cloudflare Blog
人人都是产品经理
人人都是产品经理
Y
Y Combinator Blog
WordPress大学
WordPress大学
T
Tailwind CSS Blog
博客园 - 司徒正美
J
Java Code Geeks
L
LangChain Blog
博客园 - 三生石上(FineUI控件)
B
Blog RSS Feed
博客园 - 【当耐特】
小众软件
小众软件
Apple Machine Learning Research
Apple Machine Learning Research
大猫的无限游戏
大猫的无限游戏
P
Proofpoint News Feed
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
博客园 - Franky

DEV Community

Authentication Security Deep Dive: From Brute Force to Salted Hashing (With Java Examples) Why AI Systems Don’t Fail — They Drift Spilling beans for how i learn for exam😁"Reinforcement Learning Cheat Sheet" I Replaced Chrome with Safari for AI Browser Automation. Here's What Broke (and What Finally Worked) How Python Borrows Other People's Work The $40 Architecture: Processing 1 Billion API Requests with 99.99% Uptime Vibe Coding: A Workflow Guide (From Zero to SaaS) Most webhook security guides protect the wrong side. The scary part is delivery. Headless CMS for TanStack Start: Build a Blog with Cosmic EU Age Verification App "Hacked in 2 Minutes" — What Actually Happened Comfy Cloud’s delete function does not actually remove files Running AI Models on GPU Cloud Servers: A Beginner Guide Event-driven media intelligence with AWS Step Functions and Bedrock I scored 500 AI prompts across 8 quality dimensions — here's what broke How to Call Google Gemini API from Next.js (Free Tier, No Backend Needed) The Portal Protocol: Reclaiming Human Connection in the Age of AI How to Fix Your Team's Scattered Knowledge Problem With a Self-Hosted Forum Intro to tc Cloud Functors: A Graph-First Mental Model for the Modern Cloud Designing Multi-Tenant Backends With Both Ownership and Team Access I Built a Neumorphic CSS Library with 77+ Components — Here's What I Learned PostgreSQL Performance Optimization: Why Connection Pooling Is Critical at Scale Cómo construí un SaaS multi-rubro para gestionar expensas en Argentina con FastAPI + Vue 3 🚀 I Built an Ethical Hacking Scanner Tool – Open Source Project I Replaced /usage and /context in Claude Code With a Single Statusline A Pythonic Way to Handle Emails (IMAP/SMTP) with Auto-Discovery and AI-Ready Design I Collected 8.9 Million Polymarket Price Points — Here's What I Found About How Markets Really Move EcoTrack AI — Carbon Footprint Tracker & Dashboard Everyone's Using AI. No One Agrees How. 5 self-hosted ebook managers worth trying in 2026 Building Your First AI Agent with LangChain: From Chatbot to Autonomous Assistant
Interview Protocol as Code: Standardizing Technical Hirin...
Veríssimo Ca · 2026-04-27 · via DEV Community

This is a submission for the OpenClaw Challenge.

What I Built

Every hiring manager has lived this: you interview five candidates for the same senior role and walk away with five wildly different assessment notes. One interviewer probes systems thinking. Another focuses on pure technical breadth. A third ranks personality fit. You have five hours of interviews and no systematic way to compare them.

I built interview_agent - an OpenClaw skill that standardizes the technical interview into a repeatable, machine-readable process. You give it a job description. It generates targeted questions, asks them one at a time, scores each answer against explicit criteria, and produces a hire/no-hire with the evidence backing it.

The skill has five sequential modes:

Mode What it does
1 - Job Analysis Parses job description, extracts core skills, flags risk areas, infers seniority
2 - Interview Plan Builds a question roadmap with time estimates and scoring rubric
3 - Live Interview Asks questions one by one; adapts the next question based on gaps observed
4 - Answer Evaluation Scores the response with evidence across three dimensions (technical, behavioral, domain depth)
5 - Final Report Synthesizes scores and delivers hire/no-hire with confidence level

The entire implementation is a single Markdown file. No backend. No database. No deployment nonsense.

I forked DioAugust/ws_dio_entrevistador and made four concrete changes:

  1. Bilingual (PT / EN) - The skill detects whether your job description is in Portuguese or English and responds in kind. You can also switch mid-session by saying "switch to English". This was a practical necessity: tech teams in Brazil run internal interviews in Portuguese but screen candidates with English-only résumés.

  2. Three-part scoring - Instead of a single global score, every candidate gets three sub-scores: tecnico (raw technical skill), comportamental (communication, collaboration), and dominio (depth in the specific domain). A candidate can be technically excellent but inarticulate, or vice versa. One number hides that truth.

  3. Adaptive questions - During the live interview, if a candidate skips a critical topic (like observability or incident response), the next question deliberately targets that gap. You're not reading from a fixed script; you're drilling down on what matters.

  4. Machine-readable outputs - Added fields like idioma_principal, dificuldade_estimada, and feedback_sugestao so the JSON can be consumed downstream: fed into a hiring dashboard, sent to a candidate with constructive feedback, or piped into a hiring tracking system.

Full change log: ATTRIBUTION.md

How I Used OpenClaw

An interview is a state machine: you're always somewhere in a defined sequence. OpenClaw's skill architecture maps to that exactly. I didn't write state management code or API wiring. I wrote the protocol itself in Markdown, and the framework executed it.

Stack:

  • Runtime: ghcr.io/openclaw/openclaw:latest (Docker)
  • Model: Gemini 2.5 Flash
  • Skill: ./skills/interview-agent/SKILL.md
  • UI: localhost:18789

Why it worked: The friction mattered. In the first week, I rewrote prompts 50+ times. Each iteration: edit the file, refresh the browser. No build. No deploy. That velocity let me test scoring rubrics, question phrasing, and JSON schemas fast enough to actually learn what works.

Demo

Repository: github.com/vec21/ws_dio_entrevistador

Run it:

git clone https://github.com/vec21/ws_dio_entrevistador
cd ws_dio_entrevistador
# Add your GOOGLE_API_KEY to docker-compose.yml
docker compose up -d
# Open http://localhost:18789

Enter fullscreen mode Exit fullscreen mode


Mode 1 - Job Analysis

You provide (Portuguese job description):

Use the skill interview_agent to analyze this job posting as JSON:

Senior Backend Engineer - Fintech
Responsibilities:
- Critical payment APIs
- Event-driven microservices
- Observability and reliability

Requirements: Go or Kotlin, Kafka, AWS

Enter fullscreen mode Exit fullscreen mode

The skill responds with:

{
  "job_title": "Senior Backend Engineer",
  "seniority": "senior",
  "primary_language": "pt",
  "technical_skills": ["Go/Kotlin", "Kafka", "AWS", "Observability"],
  "risk_flags": ["payment systems domain expertise required", "high fault tolerance expected"],
  "estimated_difficulty": "high"
}

Enter fullscreen mode Exit fullscreen mode


Mode 4 - Answer Evaluation

You ask a question and the candidate responds:

Question: Tell me about a critical backend system you built.

Candidate response: I implemented idempotency keys, retries with exponential backoff,
database transactions, and latency/error metrics on a payments API.

Enter fullscreen mode Exit fullscreen mode

The skill evaluates:

{
  "overall_score": 4,
  "sub_scores": {
    "technical": 5,
    "behavioral": 4,
    "domain_knowledge": 3
  },
  "positive_signals": ["idempotency correctly applied", "retry strategy with exponential backoff", "latency and error metrics instrumented"],
  "missing_signals": ["no incident response discussion", "missing scale and SLA context"],
  "suggested_feedback": "Ask about the biggest failure that occurred in this system and how recovery was handled."
}

Enter fullscreen mode Exit fullscreen mode

The technical_knowledge score is high (idempotency + backoff are exactly right). But domain_knowledge is lower because describing a system without discussing failure modes or scale shows incomplete mastery of fintech reliability concerns. The feedback note guides the next question.

What I Learned

1. Constraints force rigor.

I started with a single global score. Disaster. Two candidates would score the same "3" but for opposite reasons: one brilliant at systems but inarticulate; the other articulate but shallow on design. I split into three scores and suddenly I could see clearly. The score becomes evidence, not a guess.

2. Flow beats features.

The single biggest quality lever wasn't smarter prompts or longer context windows. It was the flow: asking one question at a time, letting the candidate think, adapting the next question based on what you just learned. It feels like a conversation. It is a conversation. But underneath there's explicit structure. That combination-natural flow + explicit criteria-is what makes interviews repeatable and fair.

3. Multilingual means redesigning, not translating.

I could have run Portuguese prompts through a translator. Instead I rewrote them from first principles in Portuguese. Because "leverage" is a loan word in Portuguese that carries different weight. Because what counts as "senior" differs culturally. Designing for two languages forced me to articulate what I was actually measuring instead of hiding behind vague English jargon.

ClawCon Michigan

I did not attend ClawCon Michigan.