Skip to main content
Uses: Python · TypeScript · CLI · REST API
Two shapes here, and they need different tools. A pipeline posting a deterministic comment wants a plain tool call. An agent triaging an issue wants a scoped toolset and a model. Both avoid handling a GitHub token in your code.
cURL samples assume BASE=https://api.engini.io/v1 and AUTH="x-api-key: $ENGINI_API_KEY" - the setup from the REST walkthrough.

Connect and discover

Slugs vary by connector version, so capture the ones you need rather than copying them from a doc:

Shape 1 - deterministic, from CI

No model involved. Read the schema, send the fields:
Validate first on a pull request so a malformed payload fails review rather than production:
Full pipeline patterns - headless auth, exit-code branching - are in Run Engini in CI/CD.

Shape 2 - an agent that triages

Give a model a narrow toolset. Note what’s deliberately absent: nothing that can close, merge, or delete. (Agent scoping is SDK work - the loop lives in your code.)
Then run the standard agent loop with a prompt like “Read issue #482, find similar past issues, and post a comment linking them.” The scoping is the point: even if the model decides the issue should be closed, 403 TOOL_NOT_IN_TOOLSET stops it. That’s a control you can show a reviewer, not a promise about prompt discipline.

Shape 3 - cross-app, one turn

Bind two connections into one toolset and the agent can act across both:
Now “summarize the open PRs and post it to #eng” is a single conversation, with no glue code between the two APIs.

Failure modes worth knowing

Reading executionInfo.statusCode is what separates “GitHub said no” from “Engini said no” - see debugging.