Project layout
Every file in a Glxymesh project for Go, TypeScript and Python, who writes it, whether to commit it, and the naming rules the CLI enforces.
A project is one directory. gx.yml sits at the root, and each tool is one folder under tools/.
Only two things change with the language: the package files at the root and the code in each
function tool’s folder.
Directoryacme-helpdesk/
- gx.yml
- package.json
- pnpm-lock.yaml once
package.jsonlists packages - tsconfig.json
Directorylib/ optional code shared by several tools
- …
Directorytools/
Directoryget-weather/
- tool.yml an http tool: no code
Directorylist-open-issues/
- tool.yml
- tool.ts
export async function run(ctx, input) - tool.gen.ts generated
Inputtype
- .env.local
Directory.glxy/
- …
- .gitignore
Directoryacme-helpdesk/
- gx.yml
- go.mod
- go.sum
Directoryinternal/ optional code shared by several tools
- …
Directorytools/
Directoryget-weather/
- tool.yml an http tool: no code
Directorylist-open-issues/
- tool.yml
- tool.go
package listopenissues·func Run(ctx, in Input) - input_gen.go generated
Inputstruct
- .env.local
Directory.glxy/
- …
- .gitignore
Directoryacme-helpdesk/
- gx.yml
- requirements.txt packages, each pinned with its hashes
- pyrightconfig.json lets your editor find the SDK in
.glxy/ Directorylib/ optional code shared by several tools, with an
__init__.py- …
Directorytools/
Directoryget-weather/
- tool.yml an http tool: no code
Directorylist-open-issues/
- tool.yml
- tool.py
def run(ctx, input) - tool_gen.py generated
InputTypedDict
Directory.venv/ optional; local runs use its Python and packages
- …
- .env.local
Directory.glxy/
- …
- .gitignore
What each file is
Section titled “What each file is”| File | What it holds | Written by | Commit |
|---|---|---|---|
gx.yml |
Organization, project, language, server name and description, defaults. See the reference. | gxmesh init, then you |
Yes |
package.json · go.mod |
Packages for every tool in the project | You, or pnpm add · go get |
Yes |
pnpm-lock.yaml · go.sum |
Exact package versions and hashes. In Go, the platform fills in go.sum if you leave it out. |
Your package manager | Yes |
requirements.txt |
Python packages, each pinned to one version with its hashes. Each needs a wheel for Linux arm64 and Python 3.14: no source package is built. | uv pip compile requirements.in --generate-hashes --python-version 3.14 --python-platform aarch64-manylinux_2_34 -o requirements.txt |
Yes |
tools/<name>/tool.yml |
Name, kind, description, inputs, allowed hosts, keys, limits, tests. See the reference. | gxmesh new, then you, or Glxymesh’s AI |
Yes |
tool.ts · *.go in a tool’s folder |
The run function of a function tool, and its helpers |
You | Yes |
lib/ · internal/ |
Code shared by several tools | You | Yes |
tool.gen.ts · input_gen.go |
Typed inputs generated from tool.yml. Never edit them. |
gxmesh gen, which dev, call and test also run |
Yes |
.env.local |
Keys for local runs only, as NAME=value |
You | No |
.glxy/ |
The SDK copy, the local build and caches. Safe to delete. | gxmesh |
No |
Packages are declared once per project, not per tool, because every function tool in a project runs
in the same function.
A push sends only these files. Anything else in the directory, such as a README or test fixtures, stays on your machine.
What each kind of tool needs
Section titled “What each kind of tool needs”| Kind | Files in its folder |
|---|---|
http |
tool.yml only. A code file beside it fails the push, because nothing would run it. |
function |
tool.yml, the code, and the generated input file |
Naming rules
Section titled “Naming rules”- The file is
tool.yml, exactly. Atool.yamlis reported with a message telling you to rename it, rather than the folder being skipped silently. - A tool’s folder name is its name: 1–64 characters of
a-z,0-9and-, such aslist-open-issues. Thename:intool.ymlmust match it. - In Go, the package is the name without hyphens:
listopenissues. In Python, the folder is loaded as a package of its own, sofrom .tool_gen import Inputworks with the hyphen. - The project and organization slugs are 1–40 characters of
a-z,0-9and single hyphens. A few words the platform uses itself, such asapi,docsandsupport, aren’t allowed.
© 2026 Glxymesh