All integrations

LangChain

Add a human approval checkpoint to any LangChain agent tool or chain step.

Install

npm install @cheqpoint/sdk
npm install @cheqpoint/sdk

Create a reusable approval tool

TypeScript
import { CheqpointClient } from "@cheqpoint/sdk";
import { DynamicTool } from "langchain/tools";

const cheqpoint = new CheqpointClient({
  apiKey: process.env.CHEQPOINT_API_KEY!,
});

export const approvalTool = new DynamicTool({
  name: "request_human_approval",
  description: "Request human approval before executing a sensitive action",
  func: async (input: string) => {
    const parsed = JSON.parse(input);

    const result = await cheqpoint.checkpoint({
      action: parsed.action,
      summary: parsed.summary,
      details: parsed,
      riskLevel: parsed.riskLevel ?? "medium",
    });

    if (result.status === "APPROVED") {
      return JSON.stringify({ approved: true, note: result.decisionNote });
    }
    throw new Error(`Action rejected: ${result.decisionNote ?? "No reason given"}`);
  },
});
import { CheqpointClient } from "@cheqpoint/sdk";
import { DynamicTool } from "langchain/tools";

const cheqpoint = new CheqpointClient({
  apiKey: process.env.CHEQPOINT_API_KEY!,
});

export const approvalTool = new DynamicTool({
  name: "request_human_approval",
  description: "Request human approval before executing a sensitive action",
  func: async (input: string) => {
    const parsed = JSON.parse(input);

    const result = await cheqpoint.checkpoint({
      action: parsed.action,
      summary: parsed.summary,
      details: parsed,
      riskLevel: parsed.riskLevel ?? "medium",
    });

    if (result.status === "APPROVED") {
      return JSON.stringify({ approved: true, note: result.decisionNote });
    }
    throw new Error(`Action rejected: ${result.decisionNote ?? "No reason given"}`);
  },
});

Full agent example

TypeScript
import { ChatOpenAI } from "langchain/chat_models/openai";
import { AgentExecutor, createOpenAIFunctionsAgent } from "langchain/agents";
import { approvalTool } from "./approvalTool";
import { RefundTool } from "./tools/refund";

const model = new ChatOpenAI({ model: "gpt-4o", temperature: 0 });

const agent = await createOpenAIFunctionsAgent({
  llm: model,
  tools: [approvalTool, new RefundTool()],
  prompt: yourPrompt,
});

const executor = new AgentExecutor({ agent, tools: [approvalTool, new RefundTool()] });

const result = await executor.invoke({
  input: "Process a £500 refund for order #12345",
});
import { ChatOpenAI } from "langchain/chat_models/openai";
import { AgentExecutor, createOpenAIFunctionsAgent } from "langchain/agents";
import { approvalTool } from "./approvalTool";
import { RefundTool } from "./tools/refund";

const model = new ChatOpenAI({ model: "gpt-4o", temperature: 0 });

const agent = await createOpenAIFunctionsAgent({
  llm: model,
  tools: [approvalTool, new RefundTool()],
  prompt: yourPrompt,
});

const executor = new AgentExecutor({ agent, tools: [approvalTool, new RefundTool()] });

const result = await executor.invoke({
  input: "Process a £500 refund for order #12345",
});