Imported from wogikaze/ark (
AGENTS.md). Install upstream withnpx skills add wogikaze/ark. Copyright stays with the author.
Project Agents.md Guide
This is a MoonBit project.
You can browse and install extra skills here: https://github.com/moonbitlang/skills
Project Structure
-
MoonBit packages are organized per directory; each directory contains a
moon.pkgfile listing its dependencies. Each package has its files and blackbox test files (ending in_test.mbt) and whitebox test files (ending in_wbtest.mbt). -
In the toplevel directory, there is a
moon.modfile listing module metadata.
Coding convention
-
MoonBit code is organized in block style, each block is separated by
///|, the order of each block is irrelevant. In some refactorings, you can process block by block independently. -
Try to keep deprecated blocks in file called
deprecated.mbtin each directory.
Git (agent workflow)
- After completing a task, always commit before handoff (required every session).
See
.cursor/rules/post-work-commit.mdc(validate first withmoon test/moon check, one logical commit per change, no push unless asked). Only skip when the user explicitly says not to commit in that turn.
WASI fixtures
When adding or promoting WASI coverage fixtures, read .cursor/skills/wasi-fixtures/SKILL.md
(regenerate commands, RUNTIME_EXCEPTIONS, runtime vs compile_only gates).
Tooling
-
moon fmtis used to format your code properly. -
moon ideprovides project navigation helpers likepeek-def,outline, andfind-references. See $moonbit-agent-guide for details. -
moon infois used to update the generated interface of the package, each package has a generated interface file.mbti, it is a brief formal description of the package. If nothing in.mbtichanges, this means your change does not bring the visible changes to the external package users, it is typically a safe refactoring. -
In the last step, run
moon info && moon fmtto update the interface and format the code. Check the diffs of.mbtifile to see if the changes are expected. -
Run
moon testto check tests pass. MoonBit supports snapshot testing; when changes affect outputs, runmoon test --updateto refresh snapshots. -
Prefer
assert_eqorassert_true(pattern is Pattern(...))for results that are stable or very unlikely to change. For snapshot tests that record structured debugging output, deriveDebugand usedebug_inspect, rather than derivingShowfor debugging. For solid, well-defined results (e.g. scientific computations), prefer assertion tests. You can usemoon coverage analyze > uncovered.logto see which parts of your code are not covered by tests.
