I Built an AI Runtime That Gains New Abilities Without New Integrations
What if installing software could give your AI a new ability — without anyone building another MCP server, plugin, connector, or provider-specific tool?
There is something about the current AI agent ecosystem that has been bothering me.
We keep making agents more intelligent.
Then we give them abilities in one of the least scalable ways imaginable.
Want the agent to use GitHub?
Build a GitHub integration.
Want Slack?
Another integration.
Want a database?
Another integration.
A new SaaS product?
Another connector.
A new internal API?
More tools.
And eventually the agent ends up staring at an enormous catalogue of things like:
github_create_issue
github_merge_branch
slack_send_message
notion_create_page
jira_update_ticket
...
That works.
But I started wondering whether we're solving the problem at the wrong layer.
What if the agent didn't need to know the provider?
What if instead we could say:
software/service appears
↓
its capabilities are discovered
↓
those capabilities are normalised
↓
the AI can inspect them
↓
authority and policy are applied
↓
the capability executes
↓
the outcome is independently verified
No new AI integration.
No permanent provider-specific tool.
No rebuilding the agent.
That experiment became RIGHTCLICK.
RIGHTCLICK is an open-source dynamic capability runtime for AI.
And the idea behind it is simple:
Software appears. Your AI learns what it can safely do.
The integration problem gets ugly surprisingly quickly
MCP has been a huge step forward.
It gives models a standard way to communicate with external capabilities.
RIGHTCLICK actually speaks MCP.
But I think there is another problem sitting above the transport layer.
MCP helps answer:
How can an AI call this tool?
There is another question:
How did the AI acquire that capability in the first place?
Today, the answer is usually some variation of:
provider
↓
developer builds integration
↓
integration exposes tools
↓
agent receives those tools
RIGHTCLICK experiments with a different model:
provider
↓
provider exposes a capability contract
↓
RIGHTCLICK discovers it
↓
RIGHTCLICK reflects it
↓
capability enters a live graph
↓
agent uses the same interface it already had
The provider changes.
The capability changes.
The environment changes.
The model-facing interface does not.
Seven operations
The entire RIGHTCLICK agent interface is deliberately small.
context_runtime
context_inspect
context_actions
context_explain
context_run
context_run_status
context_providers
That's it.
The goal is that adding a new provider should not mean adding a new top-level AI tool.
OpenAPI operation?
context_run.
GraphQL operation?
context_run.
Native application capability?
context_run.
A capability exposed by another RIGHTCLICK runtime?
Still context_run.
The provider protocol becomes an implementation detail behind a common capability model.
That invariant is probably the most important part of the project.
The first experiment surprised me
One of the earliest tests involved BBEdit on macOS.
The question was simple:
Could installing an ordinary application cause an AI to gain new capabilities without writing BBEdit-specific acquisition code?
Before installation:
36 capabilities
0 third-party capabilities
After installation:
41 capabilities
5 BBEdit capabilities
BBEdit-specific RIGHTCLICK acquisition code added:
0
That was the moment the project became much more interesting to me.
Because the important result wasn't “RIGHTCLICK supports BBEdit”.
That would just be another integration.
The interesting result was:
The environment changed, so the capability graph changed.
That's a very different architecture.
Then I started applying the same idea to APIs
Native application discovery is only one capability substrate.
RIGHTCLICK has since been extended to reflect supported capabilities from things including:
macOS capability contracts
OpenAPI
GraphQL
gRPC reflection
ARD-discovered capability artifacts
other RIGHTCLICK runtimes
Each substrate has its own discovery mechanism.
But once reflected, the capabilities enter the same runtime.
Conceptually:
┌───────────────┐
│ AI │
└───────┬───────┘
│
seven operations
│
▼
┌───────────────┐
│ RIGHTCLICK │
└───────┬───────┘
│
capability graph
│
┌─────────┬───────┼───────┬──────────┐
│ │ │ │ │
macOS OpenAPI GraphQL gRPC federation
│ │ │ │ │
└─────────┴───────┼───────┴──────────┘
│
▼
Capability ABI
│
▼
policy
│
authority
│
execution
│
observation
│
verification
And this matters for another reason.
It means discovery mechanisms can also evolve independently.
Bonjour can discover something.
ARD can discover something.
A registry could discover something.
An enterprise service catalogue could discover something.
A future protocol could discover something we haven't invented yet.
Those systems don't have to become the architecture.
They're just ways of finding capability contracts.
Then RIGHTCLICK used RIGHTCLICK
This is probably my favourite experiment so far.
While developing RIGHTCLICK, I needed to modify the RIGHTCLICK GitHub repository.
Instead of adding:
github_merge_branch
as another permanent AI tool, RIGHTCLICK reflected the GitHub API generically.
The runtime discovered a capability equivalent to:
Merge a branch
with structured arguments including:
owner
repo
base
head
commit_message
The AI still invoked it through:
context_run
RIGHTCLICK then called GitHub.
GitHub returned:
HTTP 201
And this is where another important design decision appears.
RIGHTCLICK did not call that success.
It recorded that GitHub had accepted the request.
Then a separate repository read checked whether the expected branch state actually existed.
Only the observation of the resulting state established the outcome.
So the real flow was:
discover GitHub operation
↓
reflect capability
↓
resolve authority
↓
context_run
↓
GitHub: HTTP 201
↓
ACCEPTED — not yet verified
↓
independent repository observation
↓
expected state exists
↓
VERIFIED
There was still no github_merge_branch top-level RIGHTCLICK tool.
GitHub was simply another capability provider.
That is RIGHTCLICK dogfooding its own architectural thesis.
HTTP 200 is not the same thing as success
This became another core principle.
Agents routinely receive a successful transport response and assume the job has been completed.
But these statements are not equivalent:
the request was sent
the provider accepted it
something changed
the requested thing changed
the requested outcome is true
RIGHTCLICK therefore separates states including:
CAPABILITY EXISTS
CAPABILITY APPLIES
AUTHORITY IS AVAILABLE
CONFIRMATION IS REQUIRED
PROVIDER ACCEPTED REQUEST
REQUESTED OUTCOME VERIFIED
The distinction might sound pedantic.
For autonomous systems it is not.
Imagine:
"Delete the old deployment"
"Transfer £500"
"Update the production record"
"Merge the release branch"
"Create the customer account"
A 200 OK tells you remarkably little about whether the user's actual objective is now true.
Discovery must not equal authority
There is an obvious danger with dynamic capability discovery.
If an agent can suddenly discover new things it can do, you absolutely do not want discovery itself to confer permission.
RIGHTCLICK therefore treats discovery and authority as separate boundaries.
The model might discover:
Delete resource
That does not mean the model automatically receives permission to delete it.
Similarly, credentials do not need to become arguments passed through the model.
Where supported, authority can be resolved below the model-facing capability contract and bound to the execution origin.
Conceptually:
MODEL
│
│ "invoke capability X"
▼
RIGHTCLICK
│
├── capability contract
├── local policy
├── confirmation
├── authority resolution
└── execution
The capability tells the agent what could be done.
The runtime determines whether it may be done.
Those need to remain different concepts.
The runtime is also beginning to learn — carefully
A capability runtime becomes more interesting if it can benefit from previous experience.
But this creates another dangerous shortcut:
“It worked last time, therefore skip the checks.”
RIGHTCLICK explicitly doesn't do that.
Its current experience mechanism can retain bounded observations associated with freshly discovered capability contracts.
Things like:
accepted but unverified
predicates verified
failed
unknown
But that history is advisory.
It cannot:
invent a capability
resurrect a capability that disappeared
grant authority
skip confirmation
replace fresh verification
change execution routing
And importantly, the experience store isn't designed to retain credentials or raw execution payloads.
I think this distinction will become increasingly important in agent infrastructure.
There is a huge difference between:
learning from experience
and:
allowing historical experience to become authority
The first is useful.
The second can become terrifying very quickly.
So what exactly is RIGHTCLICK trying to become?
Not a bigger collection of integrations.
That's the trap I'm specifically trying to avoid.
The north star is closer to a universal capability runtime.
An agent enters an environment.
It has a small stable interface.
Then:
application installed
↓
new capabilities appear
API becomes available
↓
new capabilities appear
GraphQL service appears
↓
new capabilities appear
gRPC service becomes discoverable
↓
new capabilities appear
another runtime becomes reachable
↓
capability graph expands
The AI shouldn't need to be rebuilt every time.
It shouldn't need thousands of permanent provider-specific tools loaded into its context either.
Instead, it can ask:
What can this environment do right now?
That feels much closer to how operating systems work.
Applications don't need the kernel rebuilt whenever new hardware is attached.
Browsers don't need their core rewritten for every website.
Compilers don't need a different programming language for every CPU instruction.
Those systems create abstractions between layers.
AI agents need better abstractions too.
Where ARD fits
Agentic Resource Discovery is especially interesting in this context.
But I don't think discovery itself should become the runtime.
In RIGHTCLICK's architecture, ARD can be a source of capability artifacts:
ARD
↓
discover compatible capability contract
↓
RIGHTCLICK reflector
↓
normalised capability
↓
same authority / execution / verification runtime
So ARD can dramatically widen what an agent can find without forcing the rest of the system to become ARD-specific.
That distinction matters.
Discovery is an input.
It doesn't have to define the execution architecture.
What exists today
This isn't just a whitepaper.
The current RIGHTCLICK release line includes work around:
- OpenAPI capability reflection
- GraphQL capability reflection
- gRPC capability reflection
- Bonjour discovery
- universal capability artifact resolution
- ARD registry acquisition
- MCP federation
- OAuth/OIDC authority support
- origin-bound authority handling
- independent outcome verification
- capability experience
- a provider-independent Capability ABI foundation
The current v0.2.2 release acceptance recorded:
411 tests
26 skipped
0 failures
The project is open source under Apache-2.0.
And it can be installed through Homebrew:
brew install rossbuckley1990-hash/tap/rightclick
Then:
rightclick version
rightclick doctor
rightclick providers
Or expose the runtime to an MCP client:
rightclick mcp
What does not exist yet
This part is important.
RIGHTCLICK is not currently a universal production runtime for every operating system and every software contract.
The released runtime currently targets:
Apple Silicon
macOS 14+
Not every OpenAPI shape is supported.
Not every application exposes something RIGHTCLICK can reflect.
Unsupported or ambiguous contracts should abstain rather than being guessed into existence.
The project also contains architecture work toward stronger typed capability contracts, leases, policy and verification boundaries that should not be confused with finished security certification.
And a portable capability representation does not magically mean the complete runtime is already portable across Linux, Windows and macOS.
I'd rather preserve those boundaries than turn a promising architecture into a collection of unprovable claims.
The bigger question
The project has left me with a question that I think is much more interesting than RIGHTCLICK itself:
Should AI agents have integrations at all?
Or, more precisely:
Should every capability require somebody to build an AI-specific integration?
Perhaps software should expose machine-readable capability contracts.
Perhaps agents should discover them.
Perhaps a runtime should normalise them.
Perhaps authority should be granted independently.
Perhaps execution should happen through a common ABI.
Perhaps outcomes should be verified independently.
And perhaps the agent should never care whether the capability originated from:
GitHub
Photoshop
an internal API
GraphQL
gRPC
a desktop application
a local service
a cloud service
another agent runtime
It should care about the capability contract.
Not the brand.
The design rule I'm using
I've ended up with a fairly brutal rule when considering new RIGHTCLICK functionality.
A new integration is interesting only if it teaches the runtime a class of capability.
Not one provider.
Good:
"RIGHTCLICK can now safely reflect this category of GraphQL operation."
Good:
"RIGHTCLICK can now resolve this generic authentication scheme."
Good:
"RIGHTCLICK can now discover this class of capability artifact."
Much less interesting:
"RIGHTCLICK now has 47 custom GitHub tools."
Every provider-specific special case makes the demo larger.
Every generic capability primitive makes the architecture larger.
I want the second.
Try to break it
RIGHTCLICK is open source:
https://github.com/rossbuckley1990-hash/rightclick
I'm particularly interested in people working on:
- MCP
- ARD
- agent runtimes
- capability security
- OpenAPI
- GraphQL
- gRPC
- authorization
- agent verification
- tool discovery
- operating-system abstractions
- autonomous software
Don't just star it.
Try an environment I haven't tried.
Give it a capability substrate it doesn't understand.
Find an authority boundary that's wrong.
Find somewhere provider acceptance is being confused with actual success.
Or propose a way for an entirely new family of software to become discoverable without adding another provider-specific AI tool.
Because if the core thesis is right, the end state shouldn't be:
“We built every integration an AI could ever need.”
It should be:


Top comments (0)