access is an optional declaration that says what your integration touches. On a widget it says what the screen reads and which actions it offers. On a tool it says which resource the tool reads or writes and how far it reaches.
Ekanos uses it in two places:
- Admins see it. When an admin places your widget on a workspace, they see what that screen reads and changes, in your words.
- Agent access is suggested from screens. When an admin lets a group’s assistant use your integration, Ekanos suggests the reads and actions of the screens that group can see. Screens only suggest. An admin accepts each suggestion, and nothing is granted for them.
Declare it on a widget
reads— one entry per kind of data the screen shows.resourceis a lowercase id (invoices,action_items);labelis what an admin reads, up to 80 characters.actions— one entry per thing a person can change from the screen.idis kebab-case and unique on the screen.labelis the button’s name.operations— the tools that action runs, by tool name. At least one.reach— how far the action goes:'record'(one record),'many'(several records) or'outside'(it sends something out of the system, such as an email).permission— optional,resource.action. Leave it out and the host applies its own default.
reads and actions are optional, so a read-only widget declares only reads.
Declare it on a tool
resource— the same ids your screens use inreads, so a screen’s read and the tool behind it line up.verb—'read'or'write'.reach.records—'one'or'many': how many records one call can touch.reach.sendsOutside—truewhen a call sends something out of the system. Leave it out otherwise.
reach is optional. A tool with no reach is shown to admins as “reach unknown”, and Ekanos never claims it matches a screen.
Optional, and what happens without it
You can ship withoutaccess. An undeclared screen behaves at product level: it renders for any group that has your product, and it suggests nothing for agents. An admin who wants an assistant to use your integration then grants the whole product, rather than accepting suggestions per screen. An undeclared tool is reachable only through that product-level grant.
Declare it when you want admins to see, and grant, only what a screen needs.
Broader than the screen
An action’sreach says what the screen does. The tools behind it can do more. Ekanos compares them and flags a tool as broader than the screen when:
- the tool reaches
manyrecords and the action reachesrecord, or - the tool sends outside the system (
sendsOutside: true) and the action’s reach is not'outside'.
reach is listed as “reach unknown” for the same reason.
For example, a Mark paid action with reach: 'record' that runs update_invoice, a tool that can rewrite any field on any invoice, will be flagged. That is honest, not a defect. If you want the suggestion ticked, give the action a narrower tool, such as one that only records a payment.
Best practices
- Declare every screen and tool that touches data, not a sample. A half-declared integration suggests half of what it does.
- Match what the screen really does. Declare
reach: 'outside'for anything that sends an email, message or webhook. Understating it makes an admin’s decision worse. - Share resource ids. Use one id per kind of data across widgets and tools:
invoices, notinvoicein one place andopen_invoicesin another. - Write labels for a business owner.
Open invoicesandMark paid, not endpoint names. - Split broad tools. Prefer a narrow tool for each screen action over one tool that edits everything.
- Name real operations. Every entry in
operationsshould be a tool you ship. Use the tool’s declared name. - Declare
reachon every tool. It is optional, but it is what lets a screen’s suggestion be ticked by default.
Next steps
- Widgets for the declaration
accesssits on - Tools for the tool declaration
- Managed agents for how agents use the access an admin accepts