Skip to content
Back to skills

Pong

ASecurity

Design and verify Jev's paddle-defense courts in OpenHarness's viewer, where Jev keeps a rally alive and loses it as the ball accelerates.

  • 1,124 stars
  • 0 votes
  • 0 copies
  • 0 views
  • Added September 23, 2026
ai-agentsgobashnodeapi

Works with

  • cli
  • api

Security analysis

A100/100

Scanned September 23, 2026

npx -y skills add autonomous-ai/openharness --skill pong --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Pong?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for Pong
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/autonomous-ai-pong/badge)](https://www.skillsdirectory.com/skills/autonomous-ai-pong)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
SKILL.md
---
name: jev-pong
description: Design and verify Jev's paddle-defense courts in OpenHarness's viewer, where Jev keeps a rally alive and loses it as the ball accelerates.
---

# Jev Pong court design

Jev Pong simulates a paddle-defense rally: Jev (TypeSafe's System One model) reads the ball's
position and velocity every tick and moves the paddle to meet the return. Each hit speeds the ball
up, so a long rally outruns the paddle. The agent shapes `pong.json` — the court, the paddle's
authority, and the starting ball speed.

## The loop

1. Update `pong.json` (title, courtW/courtH, speed, maxSpeed, accel, and a `style` line that tells
   Jev a strategy). The viewer watches it and Jev adapts live — no restart, no second server.
2. `node "$JEV_DSH/toolchain/check.mjs"` verifies the workspace's `pong.json` is valid. Run it
   before you call a court done.
3. Watch the rally. Does Jev return a few balls, speed the ball up, and *sometimes* drop it — or
   never miss (too easy) / always drop (too hard)? That observation is the finding.

## Reading the court

The viewer shows the court, five ghost paddles lit by the probability of each move, a ring where
the ball will cross Jev's wall, the paddle's remaining reach, a pace meter with the pace where the
paddle is outrun, the text Jev reads, and a bar for every finished rally. Good courts produce a natural arc:
Jev holds a few returns, the ball accelerates, Jev scrambles harder, and it finally slips past.
`speed` sets the serve pace; `accel` controls how fast each rally runs away; `maxSpeed` is how far
a plain paddle move goes per decision (a FAST move goes twice as far).

## Verifying a court

`node "$JEV_DSH/toolchain/check.mjs"` returns non-zero when `pong.json` is invalid (no title, or
a value outside its range, for example `speed` 1..60 or `stepMs` 30..2000). It also prints the pace
past which a far ball is out of the paddle's reach. It doesn't replace watching the motion:
confirm Jev holds a low speed comfortably, that raising `speed` or `accel` shortens rallies and
raises the miss count, and that the style line shifts how decisively it moves.

## Driving Jev yourself

`toolchain/jev.mjs` exports a small client. Example (from the workspace) — ask Jev's read on a
state before you commit to a court:

```bash
node --input-type=module -e '
import { evaluate, jev } from "$JEV_DSH/toolchain/jev.mjs";
const res = await evaluate({
  state: "Keep the rally alive.\nYou are the paddle on the left wall of a 200x120 court. y 0 is the top, y grows downward.\npaddle: centre y 50.0, half-height 13.0, face at x 8\npaddle speed: a plain move shifts it 2.0 per decision, a FAST move 4.0 per decision\nball: x 40.0  y 70.0  vx -6.0  vy 2.0  radius 3  (toward you)\nspeed: 6.0 per decision   rally: 0",
  questions: {
    move: jev.choice(["MOVE_UP_FAST", "MOVE_UP", "HOLD", "MOVE_DOWN", "MOVE_DOWN_FAST"], "Which paddle move keeps the rally alive?"),
  },
});
console.log(JSON.stringify(res.answers, null, 2));
'
```

Without `TYPESAFE_API_KEY` this uses the deterministic mock; set the key to hit live Jev.

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments

Loading comments…