Open Source · MIT License

Hardware access
for AI agents.

OAHL is an open-source protocol that gives AI agents a standard way to discover, reserve, control, and release physical hardware — cameras, phones, radios, sensors, lab equipment — through a single, consistent interface.

What is OAHL?

AI agents today can call APIs, browse the web, and write code — but they cannot touch the physical world without custom, fragile integration work for every device. OAHL fixes this by defining a standard protocol for hardware interaction.

A hardware owner installs a small node server next to their devices. Each device exposes capabilities — standardized actions like camera.capture, radio.scan, or input.tap. Agents discover these capabilities through a cloud registry and execute them through a managed session with built-in isolation and policy enforcement.

Node

A lightweight server running on a machine connected to hardware. It loads adapters and exposes capabilities over HTTP.

Adapter

A plugin that translates device-specific commands into OAHL's standard capability interface. One adapter per device class.

Capability

A named, schema-validated action: camera.capture, sensor.read, screen.tap. Agents discover and invoke them uniformly.

Session

A time-bound, exclusive reservation of a device. While one agent holds a session, no other agent can interfere.

Policy

Declarative rules controlling what agents can do: allowed capabilities, duration limits, and deny lists — all configured by the hardware owner.

Cloud Registry

The optional central hub where nodes register so remote agents can discover capabilities globally. Fully optional — OAHL works locally too.

What we're trying to achieve

We believe AI agents should be able to interact with the physical world as easily as they call a REST API today. But hardware is messy — different protocols, drivers, connection methods, and safety concerns across every device family.

Our goals:

How it works

1
Discover

Agent queries the cloud registry for available capabilities and devices.

2
Reserve

Agent requests a session on a specific device. The system enforces exclusivity and policy.

3
Execute

Agent sends capability commands through the relay. Results are returned as structured JSON.

4
Release

Agent stops the session. The hardware is freed for the next consumer.

// Typical agent integration (TypeScript SDK)
import { CloudClient } from '@oahl/sdk';

const cloud = new CloudClient('https://oahl.onrender.com', AGENT_KEY);
const { devices } = await cloud.getCapabilities({ type: 'android' });
const { session_id } = await cloud.requestSession({ device_id: devices[0].id });
const result = await cloud.execute(session_id, { capability: 'screen.capture' });
await cloud.stopSession(session_id);

How you can help

OAHL is a community project. We're a small team building something ambitious, and we need people who care about giving AI agents real-world capabilities.

🔌 Build adapters

Write an @oahl/adapter-* package for a device you know well. Arduino, Raspberry Pi GPIO, industrial PLCs, scientific instruments — any hardware that could benefit from agent access.

→ Run oahl create-adapter my-device to scaffold

🧩 Improve the core

Bug fixes, performance improvements, and test coverage for packages/core, packages/server, and packages/cloud. TypeScript, clean commits, and tests required.

→ Look for issues labeled good first issue

📖 Write documentation

Improve guides, fix inaccuracies, add examples. The docs/ folder is always in need of better onboarding content and real-world usage examples.

→ Check docs/ for gaps and outdated info

🌐 Build SDK clients

We have JavaScript and Python SDKs. We'd love Go, Rust, Java, or C# clients so agents on any platform can access OAHL hardware.

→ See docs/sdk-strategy.md for design guidance

🧪 Conformance testing

Expand the protocol conformance test suite. Help ensure adapters behave correctly and execution results match the spec.

→ See packages/cli/src/conformance.ts

📐 Protocol design

Propose RFCs for protocol-level changes: new lifecycle steps, security controls, transport profiles. We follow a lightweight RFC process in GitHub Discussions.

→ Read docs/rfcs/000-rfc-process.md

Getting started as a contributor

# Clone and set up
git clone https://github.com/fredabila/oahl.git
cd oahl
npm install
npm run build

# Run the test suite
npm test

# Start a local development node
cp oahl-config.example.json oahl-config.json
npm start

Prerequisites: Node.js ≥ 18, npm ≥ 9, TypeScript ≥ 5, Git. For adapter work, you'll also need the driver toolchain for your target hardware (e.g., ADB for Android, serialport bindings for serial devices).

Please read CONTRIBUTING.md before opening a PR. It covers branching conventions, commit style, the PR checklist, and the adapter authoring rules.