Logs: what each execution did
Your workflow writes logs throughctx.log. Those structured JSON logs land in the project’s Logs tab, scoped to
the environment the integration is running in. Each entry is tied to an execution, so you can follow a single run from
trigger through to the step that failed.
Writing useful logs
Log at the point something meaningful happens — a record is fetched, a mapping is applied, a downstream call returns an unexpected status. Include identifiers you will want to search for later, such as the execution ID, an order ID, or the system you called.ctx.log supports the usual levels — debug for detail you do not need every day, info for the path a healthy
execution takes, error for failures. Debug logs are still stored; they just stay out of the way until you need them.
Reading logs
Open the Logs tab on the project and select the environment you want to inspect. Search for a message, an identifier, or an execution ID to narrow the stream to the run you care about. You can also pull the same logs from the CLI — useful when you are already in a terminal, or when you want a window of history rather than a live tail:--since accepts a duration such as 1h or 24h. --search filters to matching log lines.
Logs tell you what the code did. They do not, on their own, page anyone. For that you raise an issue and link an
email channel to the environment.
Issues: when something needs attention
Issues are the integration’s incident record. They appear in the Issues tab whether or not anyone is emailed — linking a channel only adds delivery, it does not create the issue. An issue is raised when:- A workflow errors and the error is not handled.
- Your code calls
ctx.createIssue()for a condition you care about even if execution continues. - The platform itself hits a problem, such as the environment running out of memory.
createIssue when a failure is expected as a possibility and you still want it tracked — a downstream API
returning 429s, a required field missing from a payload, a credential that looks expired:
critical, high, medium, low) and a status (open, acked, resolved,
closed). Acknowledge an issue when someone is looking at it; resolve it when the underlying problem is fixed. The
Issues tab supports search, filtering, and pagination, so you can keep a busy environment readable.
Email channels: get told when issues are raised
An email channel is an organisation-wide destination — a name, a primary recipient, and optional CC addresses. Linking that channel to a project environment is what turns a recorded issue into an email. The same channel can be linked to more than one environment; each environment can have its own filters. That split is deliberate. The channel answers who gets told. The link answers which environment, and which issues.1
Create a channel
Create an email channel on the organisation with a name and at least one recipient. Name it after the people or
rotation it reaches — for example Use
on-call or integrations-team — rather than after a single project.--cc (repeatable) for additional recipients.2
Link it to an environment
Bind the channel to the project environment you want alerts from. After linking, issues raised in that environment are
emailed through the channel as well as recorded in the Issues tab.If you omit
--channel-id or --environment, the CLI prompts you to pick from what already exists.3
Filter what gets emailed
Not every issue needs an inbox. When you link a channel you can restrict delivery by severity, title, or
message, so production pages the on-call rotation for
critical and high while staging stays quiet — or so only
issues whose title contains Order sync land in a given inbox.If no email channel is linked to an environment, issues are still recorded and still visible. Email is how you hear
about them; it is not how they exist.
Let an agent investigate
Logs and email tell you that something went wrong. Issue Watcher goes further: it watches a deployed environment, investigates the failing execution, and proposes a fix as a draft version for you to review. Nothing deploys until you do. It is a Cloud Agent — it runs on the platform rather than in your chat — and it uses the same evidence you would: the version that is actually running, the failing execution’s trace, and the error logs. If an email channel is linked to that environment, the people who were told the integration broke are also told when the investigation finishes.Issue Watcher
When a deployed integration raises an issue, Issue Watcher reads the code that failed, works from the execution’s
trace and logs, and proposes the smallest fix it can.