glyphsteer
Use when steering retrieval with hidden in-band glyph markers — an LLM annotates a corpus with a controlled emoji/glyph vocabulary that biases search (lexical…
Skill by sancovp
Install
Works with Claude Code, Claude apps, Codex, Cursor, Gemini CLI, GitHub Copilot, VS Code, OpenCode, Goose, Windsurf. Read the repository before you give any tool access to your data.
npx agentmarket install skill/sancovp-glyphsteer
Asks which of your tools to add it to (Claude Code, Codex, Cursor, VS Code, Windsurf, Gemini CLI, Claude Desktop) and shows the change first. See https://agentmart.dev/cli.
Get the weekly diff
The weekly diff: one email a week with new agent tools, notable updates and grade changes, plus security alerts for tools you follow. Double opt-in, one-click unsubscribe.
About
Use cases: ml
Reviews
Write a reviewNo reviews yet. Installed it? Reviews come from verified installers only. How reviews work
Permissions
What this skill can do and what it asks for, from its SKILL.md. Checked Oct 25, 2026.
- Tools
- No tools found
- Secrets
- None asked for
- Install scripts
- None found
Network hosts it talks to 1
codeload.github.com· found in install command
Files it touches
~/.claude/skills/glyphsteer
What's inside
- Skill name
glyphsteer- Description
- Use when steering retrieval with hidden in-band glyph markers — an LLM annotates a corpus with a controlled emoji/glyph vocabulary that biases search (lexical facet + dense direction) but is stripped from returned text; also for grading a RAG corpus and searching with grade badges, and for authoring/persisting a glyph "legend". Triggers on "glyphsteer", "emoji annotation", "hidden retrieval markers", "steer RAG", "grade a corpus", "facet by sentiment/grade", "glyph legend", "annotate corpus for search".
- License
- MIT
- Instructions
- 132 lines in SKILL.md · view on GitHub
Files (1)
- SKILL.md
SKILL.md (first lines)
# GlyphSteer — how to use it
Dual-regime retrieval steering via **compiled in-band glyph annotations**. An LLM writes a
controlled glyph vocabulary onto a corpus; the markers steer retrieval and then **vanish
from the output**. Package: `glyphsteer`, with its `grammar` extra for the syntax gate.
**Run its Python** from a plugin install with `uv run --no-project --with "glyphsteer[grammar]==0.3.0" --with "agent-skilltree>=0.4.0" python3` — pipe a block in as `python3 - <<'PY'` … `PY` — and from a clone of the public repository where `./install.sh` ran, with the clone's `python3`.
**Run `skilltree`** from a plugin install as `uvx --from "agent-skilltree>=0.4.0" skilltree …`, and from a clone where `./install.sh` ran, as `skilltree …` in the environment it installed into.
> A `packages/...` path below is in a clone of the public repository: run it from the clone's
> root (`.../chaincompiler`).
## The mental model (3 facts)
1. **Sidecar split** — a chunk has two representations that need not match:
`indexed-form = clean ⊕ glyph_code` (what gets matched) vs `returned-form = clean`
(what the reader sees). The marker steers findability, then disappears.
2. **One axis, two renderings** — FTS5's tokenizer **drops emoji**, so each axis carries
BOTH: a **glyph** (emoji = the *dense* marker, a learned direction) AND a **tag** (ASCII
sentinel like `gsxnegative` = the *lexical* marker, a rare max-IDF facet). You facet with
the glyph; the library resolves it to its tag internally.
3. **The vocabulary is the gate** — annotation only counts if the glyph is in the vocab;
unknown glyphs are dropped (syntax-only discipline, like the `*CC` compilers).
## Quickstart — annotate, index, facet, return clean (zero deps)
```python
from glyphsteer import SENTIMENT, Chunk, RuleAnnotator, annotate_chunk, build_index, search
corpus = [Chunk("a", "the deploy pipeline passed and works great"),
Chunk("b", "the deploy pipeline crashed, this is broken and terrible")]
ann = RuleAnnotator.keyword(SENTIMENT, {
SENTIMENT.by_name("positive").glyph: ["great", "works", "passed"],
SENTIMENT.by_name("negative").glyph: ["broken", "terrible", "crashed"],
})
chunks = [annotate_chunk(c, ann, SENTIMENT) for c in corpus] # attaches the glyph code
con = build_index(chunks, SENTIMENT) # 2nd arg = the vocab
neg = SENTIMENT.by_name("negative").glyph
hits = search(con, "deploy", facet=neg, vocab=SENTIMENT) # facet by a glyph
print(hits[0]["text"]) # CLEAN text — the glyph is NOT in it (the hide)
```
Key calls: `annotate_chunk(chunk, annotator, vocab)` · `build_index(chunks, vocab)` ·
`search(con, query, facet=glyph, vocab=...)` · `facet_only(con, glyph, vocab=...)`.
The hide invariant: `from glyphsteer import check_hidden; assert check_hidden(chunk, vocab)`.
## Grade a corpus, search shows grades (the flagship)
`GRADE` is a built-in quality vocabulary (🏆 excellent / ✅ good / ⚠️ fair / ❌ poor). An LLM
grades each chunk; search returns the grade badge and can facet to a grade.
```python
from glyphsteer import GRADE, GRADE_RANK, Chunk, build_index, search, grade_label
from glyphsteer.index import facet_only
EXC, POOR = GRADE.by_name("excellent").glyph, GRADE.by_name("poor").glyph
corpus = [Chunk("c1", "use parameterized queries to prevent SQL injection", code=EXC),
Chunk("c2", "just concatenate user input into the SQL string", code=POOR)]
con = build_index(corpus, GRADE)
for h in search(con, "SQL", vocab=GRADE):
print(grade_label(GRADE, h["code"]), h["text"]) # badge + clean text
audit = facet_only(con, POOR, vocab=GRADE) # the "what's bad" view
```
Grading rides the **lexical** regime — a grade is a filter/display label, NOT a semantic
direction (quality ≠ sentiment: a correct chunk can be grim, an upbeat one can be junk).
Runnable demo, from a clone: `python3 packages/glyphsteer/experiments/grade_demo.py`.
## Author your own glyph language + keep a legend
An LLM can invent its own vocabulary, persist it, and accumulate a master legend.
```python
from glyphsteer import author, save_legend, load_legend, merge, render_legend
V = author([ # tags auto-derived; raises on collision
{"name": "claim", "glyph": "📌", "description": "a factual assertion"},
{"name": "evidence", "glyph": "🔬", "description": "supporting data"},
])
save_legend(V, "legend.json") # persist the glyph↔meaning↔tag table
V2 = load_legend("legend.json")
master = merge(V, author([{"name": "risk", "glyph": "☢️"}])) # last-author-wins
print(render_legend(master))
```
## Wire it into ChainCompiler's skill search
`skilltree.search` facets the skill corpus by glyph (SkillTree is `agent-skilltree`, which
the uv line above names). **The legend you pass MUST contain the
glyph you facet on** — here we use the built-in `GRADE` vocab (which defines 🏆) and save it
as the legend. Put `glyphs: 🏆` in a SKILL.md's frontmatter, then:
```python
from skilltree.search import build_index, search
from glyphsteer import GRADE, save_legend
save_legend(GRADE, "grade_legend.json") # the facet glyph (🏆) lives here
con = build_index("path/to/skill/tree", vocab=GRADE) # reads `glyphs:` frontmatter → tags
trusted = search(con, "deploy", facet="🏆", vocab=GRADE) # only 🏆-graded skills; badge returned
```
CLI: `skilltree search ROOT "query" --facet 🏆 --legend grade_legend.json`.
(Facet on any glyph defined in the legend — your own authored vocab works the same way.)
## Syntax consistency (rulecatcher under it)
A glyph code is a little DSL, so it goes through ChainCompiler's lint/gate engine
(**rulecatcher**, via `chaincompiler.bridge`) — the same gate the `*CC` compilers use; the
`grammar` extra brings ChainCompiler and rulecatcher (the uv line above names it). Three verdicts:
`ok` · `orthogonal` (known glyphs, wrong order → steerable) · `syntax_break` (foreign token → fatal).
```python
from glyphsteer import GlyphGrammar, SENTIMENT
with GlyphGrammar(SENTIMENT) as gg:
gg.lint(SENTIMENT.code([SENTIMENT.by_name("positive").glyph,
SENTIMENT.by_name("urgent").glyph])).verdict # "ok"
lint = gg.lint("🔥😊") # urgent before positive
lint.verdict, lint.fix # "orthogonal", "😊🔥" (canonical reorder)
gg.lint_chain("gsxpositive -> gsxbogus").verdict # "syntax_break"
```
Gating is over the ASCII **tag** rendering (rulecatcher drops emoji, same as FTS5), so `lint`
first refuses, as `syntax_break`, whatever in a code is neither a vocabulary glyph nor theFrom sancovp/chaincompiler, MIT.
More from sancovp/chaincompiler
- 0.458score
chainforge
sancovp
Chain-of-reasoning (spoken, ends in a decision) — a diagram is a formalized relationship structure, never decoration — never begin by drawing; determine what…
SkillAFreshness: AClaude Code +9 - 0.458score
bandit-chain-system
sancovp
How the bandit (the default ChainSelector persona) rolls up the AC→CoR→SC algebra and CLOSES it into a domain-specific persona — a self-contained "bandit…
SkillAFreshness: AClaude Code +9 - 0.458score
chaincompiler
sancovp
Orientation when working IN the chaincompiler repo — what the system is, where things live, and the discipline.
SkillAFreshness: AClaude Code +9 - 0.458score
glyphsteer-dense
sancovp
Use when running GlyphSteer's DENSE regime — embedding-based emoji steering via the containerized ONNX sidecar.
SkillAFreshness: AClaude Code +9 - 0.458score
skilltree
sancovp
WHAT: turn a flat .claude/skills folder (or any folder of skills) into a walkable coordinate-addressed tree so the model loads one layer at a time instead of…
SkillAFreshness: AClaude Code +9 - 0.456score
boundary-keeper
sancovp
Chain-of-reasoning (spoken, ends in a decision) — a boundary defines inside, outside, interface, and crossing conditions — and abstraction layers stay stable…
SkillAFreshness: AClaude Code +9 - 0.456score
edge-typer
sancovp
Chain-of-reasoning (spoken, ends in a decision) — an arrow is not generic association, proximity is not causality, a container is not ownership — every…
SkillAFreshness: AClaude Code +9 - 0.456score
graph-auditor
sancovp
Chain-of-reasoning (spoken, ends in a decision) — an orphan node has no reason to exist, an ambiguous arrow is a lie, and invisible feedback is a hidden loop…
SkillAFreshness: AClaude Code +9 - 0.456score
diagram-compilation
sancovp
The master diagram-compilation AC — the whole walk from an unstructured concept to a validated legible diagram; each focus expands into its own sidechain…
SkillAFreshness: AClaude Code +9 - 0.455score
metaformal-self-test
sancovp
How to verify agent/COG/gate/AIOS behavior WITHOUT calling LLMs or writing tautology asserts — by triggering the real thing in the real substrate and…
SkillAFreshness: AClaude Code +9 - 0.454score
diagram-construction
sancovp
Skillchain — ac:diagram-compilation → ac:never-begin-by-drawing → cor:chainforge → Diagram-construction
SkillAFreshness: AClaude Code +9 - 0.452score
boundary-abstraction-pass
sancovp
The boundary pass — a system in, its explicit membrane out; membership is never implied, and nodes at incompatible abstraction levels never share a chain…
SkillAFreshness: AClaude Code +9
Signals
- Stars
- 0
- Forks
- 0
- Open issues
- 0
- Last commit (this folder)
- Oct 23, 2026 (4 days ago)
From GitHub (fetched Oct 24, 2026).
Details
- License
- MIT
- Repository
- github.com/sancovp/chaincompiler
- First seen
- Oct 24, 2026
- Last checked
- Oct 24, 2026
- Source
- GitHubgithub-graphql
More from sancovp
- 0.458score
bandit-chain-system
sancovp
How the bandit (the default ChainSelector persona) rolls up the AC→CoR→SC algebra and CLOSES it into a domain-specific persona — a self-contained "bandit…
SkillAFreshness: AClaude Code +9 - 0.458score
chainforge
sancovp
Chain-of-reasoning (spoken, ends in a decision) — a diagram is a formalized relationship structure, never decoration — never begin by drawing; determine what…
SkillAFreshness: AClaude Code +9 - 0.458score
glyphsteer-dense
sancovp
Use when running GlyphSteer's DENSE regime — embedding-based emoji steering via the containerized ONNX sidecar.
SkillAFreshness: AClaude Code +9 - 0.458score
skilltree
sancovp
WHAT: turn a flat .claude/skills folder (or any folder of skills) into a walkable coordinate-addressed tree so the model loads one layer at a time instead of…
SkillAFreshness: AClaude Code +9 - 0.458score
chaincompiler
sancovp
Orientation when working IN the chaincompiler repo — what the system is, where things live, and the discipline.
SkillAFreshness: AClaude Code +9 - 0.456score
boundary-keeper
sancovp
Chain-of-reasoning (spoken, ends in a decision) — a boundary defines inside, outside, interface, and crossing conditions — and abstraction layers stay stable…
SkillAFreshness: AClaude Code +9
Cite this page
glyphsteer skill. Agent Mart. https://agentmart.dev/skills/sancovp-glyphsteer (last updated 2026-10-24)