harness compatibility layer — a BUILT-IN foundation module (ships in the
main jar, always present, gated by toggles) that exposes the AGENTS and
SKILLS vis' own project
dir and other AI coding HARNESSES (Claude Code, pi, opencode, the agents
standard, …) leave on disk to the vis model. The sibling of the shell
layer's POSIX compat. Vis reads its OWN project-local skills from
.vis/skills (highest precedence).
SKILLS are DOCUMENTS, never a verb: the prompt lists every skill
name — description (cheap — always present) and the WHOLE SKILL.md is
one document in the doc/apropos corpus, so apropos(text) finds it and
doc(name) prints it whole. Reading a skill has no session effect: there
is nothing to activate, nothing to re-read and no activation receipt.
The USER's /<name> slash is that same document with a POINTER, never a
copy: it expands to one sentence naming the skill (plus the owning project
and any bundled resource paths, which the body does not carry) and leaves
fetching it to the model, which is the only party that knows whether the
text is still in front of it. No injected body means nothing to remember
between two /<name>s: every skill surface is stateless.
AGENTS are the layer's one bare verb (bound like cat/rg via
:ext.engine/builtin? true) and an ALIAS to sub_loop:
agent(name, prompt) runs the named agent as a CHILD loop whose system
prompt IS that agent's markdown body, on its declared model.
Skills/agents/commands have no user toggle; the layer is always active.
`harness` compatibility layer — a BUILT-IN foundation module (ships in the main jar, always present, gated by toggles) that exposes the AGENTS and SKILLS vis' own project dir and other AI coding HARNESSES (Claude Code, pi, opencode, the agents standard, …) leave on disk to the vis model. The sibling of the shell layer's POSIX compat. Vis reads its OWN project-local skills from `.vis/skills` (highest precedence). - SKILLS are DOCUMENTS, never a verb: the prompt lists every skill `name — description` (cheap — always present) and the WHOLE `SKILL.md` is one document in the `doc`/`apropos` corpus, so `apropos(text)` finds it and `doc(name)` prints it whole. Reading a skill has no session effect: there is nothing to activate, nothing to re-read and no activation receipt. - The USER's `/<name>` slash is that same document with a POINTER, never a copy: it expands to one sentence naming the skill (plus the owning project and any bundled resource paths, which the body does not carry) and leaves fetching it to the model, which is the only party that knows whether the text is still in front of it. No injected body means nothing to remember between two `/<name>`s: every skill surface is stateless. - AGENTS are the layer's one bare verb (bound like cat/rg via `:ext.engine/builtin? true`) and an ALIAS to `sub_loop`: `agent(name, prompt)` runs the named agent as a CHILD loop whose system prompt IS that agent's markdown body, on its declared model. Skills/agents/commands have no user toggle; the layer is always active.
(agent name prompt)await agent(name, prompt) Run a named HARNESS AGENTS sub-agent in an isolated child loop; edits merge back. Returns {"agent", "task_id", "status", "answer", "changed_files"}. Unknown name: {"error", "available": [names]}. EXPENSIVE full LLM turn; delegable tasks only.
await agent(name, prompt)
Run a named HARNESS AGENTS sub-agent in an isolated child loop; edits merge back. Returns {"agent", "task_id", "status", "answer", "changed_files"}. Unknown name: {"error", "available": [names]}. EXPENSIVE full LLM turn; delegable tasks only.cljdoc builds & hosts documentation for Clojure/Script libraries
| Ctrl+k | Jump to recent docs |
| ← | Move to previous article |
| → | Move to next article |
| Ctrl+/ | Jump to the search field |