Quick Start
Create your first Luminarys skill in 5 minutes.
Prerequisites
Download luminarys and lmsk from releases. Generate a developer signing key (once):
lmsk genkey
1. Create a project
- AssemblyScript
- Go
- Rust
mkdir my-skill && cd my-skill
npm init -y
npm install --save-dev assemblyscript
npm install @luminarys/sdk-as
npx asinit .
Replace the generated asconfig.json with:
{
"targets": {
"release": {
"outFile": "dist/my-skill.wasm",
"optimizeLevel": 3,
"shrinkLevel": 1,
"exportRuntime": false,
"runtime": "incremental"
}
}
}
mkdir my-skill && cd my-skill
go mod init my-company/my-skill
go get github.com/LuminarysAI/sdk-go
cargo init --lib my-skill && cd my-skill
Add to Cargo.toml:
[lib]
crate-type = ["cdylib"]
[dependencies]
luminarys-sdk = "0.1"
serde = { version = "1", features = ["derive"] }
rmp-serde = "1.3"
2. Write a handler
- AssemblyScript
- Go
- Rust
import { Context } from "@luminarys/sdk-as";
/**
* @skill:id my-company.my-skill
* @skill:name "My Skill"
* @skill:version 1.0.0
* @skill:desc "My first skill."
*/
// @skill:method greet "Greet by name."
// @skill:param name required "User name"
// @skill:result "Greeting text"
export function greet(_ctx: Context, name: string): string {
return "Hello, " + name + "!";
}
// @skill:id my-company.my-skill
// @skill:name "My Skill"
// @skill:version 1.0.0
// @skill:desc "My first skill."
package main
import sdk "github.com/LuminarysAI/sdk-go"
// @skill:method greet "Greet by name."
// @skill:param name required "User name"
// @skill:result "Greeting text"
func Greet(ctx *sdk.Context, name string) (string, error) {
return "Hello, " + name + "!", nil
}
In Go, crate-level annotations (@skill:id, @skill:name, etc.) must be a doc comment directly before package main with no blank line.
/// @skill:id my-company.my-skill
/// @skill:name "My Skill"
/// @skill:version 1.0.0
/// @skill:desc "My first skill."
use luminarys_sdk::prelude::*;
/// @skill:method greet "Greet by name."
/// @skill:param name required "User name"
/// @skill:result "Greeting text"
pub fn greet(_ctx: &mut Context, name: String) -> Result<String, SkillError> {
Ok(format!("Hello, {}!", name))
}
3. Generate dispatch code
- AssemblyScript
- Go
- Rust
lmsk generate -lang as -out assembly .
# Creates assembly/lib.ts
lmsk generate -lang go .
# Creates main.go
lmsk generate -lang rust -out src ./src
# Creates src/lib.rs
4. Build & sign
- AssemblyScript
- Go
- Rust
npx asc assembly/lib.ts --target release
lmsk sign dist/my-skill.wasm
# → my-company.my-skill.skill
GOOS=wasip1 GOARCH=wasm go build -buildmode=c-shared -o my-skill.wasm .
lmsk sign my-skill.wasm
# → my-company.my-skill.skill
cargo build --target wasm32-wasip1 --release
lmsk sign target/wasm32-wasip1/release/my_skill.wasm
# → my-company.my-skill.skill
Verify the package:
lmsk info my-company.my-skill.skill
5. Deploy
Create a manifest and add it to your host config:
id: my-skill
path: skills/my-company.my-skill.skill
permissions:
fs: { enabled: false }
invoke_policy:
can_invoke: []
can_be_invoked_by: ["*"]
mcp:
mapping: per_method
http:
addr: ":8080"
skills:
- skills/my-skill.yaml
Start the host:
luminarys -config config/host.yaml
Your skill is now available at http://localhost:8080/mcp. Connect any MCP client and call my-skill/greet with {"name": "World"}.
Using LLM for skill development
Each SDK repository includes an AGENTS.md file — a system prompt for AI coding assistants. It contains the full annotation syntax, SDK API reference, build instructions, and manifest format for the corresponding language.
Copy AGENTS.md into your project root or point your LLM agent to it so it can generate correct skill code out of the box.
| SDK | AGENTS.md |
|---|---|
| AssemblyScript | sdk-as/AGENTS.md |
| Go | sdk-go/AGENTS.md |
| Rust | sdk-rust/AGENTS.md |
Next steps
- Annotations — full annotation reference
- Manifest — permissions and deployment options
- SDK Reference — file system, HTTP, shell, and more
- Skill Examples — complete examples in all three languages