Best for
- User wants to create a new AILANG package
- User encounters package-related errors (IMP010, LDR001, MOD010, type unification across packages)
- User asks about ailang.toml, ailang.lock, package imports, or package publishing
sunholo-data/ailang/.claude/skills/ailang-packages/SKILL.md
Create, validate, and publish AILANG packages with correct conventions. Use when user asks to create a new package, fix package errors, add dependencies, publish to registry, or import packages. Also use when encountering `IMP010`, `LDR001`, `MOD010`, or `export type` errors during package development.
Decision brief
Create, validate, and publish AILANG packages with correct conventions. Use when user asks to create a new package, fix package errors, add dependencies, publish to registry, or import packages. Also use when encountering IMP010, LDR001, MOD010, or export type errors during pack…
Compatibility matrix
| Platform | Status | Evidence | What to check |
|---|---|---|---|
| Codex | Not declared | No explicit evidence | Portability before use |
| Claude Code | Not declared | No explicit evidence | Portability before use |
| Cursor | Not declared | No explicit evidence | Portability before use |
| Gemini CLI | Not declared | No explicit evidence | Portability before use |
Installation
The source command is displayed only when detected. A safe inspection prompt is always available so your agent can explain every action before execution.
npx skills add https://github.com/sunholo-data/ailang --skill ".claude/skills/ailang-packages"Inspect the Agent Skill "ailang-packages" from https://github.com/sunholo-data/ailang/blob/9944e264e3b9043881978731dccd258f561082a3/.claude/skills/ailang-packages/SKILL.md at commit 9944e264e3b9043881978731dccd258f561082a3. List every install step, command, network request, credential, file read/write, external action, and rollback step. Explain whether it fits my task. Do not install or execute anything until I approve.
Workflow
1. Read resources/manifestreference.md for ailang.toml details 2. Read resources/errorsolutions.md when encountering errors 3. Run scripts/validatepackage.sh after creating a package 4. Follow the critical rules above — they prevent the most common failures
User wants to create a new AILANG package
@latest resolves once and writes the exact version to ailang.toml. Semver ranges (^, , =) are not supported — AILANG requires exact versions in manifests for determinism.
Review the “Create a Package” section in the pinned source before continuing.
@latest resolves once and writes the exact version to ailang.toml. Semver ranges (^, , =) are not supported — AILANG requires exact versions in manifests for determinism.
Permission review
The documentation includes network, browsing, or remote request actions.
# "sunholo/firestore" = { git = "https://github.com/sunholo-data/ailang-packages", subdir = "packages/firestore", tag = "main" }Evidence record
| Signal | Value | Evidence type | Meaning |
|---|---|---|---|
| Quality score | 92/100 | Computed | Documentation, specificity, maintenance, and trust rules |
| Repository stars | 33 | Source | Repository attention, not individual Skill quality |
| Compatibility | 0 platforms | Source | Declared in the catalog source record |
| Usage guide | automated source guide | Editorial | Generated or reviewed according to the visible evidence level |
Pinned source
Create, validate, and publish AILANG packages with correct conventions. Use when user asks to create a new package, fix package errors, add dependencies, publish to registry, or import packages. Also use when encountering IMP010, LDR001, MOD010, or export type errors during package development.
ailang.toml, ailang.lock, package imports, or package publishingimport pkg/ or import ./ paths that aren't resolvingailang init package --name vendor/name
ailang init package --name sunholo/mylib --module-prefix mylib --dep sunholo/config
ailang install sunholo/auth # Install latest version (resolves from registry)
ailang install sunholo/auth@latest # Same as above
ailang install sunholo/[email protected] # Install exact version
@latest resolves once and writes the exact version to ailang.toml. Semver ranges (^, ~, >=) are not supported — AILANG requires exact versions in manifests for determinism.
ailang lock # Resolve dependencies → ailang.lock
ailang check --package . # Type-check all modules (cross-module resolution)
ailang test --package . # Run *_test.ail files
ailang publish --dry-run # Preview registry publication (rewrites path deps → registry versions)
ailang publish # Publish to registry
Hyphens parse as subtraction. Directory names can have hyphens, but module paths must use underscores.
Directory: packages/billing-store/
Module: module sunholo/billing_store/customers_repo
Import: import pkg/sunholo/billing_store/customers_repo (getCustomer)
./ for intra-package sibling importsThree-way import distinction — locality is explicit at the point of use:
import ./plan (Plan, lookupPlan) -- LOCAL: sibling in same package
import pkg/sunholo/firestore/client (getDoc) -- EXTERNAL: different package
import std/result (Ok, Err) -- STDLIB: bundled
./ resolves in module namespace (not filesystem): if current module is sunholo/billing_entitlements/entitlement, then ./plan normalizes to sunholo/billing_entitlements/plan.
import ./plan (Plan, lookupPlan, freePlan) -- sibling
import ./sub/helpers (validate) -- child directory
pkg/ self-imports also work (backward compatible) but ./ is preferred.
export typeTypes used by other packages need export type, not just type. Without it, consumers get IMP010: symbol not exported.
-- WRONG: only visible within this module
type Customer = { name: string, email: string }
-- CORRECT: visible to importing packages
export type Customer = { name: string, email: string }
This applies to record types AND ADTs:
export type ProposalStatus = PendingApproval | AwaitingPayment | Approved
export type RequestedBy = Human | Agent(string)
Ok and Err explicitlyThey are NOT in the auto-imported prelude:
import std/result (Ok, Err)
[package]
name = "sunholo/firestore" # CORRECT
name = "firestore" # WRONG — single segment
name = "sunholo/billing/store" # WRONG — 3 segments
module_prefix for existing apps adopting packagesIf your project uses module myapp/... but you want to publish as sunholo/myapp:
[package]
name = "sunholo/myapp"
module_prefix = "myapp"
[exports]
modules = ["myapp/services/api", "myapp/handlers/parse"]
Zero source changes needed — existing module myapp/... declarations work as-is.
ailang publish automatically rewrites path deps ({ path = "../firestore" }) to registry version strings ("0.1.0") in the tarball. Your local ailang.toml is restored after. You don't need to change deps manually before publishing.
Publish in dependency order: packages with no deps first, then packages that depend on already-published packages.
See resources/manifest_reference.md for full field documentation.
[package]
name = "sunholo/billing_store"
version = "0.2.0"
edition = "1"
ailang = ">=0.9.5" # optional: minimum AILANG version
module_prefix = "myapp" # optional: for existing apps
description = "Firestore CRUD for billing records"
license = "Apache-2.0"
[exports]
modules = [
"sunholo/billing_store/customers_repo",
"sunholo/billing_store/subscriptions_repo"
]
[dependencies]
# Path deps (local development):
"sunholo/firestore" = { path = "../firestore" }
# Git deps (version pinned):
# "sunholo/firestore" = { git = "https://github.com/sunholo-data/ailang-packages", subdir = "packages/firestore", tag = "main" }
# Registry deps (published packages — use exact versions only, no ranges):
# "sunholo/firestore" = "0.1.0"
# Install latest: ailang install sunholo/firestore
[effects]
max = ["Net", "FS", "Env"] # effect ceiling — functions can't exceed this
[metadata]
tags = ["billing", "firestore"]
ai_summary = "Firestore CRUD for billing records"
[stability]
level = "experimental" # experimental | stable | frozen
ailang.lock is portable — it does not contain absolute paths. Registry and git package paths are resolved at runtime from the local cache (~/.ailang/cache/).
Docker workflow:
COPY ailang.toml ailang.lock .
RUN ailang install sunholo/auth # Populates cache from lock file versions
Key facts:
ailang install populates the cache; ailang lock resolves + downloadsThe resolver enforces flat dependencies — one version per package name. If a transitive dependency requires a different version than the root manifest pins, ailang lock fails with a structured error:
version conflict: sunholo/firestore
root requires: 0.2.0
already resolved: 0.1.0
transitive requires: 0.1.0 (via sunholo/billing_store)
resolution aborted
suggestion:
- republish sunholo/billing_store against sunholo/[email protected]
- or change root dependency to sunholo/[email protected] explicitly
Resolution rules:
ailang.toml are authoritativeHow to fix version conflicts:
ailang.toml to match the transitive versionSee resources/error_solutions.md for full troubleshooting guide.
| Error | Cause | Fix |
|---|---|---|
version conflict: pkg | Direct and transitive deps disagree on version | Republish transitive dep or change root pin (see error message) |
IMP010: symbol not exported | Type missing export keyword | Add export type Foo = ... |
LDR001: module not found | Missing dependency or wrong import path | Add dep to ailang.toml + ailang lock |
cannot unify type constructor X with TRecord | Type alias not exported across packages | Add export type to the defining module |
package not found in ailang.lock | Dependencies not resolved | Run ailang lock |
PAR_HYPHEN_IN_MODULE | Hyphen in module path | Use underscores: billing_store not billing-store |
Key has already been defined | Duplicate dep entry in ailang.toml | Remove duplicate, keep one format |
ailang check --package .[dependencies] (path deps OK — publish rewrites them)export type[exports].modules lists all public modules[effects].max includes all effects usedAGENT.md exists with usage guideThe registry validator (/version endpoint shows deployed version):
ailang check --package . on uploaded tarballsailang lock to download deps from registry before checkingscripts/validate_package.sh after creating a packageFrequently asked questions
Create, validate, and publish AILANG packages with correct conventions. Use when user asks to create a new package, fix package errors, add dependencies, publish to registry, or import packages. Also use when encountering IMP010, LDR001, MOD010, or export type errors during pack…
The source record exposes this install command: npx skills add https://github.com/sunholo-data/ailang --skill ".claude/skills/ailang-packages". Inspect the command and pinned source before running it.
Static rules flagged network in the source; the page lists the matching lines and excerpts.
Alternatives
Postpartum-genushyacinthus29/dotnet-skills
Build long-running .NET background services with `BackgroundService`, Generic Host, graceful shutdown, configuration, logging, and deployment patterns suited to workers and daemons.
vasilyu1983/AI-Agents-public
Guides iOS testing with XCTest, XCUITest, Swift Testing, simctl, and xcresult. Use when choosing destinations, controlling flakes, or parsing test artifacts for native apps.
garrytan/gbrain
Generate a publication-quality PDF from any brain page via the gstack make-pdf binary. Strips YAML frontmatter, sanitizes emoji, applies running headers and page numbers. Brain page is always the source of truth; PDF is a rendering.
NVIDIA/skills
How to swap the DeepStream CV detection model in the VSS Alerts Blueprint verification (2d_cv) mode - covers ONNX export, custom bbox parsers, compose mount gotchas, nvinfer config, runtime TRT engine build, deployment, and a segmentation-capable model addendum handoff.