<InstallPythonSDK />
Programmatic control (`copilotkit.runAgent`, `agent.subscribe`,
`agent.addMessage`) drives runs through the same agent your chat UI
uses, so the backend wiring is the same one-line `CopilotKitMiddleware`
setup.
<DemoCode file="src/agents/frontend_tools.py" region="middleware" />
For the headless `useInterrupt` pattern, also use LangGraph's native
`interrupt(...)` inside a graph node and resume with
`forwardedProps: { command: { resume, interruptEvent } }` from the
frontend.