Inspiration

AI coding agents like Claude Code can keep working without making progress. They may repeat failing commands, try the same approach again, or reach a decision that needs human judgment. Meanwhile, risky actions—like force-pushing over a teammate’s work—can happen when no one is watching.

We wanted to make it possible to step away without giving up control. Inspired by the hackathon’s security-guard theme, we built Graveyard Shift: a night guard for working AI agents.

What it does

Graveyard Shift watches Claude Code’s actions and recent results. Deterministic checks catch repeated failures, loops, and selected risky actions. When a problem needs interpretation, Google Gemini examines the task and available evidence, then recommends whether the agent should continue, try another approach, or ask the user.

Gemini advises; it does not approve consequential actions. When human judgment is needed, Graveyard Shift holds the proposed action and sends a briefing through Telegram. The user can ask what happened, reject the action, stop the task, or send guidance in their own words. Guidance remains separate from approval. An approval applies only to the exact held action, and expired or duplicate decisions cannot authorize it later.

With the Voiskey keyboard in Telegram, users can dictate guidance, review the text, and tap Send. For example: “Don’t push. Fix the discount math and rerun the tests.” Graveyard Shift passes the guidance back to Claude; a dictated reply is not treated as approval.

For an independent review, users can export candidate files, acceptance criteria, tests, and a SHA-256 content manifest. A Grok Bot checks that snapshot on its own computer and returns a report. Graveyard Shift checks that the report corresponds to the exported snapshot. This export and import process is manual in the current version.

How we built it

We built the terminal adapter in Node.js around Claude Code hook events. It records recent actions, applies deterministic checks, and uses bounded Gemini requests when interpretation is needed.

Pending decisions are stored locally. Telegram replies are associated with the configured owner, session, and decision. Questions leave the proposed action held; guidance preserves the user’s original words and conditions. Approval is handled separately and is limited to one exact action.

The repository also includes a browser sandbox, replay interface, and controlled failure scenarios for testing supervision behavior.

Challenges

The hardest part was deciding what a reply actually authorizes.

“Yes, if the tests pass” is conditional guidance, not unconditional approval. A successful tool call does not necessarily mean the task made progress, and a model recommendation is not proof that a repair works.

We also had to handle expired decisions, duplicate Telegram updates, failed delivery, and Stop instructions received during interpretation. These cases shaped how we separated model reasoning from enforced policy.

What we verified

We exercised real Gemini responses, Telegram conversations, Voiskey dictation, and the flow for selecting Grok-authored guidance. An actual Grok Bot checked defective and corrected fixture snapshots against unchanged acceptance tests. The implementation has 91 passing guard tests.

The current demonstration uses synthetic coding events and explicit test fixtures. Authenticated Claude Code continuation remains unverified. GrokBot file transfer is manual, and its proposed repair has not yet received a new structured verification.

What we learned and what comes next

Reliable supervision needs evidence, clear boundaries, and an honest explanation of when human judgment is required.

Next, we want to verify native Claude Code continuation, automate the GrokBot handoff, strengthen long-running recovery, and expand spending controls. Our goal is to help agents keep making useful progress while keeping people informed and in control.

Built With

Share this project:

Updates

Submission history