#component-system #semantic #kit #typed #surface #opaque

slickit

Semantic, LLM-Interpretable Component Kit — typed component system

2 unstable releases

0.2.0 Mar 24, 2026
0.1.0 Mar 10, 2026

#672 in Artificial intelligence

Apache-2.0

25KB
435 lines

slickit

Semantic, LLM-Interpretable Component Kit. Foundation types for composable components.

What

Three types that let components be discovered, composed, and instantiated across languages:

  • Manifest — structural surface (type_url, source, requires, provides, relations)
  • TypedStruct — typed data envelope (type_url + opaque JSON value)
  • TypedRegistry — type_url → factory → instance

MSG framework: Manifest = Mechanics. Skills = Semantics. Governance = external.

Install

# Rust
cargo add slickit --features manifest

# Python
pip install slickit

# TypeScript (npm publish pending)
bun add slickit

Usage

Rust

use slick::{Manifest, TypedStruct, TypedRegistryBuilder};
use std::collections::HashMap;

// Describe a component
let manifest = Manifest {
    type_url: "cix.commands.v1.Recon".into(),
    source: "git+https://github.com/mox-labs/tools/recon".into(),
    requires: vec!["cix.v1.Target".into()],
    provides: vec!["cix.v1.ReconReport".into()],
    relations: HashMap::from([
        ("skills".into(), vec!["git+https://github.com/mox-labs/skills/recon".into()]),
    ]),
};

// Register and instantiate
let registry = TypedRegistryBuilder::<String, String>::new()
    .register("example.v1", |value| {
        serde_json::from_value::<String>(value.clone())
            .map_err(|e| e.to_string())
    })
    .build();

let instance = registry.create("example.v1", &serde_json::json!("hello")).unwrap();

Python

from slickit import Manifest, TypedStruct

manifest = Manifest(
    type_url="cix.commands.v1.Recon",
    source="git+https://github.com/mox-labs/tools/recon",
    requires=["cix.v1.Target"],
    provides=["cix.v1.ReconReport"],
    relations={"skills": ["git+https://github.com/mox-labs/skills/recon"]},
)

json_str = manifest.to_json()
manifest2 = Manifest.from_json(json_str)

TypeScript

import { Manifest } from "slickit";

const manifest = Manifest.fromObject({
    type_url: "cix.commands.v1.Recon",
    source: "git+https://github.com/mox-labs/tools/recon",
    requires: ["cix.v1.Target"],
    provides: ["cix.v1.ReconReport"],
    relations: { skills: ["git+https://github.com/mox-labs/skills/recon"] },
});

console.log(manifest.typeUrl); // "cix.commands.v1.Recon"

Manifest

Five fields. Pure structure.

type_url: cix.commands.v1.Recon
source: git+https://github.com/mox-labs/tools/recon
requires: [cix.v1.Target]
provides: [cix.v1.ReconReport]
relations:
  skills: [git+https://github.com/mox-labs/skills/recon]
  tested_with: [cix.flows.v1.ReconPipeline]
  • type_url — globally unique identity (namespace convention for kind)
  • source — where it lives (git URL, local path)
  • requires — input port declarations
  • provides — output port declarations
  • relations — extensible typed edges (skills, tested_with, replaces, etc.)

Dependencies

serde + serde_json. Nothing else.

License

Apache-2.0 — see LICENSE.

Dependencies

~0.4–1.3MB
~28K SLoC