Hi dora, thanks for sharing the screenshots and config. I think there are two separate things here.
- About seeing two apps in the developer dashboard
If you have ever run anna-app dev locally for an app, Anna will automatically create an app record on the platform for that local development app. So it can appear in the developer dashboard.
My guess is that, during development, you may have run anna-app dev for the text to animation app. If so, seeing it in the dashboard is expected behavior. It does not necessarily mean that an extra production app was published to the store.
As a distinction, when you push an app to the platform with:
anna-app apps push
Anna will create or update a draft version for that app, and the dashboard will show it as working. In your screenshot, Manim Studio has the working status, which matches the expected state after apps push.
- About the
tool_id binding in manifest.json / executa.json
The current config seems to directly use something like:
"tool_id": "tool-dev-manim-studio"
For this part, I recommend following the bundled Executa binding pattern from the example repo. In other words, instead of hardcoding the final server-side tool_id directly in the app’s manifest.json, use a local bundled handle to bind the app and its bundled Executa.
The recommended structure is roughly:
In app.json, declare the bundled Executa:
"bundled_executas": {
"manim-studio": {
"path": "./executas/manim-studio"
}
}
Then in manifest.json, reference that bundled handle:
"required_executas": [
{
"tool_id": "bundled:manim-studio",
"min_version": "0.1.0",
"version": "latest"
}
]
And in the corresponding executas/manim-studio/executa.json, keep the metadata for that Executa itself, for example:
{
"slug": "manim-studio",
"name": "Manim Studio",
"version": "0.1.0",
"executa_type": "tool"
}
The benefit of this pattern is that bundled:manim-studio is a stable app-local reference. When you run the anna-app apps push / publish flow, the CLI/platform will resolve that bundled handle into the real server-generated tool_id. This helps avoid confusion between local dev apps, pushed apps, and server-side Executa IDs.
For more complete details, I recommend checking these two tutorial posts. They walk through the full flow from app creation and local dev to push, bundled Executa packaging, and release:
So in short: the text to animation entry in the dashboard was most likely created by a previous local anna-app dev run, which is normal. For Manim Studio, I suggest switching to the bundled:<handle> binding pattern used in the examples, so the later push / publish flow is more stable and less likely to run into ID confusion.