Rust core for the NPC system. Mirrors npcpy for function parity.
| Module | npcpy equivalent | Description |
|---|---|---|
npc_compiler |
npcpy.npc_compiler |
NPC, Team, Jinx, Agent/ToolAgent/CodingAgent |
gen |
npcpy.gen |
LLM response (genai), cost, sanitization, image gen |
llm_funcs |
npcpy.llm_funcs |
get_llm_response(), check_llm_command() |
memory |
npcpy.memory |
Conversation history, knowledge graph, embeddings, search |
tools |
npcpy.tools |
Tool registry, flatten_tool_messages() |
data |
npcpy.data |
Web search, file loading, text processing |
work |
npcpy.work |
Job scheduling, triggers |
ml_funcs |
npcpy.ml_funcs |
ML model fit/predict/score (via Python subprocess) |
npc_array |
npcpy.npc_array |
Vectorized inference, ensemble voting |
mix |
npcpy.mix |
Multi-agent debate |
ft |
npcpy.ft |
Fine-tuning (SFT via Python subprocess) |
kernel |
— | OS kernel: process table, scheduling, IPC (Rust-specific) |
process |
— | NPC process lifecycle, resource limits |
serve |
npcpy.serve |
HTTP REST API + MCP server |
ffi |
— | C-ABI for Flutter/Dart/mobile |
See COVERAGE.md for detailed function-by-function parity status.
cargo build --releaseuse npcrs::{Kernel, NPC, Team};
// Boot kernel with a team directory
let kernel = Kernel::boot("./npc_team", "~/npcsh_history.db")?;
// Execute through the agent loop (tools, delegation, etc.)
let output = kernel.exec(0, "what files are in this directory?").await?;
// Delegate to a specific NPC
let output = kernel.delegate(0, "corca", "refactor this function").await?;Build and run from npcsh/rust/:
cd npcsh/rust
cargo build --release
./target/release/npcshOr symlink as npc for direct .npc/.jinx execution:
ln -sf $(pwd)/target/release/npcsh ~/.local/bin/npc
# Run NPC files directly
npc ./npc_team/sibiji.npc "hello"
# Run jinx files directly
npc ./npc_team/jinxes/lib/sh.jinx bash_command="echo hi"
# Scaffold a new team
npc init# Add targets
rustup target add aarch64-linux-android x86_64-linux-android
# Set NDK env
export ANDROID_NDK_HOME=/path/to/ndk
export CC_aarch64_linux_android=$ANDROID_NDK_HOME/toolchains/llvm/prebuilt/linux-x86_64/bin/aarch64-linux-android34-clang
export AR_aarch64_linux_android=$ANDROID_NDK_HOME/toolchains/llvm/prebuilt/linux-x86_64/bin/llvm-ar
# Build
cargo build --lib --target aarch64-linux-android --release
# Copy to Flutter project
cp target/aarch64-linux-android/release/libnpcrs.so /path/to/flutter/android/app/src/main/jniLibs/arm64-v8a/Produces cdylib and staticlib for embedding in Flutter, Android, iOS, desktop apps. See src/ffi/mod.rs for the C-ABI exports and eazy-phone/lib/npc/npcrs_bindings.dart for the Dart bindings.
Uses the same ~/npcsh_history.db and conversation_history table schema as the Python npcsh. Both versions can share the same database.
MIT