Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 5 additions & 0 deletions .changeset/exec-enriched-reads.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
"@inkeep/open-knowledge": patch
---

`exec` reads now surface more of what OpenKnowledge already tracks, in the human-readable listing an agent reads. `ls` shows a folder's available templates (name, description, scope), its description and tags, and direct-vs-recursive file counts with the most-recent date; `cat` shows the backlink and forward-link source paths (not just counts) and a coarse graph role (hub / connector / leaf / orphan); both render triage frontmatter (`status`, `type`) per file.
3 changes: 2 additions & 1 deletion docs/content/features/meta.json
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@
"timeline-and-recovery",
"github-sync",
"share",
"agent-activity"
"agent-activity",
"skills"
]
}
79 changes: 79 additions & 0 deletions docs/content/features/skills.mdx
Original file line number Diff line number Diff line change
@@ -0,0 +1,79 @@
---
title: Skills
icon: LuGraduationCap
description: "What's different about skills in OpenKnowledge: you edit them in the WYSIWYG editor like any doc, version them as content, and symlink one skill into every editor you use."
---

A skill in OpenKnowledge is content, not a config file: authored in the WYSIWYG editor, versioned like any doc, and symlinked into every editor from one source.

```html preview
<div style="padding:18px">
<div class="flow">
<div class="col">
<div class="lbl">edit in the WYSIWYG editor</div>
<div class="ed">
<div class="h3">Log a fishing trip</div>
<div class="p">Capture <b>date</b>, spot, and catch, then link the spot.</div>
<div class="meta">same editor as your docs &middot; versioned</div>
</div>
</div>
<div class="mid"><div class="arr">→</div><div id="inst" class="pill">install</div></div>
<div class="col">
<div class="lbl">symlinked into every editor</div>
<div id="eds" class="eds"></div>
</div>
</div>
<div class="cap">One <code>.ok/skills</code> source, symlinked into each editor. Edit once, no re-install, no drift.</div>
</div>
<style>
.flow{display:grid;grid-template-columns:1.15fr auto 1fr;gap:16px;align-items:center}
@media(max-width:620px){.flow{grid-template-columns:1fr}.mid .arr{transform:rotate(90deg)}}
.lbl{font:11px ui-monospace,monospace;text-transform:uppercase;letter-spacing:.04em;color:var(--muted-foreground);margin-bottom:6px}
.ed{border:1px solid var(--border);border-radius:12px;background:var(--card);padding:13px;box-shadow:0 1px 3px rgba(0,0,0,.06)}
.ed .h3{font-weight:600;font-size:14.5px}
.ed .p{color:var(--muted-foreground);font-size:12.5px;margin:5px 0}
.ed .meta{font-size:11.5px;color:var(--accent-ink)}
.mid{display:flex;flex-direction:column;align-items:center;gap:7px;color:var(--muted-foreground)}
.pill{font:700 11px ui-monospace,monospace;text-transform:uppercase;letter-spacing:.04em;border-radius:999px;padding:4px 11px;border:1px solid var(--border);transition:all .3s}
.pill.on{background:var(--accent-soft);color:var(--accent-ink);border-color:var(--primary)}
.eds{display:flex;flex-wrap:wrap;gap:7px}
.eds .chip{border:1px solid var(--border);border-radius:9px;padding:6px 11px;font-size:12.5px;color:var(--muted-foreground);opacity:.5;transition:all .5s}
.eds .chip.on{opacity:1;border-color:var(--primary);background:var(--accent-soft);color:var(--accent-ink)}
.cap{margin-top:14px;color:var(--muted-foreground);font-size:12px}
.cap code{font-size:11.5px}
</style>
<script>
var eds=["Claude Code","Cursor","Codex","OpenCode"],box=document.getElementById("eds"),inst=document.getElementById("inst"),chips=[];
eds.forEach(function(e){var c=document.createElement("div");c.className="chip";c.textContent=e;box.appendChild(c);chips.push(c);});
var reduce=matchMedia("(prefers-reduced-motion:reduce)").matches;
function run(){
inst.classList.remove("on");chips.forEach(function(c){c.classList.remove("on");});
setTimeout(function(){inst.classList.add("on");},250);
chips.forEach(function(c,i){setTimeout(function(){c.classList.add("on");},500+i*130);});
}
run();
if(!reduce)setInterval(run,3400);
</script>
```

## Edit skills like docs

A project skill is not a raw text file you hand-edit in a dotfile. It is a document in your base: written in the same WYSIWYG editor, versioned, with the same backlinks and live preview as the rest of your knowledge. Improving a skill is the same flow as improving any page.

## Write once, install everywhere

`install` **symlinks** the skill into each editor's skills directory (Claude Code, Cursor, Codex, OpenCode). Every editor points at the one `.ok/skills/<name>` source, so nothing is copied and nothing drifts: edit the skill once and every agent has the change, with no re-install.

## Two scopes

- **Project** skills live in the base, versioned and shared with it like any other content. The one every project ships with is what makes an agent behave well the moment you connect it: read and write through the tools, cite sources, keep the link graph healthy.
- **Global** skills follow you across every project on your machine.

<Callout type="warn">
Skills are an open standard, and a skill can carry scripts that run on your machine. Treat a third-party skill like installing software. Use trusted sources, and read what it does first.
</Callout>

## Up next

- **[Agentic search](../reference/agentic-search.mdx)**: how the agent reads your base.
- **[LLM wiki](../workflows/karpathy-llm-wiki.mdx)**: build a source-grounded knowledge base an agent curates, end to end.
Loading