# Crucible First Cut

This is the first narrow neuro-symbolic slice for Timmy.

## Goal

Prove constraint logic instead of bluffing through it.

## Shape

The Crucible is a sidecar MCP server that lives in `timmy-config` and deploys into `~/.hermes/bin/`.
It is loaded by Hermes through native MCP discovery. No Hermes fork.

## Templates shipped in v0

### 1. schedule_tasks
Use for:
- deadline feasibility
- task ordering with dependencies
- small integer scheduling windows

Inputs:
- `tasks`: `[{name, duration}]`
- `horizon`: integer window size
- `dependencies`: `[{before, after, lag?}]`
- `max_parallel_tasks`: integer worker count

Outputs:
- `status: sat|unsat|unknown`
- witness schedule when SAT
- proof log path

### 2. order_dependencies
Use for:
- topological ordering
- cycle detection
- dependency consistency checks

Inputs:
- `entities`
- `before`
- optional `fixed_positions`

Outputs:
- valid ordering when SAT
- contradiction when UNSAT
- proof log path

### 3. capacity_fit
Use for:
- resource budgeting
- optional-vs-required work selection
- capacity feasibility

Inputs:
- `items: [{name, amount, value?, required?}]`
- `capacity`

Outputs:
- chosen feasible subset when SAT
- contradiction when required load exceeds capacity
- proof log path

## Demo

Run locally:

```bash
~/.hermes/hermes-agent/venv/bin/python ~/.hermes/bin/crucible_mcp_server.py selftest
```

This produces:
- one UNSAT schedule proof
- one SAT schedule proof
- one SAT dependency ordering proof
- one SAT capacity proof

## Scope guardrails

Do not force every answer through the Crucible.
Use it when the task is genuinely constraint-shaped.
If the problem does not fit one of the templates, say so plainly.
