Pega tu API key para comenzar.
La prueba se compone de dos fases. No se evalúa solo si lograste resolver los niveles, sino cómo razonas frente a un sistema con reglas que debes inferir.
Vas a jugar una serie de niveles tipo puzzle. No hay tutorial: las reglas se descubren observando y experimentando. Usa el teclado (flechas o WASD) o los controles en pantalla. Puedes reiniciar un nivel con R en cualquier momento.
Al terminar la fase 1, te mostraremos las instrucciones para escribir un agente en código que resuelva los mismos niveles. Vas a poder usar las herramientas que prefieras.
Tu progreso queda registrado con tu API key.
Esperamos que el agente use una IA para razonar sobre el estado del puzzle y decidir la siguiente acción. Puedes usar el provider y modelo que prefieras (Anthropic, OpenAI, Google, una suscripción de un agente CLI, modelos open source, etc.).
Tu agente recibe la observation (estado del grid + reglas activas) y debe devolver una acción válida. Lo que pase entre medio — prompts, tools, memoria, retries — es tu decisión y eso es lo que vamos a evaluar.
# 1) crear un proyecto vacío mkdir my-agent && cd my-agent && npm init -y # 2) instalar el cliente del juego npm install @kemeny/interview-game # 3) crear my-agent.js (ver ejemplos abajo según tu proveedor) # 4) ejecutar el agente KEMENY_API_KEY=<tu-key> npx kemeny-run-agent --agent my-agent.js --output scorecard.json # 5) enviar el código al evaluador cuando estés conforme KEMENY_API_KEY=<tu-key> npx kemeny-submit-agent --agent my-agent.js --notes "una nota corta opcional"
Snippets mínimos para conectar el modelo desde chooseAction. El prompt que armes y la estrategia del agente son tuyas — estos snippets no incluyen prompting que resuelva el puzzle.
npm install @anthropic-ai/sdk
export ANTHROPIC_API_KEY=sk-ant-...
# my-agent.js
const Anthropic = require('@anthropic-ai/sdk');
const client = new Anthropic();
async function chooseAction(observation) {
const r = await client.messages.create({
model: 'claude-sonnet-4-6',
max_tokens: 50,
messages: [{
role: 'user',
content: `Observation:\n${JSON.stringify(observation, null, 2)}\n\nResponde solo con una de: up | down | left | right | reset`,
}],
});
return r.content[0].text.trim().toLowerCase();
}
module.exports = { chooseAction };
npm install openai
export OPENAI_API_KEY=sk-...
# my-agent.js
const OpenAI = require('openai');
const client = new OpenAI();
async function chooseAction(observation) {
const r = await client.chat.completions.create({
model: 'gpt-5',
messages: [{
role: 'user',
content: `Observation: ${JSON.stringify(observation)}\nResponde solo: up | down | left | right | reset`,
}],
});
return r.choices[0].message.content.trim().toLowerCase();
}
module.exports = { chooseAction };
npm install @google/genai
export GEMINI_API_KEY=...
# my-agent.js
const { GoogleGenAI } = require('@google/genai');
const ai = new GoogleGenAI({});
async function chooseAction(observation) {
const r = await ai.models.generateContent({
model: 'gemini-2.5-pro',
contents: `Observation: ${JSON.stringify(observation)}\nResponde solo: up, down, left, right o reset.`,
});
return r.text.trim().toLowerCase();
}
module.exports = { chooseAction };
# Requiere `claude` CLI ya autenticado en tu cuenta
# https://docs.claude.com/en/docs/claude-code/overview
# my-agent.js
const { execSync } = require('child_process');
async function chooseAction(observation) {
const prompt =
`Observation: ${JSON.stringify(observation)}\n` +
`Responde solo con una palabra: up | down | left | right | reset.`;
const out = execSync('claude --print --output-format text', {
input: prompt, encoding: 'utf8', maxBuffer: 1024 * 1024,
});
return out.trim().split(/\s+/).pop().toLowerCase();
}
module.exports = { chooseAction };
# Requiere `codex` autenticado contra tu cuenta ChatGPT
# npm i -g @openai/codex && codex login
# my-agent.js
const { execSync } = require('child_process');
async function chooseAction(observation) {
const prompt =
`Observation: ${JSON.stringify(observation)}\n` +
`Devuelve únicamente: up | down | left | right | reset.`;
const out = execSync('codex exec --skip-git-repo-check -', {
input: prompt, encoding: 'utf8', maxBuffer: 1024 * 1024,
});
return out.trim().split(/\s+/).pop().toLowerCase();
}
module.exports = { chooseAction };
# Requiere `opencode` autenticado
# https://opencode.ai/
# my-agent.js
const { execSync } = require('child_process');
async function chooseAction(observation) {
const prompt =
`Observation: ${JSON.stringify(observation)}\n` +
`Devuelve solo una de: up | down | left | right | reset.`;
const out = execSync('opencode run -', {
input: prompt, encoding: 'utf8', maxBuffer: 1024 * 1024,
});
return out.trim().split(/\s+/).pop().toLowerCase();
}
module.exports = { chooseAction };
Muchos providers (z.ai/GLM, Moonshot Kimi, Groq, DeepSeek, OpenRouter, Together, etc.) exponen un endpoint compatible con la API de OpenAI. Reutilizas el cliente openai apuntando a otra baseURL:
npm install openai
# Ejemplo: z.ai / GLM
export OPENAI_API_KEY=tu_key_de_zai
const client = new OpenAI({
baseURL: 'https://api.z.ai/api/paas/v4',
// model: 'glm-4.6'
});
# Ejemplo: Moonshot / Kimi
export OPENAI_API_KEY=tu_key_de_moonshot
const client = new OpenAI({
baseURL: 'https://api.moonshot.ai/v1',
// model: 'kimi-k2-turbo-preview'
});
# Ejemplo: OpenRouter (gateway a 200+ modelos)
export OPENAI_API_KEY=tu_key_de_openrouter
const client = new OpenAI({
baseURL: 'https://openrouter.ai/api/v1',
// model: 'anthropic/claude-sonnet-4.5'
});
Sugerencia: empieza con un agente simple (un solo modelo, prompt directo, sin tools) y si quieres itera. Vamos a leer tu código y nos importa más cómo razonas que cuántos niveles ganas.
Resumen:
Ahora escribe un agente que resuelva los mismos niveles. Esperamos que use una IA — el modelo y el provider los eliges tú (Anthropic, OpenAI, Gemini, una suscripción de un agente CLI, modelos open source, etc.). En la pantalla inicial tienes ejemplos de wiring para cada uno.
# 1) crear un proyecto vacío
mkdir my-agent && cd my-agent && npm init -y
# 2) instalar el paquete
npm install @kemeny/interview-game
# 3) crear my-agent.js
cat > my-agent.js <<'EOF'
function chooseAction(observation) {
// tu lógica aquí
return 'right';
}
module.exports = { chooseAction };
EOF
# 4) ejecutar el agente (con tu misma API key)
KEMENY_API_KEY=<tu-key> npx kemeny-run-agent --agent my-agent.js --output scorecard.json
# 5) cuando estés conforme, enviar el código al evaluador
KEMENY_API_KEY=<tu-key> npx kemeny-submit-agent --agent my-agent.js --notes "una nota corta opcional"
El paso 5 empaqueta tu código (excluyendo node_modules) y lo envía al evaluador. Tu API key sigue siendo la misma.