Hi! Thanks for reporting this so carefully 
I dug through the current Anna App / Executa upload and file-storage surfaces, and the good news is: this looks much more like an API-surface mismatch than a hard platform failure.
What’s actually happening
There are several Anna file/upload flows that look similar, but they are not interchangeable:
-
App UI host upload
upload.inline
upload.negotiate
upload.confirm
-
Executa host upload
-
APS Files persistent storage
- App side:
anna.files.upload_init
anna.files.upload_finalize
anna.files.download_url
- Executa side:
files/upload_begin
files/upload_complete
files/download_url
Because of that, storage/files/upload_inline is not the right method for the flow you’re trying to use, so Method not found on that name is expected.
The key conclusion
The root issue is not simply “upload is broken” or “the runtime does not support file upload.”
The real issue is:
- one method name is being used against the wrong surface
- the permission model being applied belongs to a different upload path
- APS Files, app host upload, and Executa host upload are being treated as if they were one API
That’s why the behavior looks inconsistent at first glance.
Why your findings still matter
Your observations are still very useful 
storage/files/upload_inline returning Method not found tells us that this exact method is not valid on the path being called.
host/uploadFile being recognized tells us the runtime does expose the Executa host-upload surface.
- the earlier grant/permission error tells us that once the correct surface is reached, the next gate is authorization.
So the system is giving two different kinds of signals:
- wrong method name
- correct method family, but different grant/capability requirements
Permission clarification
This is the part that is easiest to mix up.
If you use host/uploadFile
This is the Executa host-upload path.
You need:
- protocol v2
- an Executa capability declaration like:
host_capabilities: ["host.upload"]
- the relevant upload grant enabled
If you use APS Files
This is the persistent storage/files path.
Use:
- App side:
anna.files.upload_init
anna.files.upload_finalize
anna.files.download_url
- Executa side:
files/upload_begin
files/upload_complete
files/download_url
If you use app-side direct upload
This is the App host API upload path.
Use:
upload.inline
upload.negotiate
upload.confirm
So adding both upload.inline and host.upload does not mean every file-related path is now enabled. Those names belong to different layers.
Which path should you choose?
Use APS Files if your goal is durable storage 
For notes, saved files, user-owned persistent content, or anything that should survive beyond one temporary upload flow, use APS Files.
Use host/uploadFile if your goal is temporary/shareable artifacts
This is the right choice when an Executa wants to hand bytes back to the host without directly owning storage credentials.
Use app-side upload.* if your iframe/app is uploading directly
This is the host-mediated upload surface for the app UI itself.
Demo walkthrough you can try
To help make this concrete, I also tested the repo’s demo path and captured screenshots as a walkthrough example you can follow locally 
These screenshots are reference walkthrough screenshots from our side, not evidence from your environment. They’re meant to show how you can play with the demo and validate the correct flow end-to-end.
Suggested way to play with the demo
-
Log in with the Anna App CLI
- Example:
anna-app login --host https://anna.partners
-
Push the demo app
- Example:
anna-app apps push
-
In Anna, open the Agent / Plugin details and click Rediscover Local
- This makes sure the bundled Executa is loaded
-
Open the plugin permission dialog
- For the APS Files demo, enable Persistent Storage
-
Install the app’s working draft from Developer Console
- That makes the draft version available in chat
-
Open the demo app in chat and test the save flow
- Enter a path like
notes/hello.txt
- Enter some note text
- Click Save to APS Files
-
Optionally test:
If that flow succeeds, it strongly suggests the platform path is healthy and the remaining issue in a failing app is likely about API selection or permissions.
What the demo proves
If the APS Files demo works, that tells us a lot 
It means:
- local login is fine
- the app draft install path is fine
- the local rediscover path is fine
- the Executa can be loaded correctly
- Persistent Storage permission is being applied correctly
- APS Files save/list/download behavior is working
That is why the repo examples are such a useful baseline.
Recommended repo examples to test
I strongly recommend testing against the examples in this repo first 
Good starting points:
- APS Files Demo
- Files via Executa
These help separate two very different situations:
- “the platform is broken”
- “my app is calling the wrong file/upload surface”
If the examples work but your app does not, the next thing to compare is:
- exact method name
- whether the caller is App UI or Executa
- manifest capability declaration
- host API surface used
- user/admin grant state
Suggested reply you can post
Hi! Thanks for the careful report and for narrowing this down so clearly 
I reviewed the current Anna App / Executa file and upload surfaces, and the main issue appears to be an API-surface mismatch, rather than a single runtime failure.
What’s going on
There are multiple file/upload flows in Anna that look similar but are not interchangeable:
Because of that, storage/files/upload_inline is not the right method name for the flow you’re trying to use, so Method not found on that name is expected.
Why the results look inconsistent
Your findings still make sense:
storage/files/upload_inline not found
host/uploadFile recognized
- permission/grant error once
host/uploadFile is tried
That pattern usually means:
- one method name belongs to the wrong surface
- another method is valid, but uses a different permission model
Permission clarification
For Executa host upload:
- use
host/uploadFile
- declare
host_capabilities: ["host.upload"]
- ensure the upload grant is enabled
For APS Files:
- use the persistent storage/files flow
- App side:
anna.files.upload_init
anna.files.upload_finalize
anna.files.download_url
- Executa side:
files/upload_begin
files/upload_complete
files/download_url
For App-side direct upload:
- use
upload.inline
upload.negotiate
upload.confirm
So upload.inline and host.upload do not cover the same layer.
Best next step
A very practical way to verify behavior is to test the repo demos first, especially:
- APS Files Demo
- Files via Executa
Those examples are useful as a known-good baseline. If they work but your app still fails, the difference is likely in:
- method name
- selected surface
- capability declaration
- grant configuration
Helpful demo flow
A good local validation flow is:
anna-app login --host https://anna.partners
anna-app apps push
- Rediscover Local for the bundled Executa
- Enable Persistent Storage in the plugin permissions dialog
- Install the working draft from Developer Console
- Open the demo in chat
- Save a file like
notes/hello.txt
- Test link/list actions
If that works, APS Files is functioning correctly and the remaining issue is probably in the app’s chosen API path rather than a platform-wide upload failure.
Happy to help further if you want to map your exact use case to the correct surface:
- app uploads a durable file
- Executa stores persistent APS content
- Executa returns a temporary uploaded artifact
