The House Is Becoming a Room Full of Agents
Field note · AI systems
A refrigerator, thermostat, and energy meter already expose enough signals to support reports, analytics, and controlled actions. An agent harness can connect them without replacing the devices.
The test: Can a harness explain what happened, show its evidence, ask for approval, and record the result?
3:12 PM on a Tuesday
The thermostat sees an empty house. The electric vehicle remains plugged in at 38 percent. The home battery holds 52 percent. The utility feed shows a higher rate at 4:00 PM. The washing machine waits for a cycle.
Each system holds one part of the situation. The systems cannot make the decision together because they do not share a contract or a room.
Reports no occupancy. Temperature: 70°F.
Reports peak pricing from 16:00 to 20:00.
Reports the vehicle at 38 percent and connected to the charger.
Compares the readings and recommends charging before peak pricing.
Shows the proposal and requests homeowner approval.
Returns “charging started.” The harness records the result.
Observed
House empty since 14:31. Vehicle connected at 38%. Peak rate begins at 16:00.
Recommendation
Charge before 16:00. Keep a 20% battery reserve. Ask the homeowner before sending the command.
Decision record
Approved at 15:16. Charger accepted the command. Result stored in the home room.
The harness does not need a new appliance. It needs enough context to connect the peak to a decision.
The room shows the handoff
The room gives people a place to inspect the same work that agents exchange through APIs. A2A-style messages can carry structured context between agents. The room can show a readable version of each observation, proposal, approval, and result.
Home energy · current conversation
Occupancy sensor reports no one home. Temperature: 70°F.
Peak rate begins at 16:00 and lasts four hours.
Vehicle is plugged in. Battery: 38 percent.
Charge before 16:00. Keep 20 percent battery reserve. Request homeowner approval.
Kitchen · current conversation
Milk falls below the household threshold. Bread opened yesterday.
Two guests arrive for breakfast tomorrow.
Add milk and bread to the next grocery order.
Maintenance · current conversation
Moisture appears beneath the utility sink. Confidence: 0.94.
Close the main valve and notify the homeowner. Approval required.
Use the endpoints you already have
The first implementation can wrap a local home hub, a Matter or Thread controller, an MQTT topic, a manufacturer endpoint, a utility tariff feed, an EV charger protocol, or a simple sensor gateway. These examples show the shape of the adapter; they do not recommend a device vendor.
Illustrative thermostat adapter
const thermostat = {
observe: () => hub.get("/devices/thermostat/state"),
propose: (target, evidence) => ({
device: "thermostat",
action: "set_temperature",
target,
evidence,
requires: "homeowner.approval"
}),
act: (proposal) => policy.allows(proposal)
? hub.post("/devices/thermostat/commands", proposal)
: { status: "blocked" }
};
Illustrative energy adapter
const homeEnergy = {
context: async () => ({
rate: await utility.get("/tariff/current"),
battery: await battery.get("/state"),
vehicle: await charger.get("/vehicle/state")
}),
propose: (plan) => policy.check({
kind: "charge_vehicle",
plan,
reserveBattery: 0.20
})
};
The adapter hides endpoint details. The harness sees named capabilities with policy boundaries.
Give the operator harness a real job
Codex or Claude Code can read the adapters, run a report, compare today with last week, calculate a trend, and identify an anomaly. The harness can return the result to a person before it touches a control.
const report = await harness.run({
task: "produce the 24-hour home energy report",
sources: [
"thermostat.readings",
"meter.intervals",
"battery.state",
"vehicle.state"
],
outputs: ["summary", "anomalies", "next_actions"],
policy: "read_only"
});
One run can produce three outputs: a source-backed explanation for a person, structured metrics for a dashboard, and a proposal for another agent.
A2A carries machines; the room carries people
An A2A-style envelope can carry identity, intent, evidence, approval requirements, and expiry. The room can show the same message without exposing private reasoning.
await a2a.send({
from: "energy-agent",
to: "vehicle-agent",
type: "proposal",
intent: "charge_before_peak",
context: report.anomalies,
requires: ["homeowner.approval"],
expiresAt: "2026-08-14T16:00:00-07:00"
});
15:12 Energy agent: peak load likely at 17:30
15:13 Vehicle agent: proposal received
15:13 Home room: approval requested
15:16 Homeowner: approved charging plan
15:16 Vehicle agent: command accepted; result recorded
What happens when the agents disagree?
The utility feed returns a stale rate. The thermostat reports an empty house, but the occupancy sensor reports movement. The charger rejects the command. The harness should stop the action, show the conflicting observations, mark the report incomplete, and ask a person to resolve the conflict.
The failure record matters as much as the success record. A home should never hide uncertainty behind a confident sentence.
Build the first loop
- Choose one sensor, one controllable device, and one source of context.
- Wrap each endpoint with
observe,propose,act, andrecord. - Connect the adapters to Codex, Claude Code, or a small service. Keep the first run read-only.
- Ask the harness for one report. Store the sources, timestamps, assumptions, and calculations.
- Post the report and proposal to a shared room. Use A2A or a typed event bus for the agent exchange.
- Allow one low-risk action after the room shows the evidence, policy, approval, and result.
Acceptance checks
What the harness should show
Show the source data, the calculation, the assumption, the recommendation, and the result. Keep private chain-of-thought private; expose the evidence and decision record a person needs to audit the work.
The refrigerator can remain a refrigerator. The thermostat can remain a thermostat. Give each endpoint a small role, give each agent a small set of tools, and give people a report, a room, and a clear approval path. Then let the harness run one safe action and show exactly what happened.