manifest.json sits at the package root. Fields are validated strictly, and unknown fields cause an error. Valid fields only mean the manifest is well formed; install-time authorization is handled separately.
Identity and compatibility
Both
apiVersion and engines.gugu are used for market compatibility selection. A gugu Beta with the same version number may support a different API, so 0.2.57 alone is not enough. Using chat:read requires at least API 6, file location links use API 7, subtitle uses API 8, and gugu.forum uses API 9.
Pages, background, and tools
Paths must stay inside the package: no absolute paths, backslashes, or
. or .. segments. From API 5, tool-only Apps can omit HTML and tabs; clicking one opens gugu’s settings and status page. Declaring programs or skills requires requesting agents:tools.
Each regular page has these fields:
opensFiles makes the App a candidate way to open those files. The user’s choice takes priority. When several Apps declare the same file, the person chooses.
Permissions
permissions.capabilities allows up to 12 items. permissions.network allows up to 16 bare host names.
Declare only one scope per family. For example, do not declare both
agents:read and agents:read:all. Permissions can be revoked individually, so read getContext().capabilities at runtime.
network takes host names only, such as api.example.com or *.example.com, without protocol, port, or path. Only HTTPS/WSS work. IP literals, localhost, and internal network names are rejected. Declaring a domain does not allow remote scripts. For detailed limits, see Development and debugging.
firstRun, featured, and unlisted are index fields of the market listing and cannot go in the manifest.