epistemic-handshake
v0.2.0
Published
Governance middleware for AI agents. One line before every action.
Maintainers
Readme
Epistemic Handshake - JavaScript/TypeScript SDK
Governance middleware for AI agents. One line before every action.
Install
npm install epistemic-handshakeQuick Start
import { EH } from 'epistemic-handshake';
const eh = new EH({ apiKey: 'eh_xxx', policyId: 'your-policy-id' });
// One-line check
if (await eh.allow('Send refund of 350 pounds to customer')) {
sendRefund();
}Full Verification
const result = await eh.verify('Apply 25% discount to order #4521');
console.log(result.verdict); // "APPROVE" | "DENY" | "ESCALATE"
console.log(result.confidence); // 0.0 - 1.0
console.log(result.reasoning); // Why this verdict
console.log(result.approved); // true/false
console.log(result.blocked); // true if DENY or ESCALATEGuard Wrapper
const safeSendEmail = eh.guard(
(to, body) => `Send email to ${to}`,
sendEmail
);
// Only executes if EH approves
await safeSendEmail('[email protected]', 'Hello!');Observe Mode
Start without blocking anything. See what EH would catch.
const eh = new EH({
apiKey: 'eh_xxx',
policyId: 'xxx',
mode: 'observe' // Logs everything, blocks nothing
});
const result = await eh.verify('Apply 50% discount');
// result.approved === true (observe mode)
// Console: "[EH OBSERVE] Would have blocked: Apply 50% discount | DENY"Environment Variables
export EH_API_KEY=eh_xxx
export EH_POLICY_ID=your-policy-id// No config needed if env vars are set
const eh = new EH();With LangChain.js
import { EH } from 'epistemic-handshake';
import { tool } from '@langchain/core/tools';
const eh = new EH({ apiKey: 'eh_xxx', policyId: 'xxx' });
const sendRefundTool = tool(
async ({ amount, customerId }) => {
const result = await eh.verify(`Send refund of ${amount} pounds to customer ${customerId}`);
if (result.blocked) return `Blocked: ${result.reasoning}`;
return await processRefund(amount, customerId);
},
{ name: 'send_refund', description: 'Send a refund to a customer' }
);With OpenAI Function Calling
import { EH } from 'epistemic-handshake';
const eh = new EH({ apiKey: 'eh_xxx', policyId: 'xxx' });
// In your function call handler:
async function handleFunctionCall(name: string, args: any) {
const intent = `${name}: ${JSON.stringify(args)}`;
const verdict = await eh.verify(intent);
if (verdict.blocked) {
return { error: `Blocked by policy: ${verdict.reasoning}` };
}
return await executeTool(name, args);
}