-
Notifications
You must be signed in to change notification settings - Fork 1
The Livingrimoire Codex
TL;DR: Add new AI abilities with one line of code. Drop skill files into
DLCand you're done.
LivinGrimoire is a software design pattern that lets an AI "absorb" skills, with just one line of code needed to add a new ability.
Any skill (ability/feature) you want to add to the AI — speech-to-text, text-to-speech, telling time, weather, speech patterns, robotic controls, RSS feeds, search engine access, sleeping, note-keeping, running LLMs locally or via REST API — anything.
You add the skill with a single line. The pattern handles the rest behind the scenes. You can also add skills simply by copy-pasting skill files.
- Add the LivinGrimoire core directory (for your chosen language) to your project.
- Include the main file (recommended loop for the AI think cycle).
- Create a
DLCdirectory and place the personality file inside. - The personality file is your config — this is where you wire in skills.
DLC_personality.py
def add_DLC_skills(brain: Brain):
brain.add_skill(DiHelloWorld()) # triggers on "hello" → queues a response
brain.add_skill(DiSysOut()) # outputs the queued response to console- Run the main file.
To test: type hello → it prints out hello world.
- Add skill files to the
DLCdirectory to load them into the AI. - Modify the personality file in the
DLCdirectory:- Add a skill with one line of code.
- Comment out a line to toggle a skill off.
- Run the main file.
Note: This is a development kit, not a standalone application. Run it inside your IDE.
LLM skill gen prompt Prompt for generating a LivinGrimoire Skill with an LLM.
How to use:
Copy the full block, type the description of the skill you want the AI to have inside the {...} placeholder of the prompt below, and send it.
You are an expert engineer for the LivinGrimoire AI engine.
You write Python Skill classes that plug directly into it.
ARCHITECTURE
lobe 1 = logical — thinking/decisions, ear = raw user input
lobe 2 = hardware — output devices (TTS), ear = lobe-1 output string
lobe 3 = ear — STT/audio input
lobe 4 = skin — sensor input
lobe 5 = eye — visual input
All lobes share the same Kokoro instance.
skill_type 1 = regular — use for most skills: responses, reactions, sensors, timed autonomous actions, anything that should fire regardless of other skills.
skill_type 2 = backseat — use ONLY for skills that should stay silent when any type-1 skill already spoke that cycle. Examples: LLM chat fallback, TTS passthrough, ambient commentary. If in doubt, use type 1.
SKILL SKELETON
from LivinGrimoirePacket.LivinGrimoire import Skill
class DiXxx(Skill):
def __init__(self):
super().__init__()
self.set_skill_type(1) # 1=regular 2=continuous
self.set_skill_lobe(1)
def input(self, ear: str, skin: str, eye: str):
pass
def manifest(self): pass
def ghost(self): pass
def skillNotes(self, param: str) -> str:
if param == "notes": return "what it does"
if param == "triggers": return "what activates it"
return "note unavailable"
OUTPUT METHODS (lobe 1 only)
self.setVerbatimAlg(priority, "s1", "s2") # 1=highest 5=lowest
self.setSimpleAlg("sentence") # shortcut priority 4
self.algPartsFusion(priority, part1, ...)
INTER-SKILL COMMS
self._kokoro.toHeart["key"] = "value"
self._kokoro.toHeart.get("key", "null")
PERSISTENCE
self._kokoro.grimoireMemento.save("key", "value")
self._kokoro.grimoireMemento.load("key") # returns "null" if missing
RULES
- Class name starts with Di (sync) or Da (async)
- input() is the ONLY place to trigger output
- No blocking I/O in lobe 1
- skillNotes() mandatory — implement "notes" and "triggers"
Reply with ONLY a python code block, nothing else.
```python
<skill code here>
```
---
Build a skill that: {articulate skill description here}