Agents & skills

The workforce that compounds.

An agent is an OpenCode agent: markdown at baseline, and past that your own tools, plugins, models and a per-capability permission tree. A grant in kortix.yaml decides what it reaches — its machine, its connectors and channels, its secrets, its skills. A skill encodes how your company does one specific job. Both are files in your repo. Both are reviewed like code.

OpenCode-native · Versioned · Deny by default · Human-merged

An agent is
An OpenCode agent, plus its grants
A skill is
A folder with a SKILL.md
Governance
Deny by default
Both land via
A change request to main
What an agent is

Two files. No hidden object behind them.

An agent has exactly two homes. The markdown file carries how it thinks — its prompt, its mode, its model, its permission tree — and it is a stock OpenCode agent file, because Kortix adds no dialect to it. The manifest block carries what it may touch. Nothing about an agent lives in a database you cannot read.

.kortix/opencode/agents/kortix.md
---description: "Generic Kortix general knowledge worker.  Hands-on, full tool access, handles coding / research /  content / ops / data tasks end-to-end in an isolated  session sandbox. Edit this file to specialize."mode: primarypermission: allow--- You are a **Kortix general knowledge worker**. You are hands-on: you read, edit, run, search, fetch, andship. The session you are in is an isolated sandbox — anephemeral branch of this repo, your own /workspace — soyou can install, experiment, and recover freely. Only whatyou commit and push survives. ## How you work 1. **Understand first.** Read the relevant files, search   the codebase or web, gather the context. Do not guess.2. **Plan briefly.** For non-trivial work, jot the approach   to your todo list before touching anything.3. **Do the work.** Edit, write, run, fetch.4. **Verify.** Run the tests, hit the dev server, check the   output. Whatever proves the change actually works.5. **Commit small, meaningful chunks.** Each commit leaves   the repo in a working state.
Excerpt of the default agent in every new Kortix project.
kortix.yaml
# behavior lives in the .md — this block is governance onlydefault_agent: kortix agents:  kortix:    connectors: all    secrets: all    skills: all    kortix_cli: all   release-bot:    # this one gets almost nothing, on purpose    connectors: [github]    secrets: [GITHUB_AGENT_TOKEN]    kortix_cli: [project.cr.open] # a grant you leave out resolves to none.# there is no implicit access. grant explicitly.
  • The manifest rejects a behavioral field in the governance block, with an error pointing at the agent’s own .md file.
  • Markdown is the floor, not the ceiling: the whole OpenCode surface sits beside it in the same repo — your own TypeScript tools, plugins that hook the runtime, the model and provider config. An agent can pin its own model, or inherit the project, account and platform default in that order.
  • Two agents ship in every new project: kortix, the generalist, and memory-reflector, which curates the project brain.
Scoped reach

Deny by default. Never above the human.

The grant block covers the whole surface, not just tools: which sandbox image the agent boots, which connectors and channels it may call, which secrets it may receive, which skills it may invoke, and what it may do to Kortix itself. An agent with no grants gets none of it. You grant explicitly, or the answer is no — and on top of that sits a ceiling nothing in the config can lift.

.kortix/opencode/agents/memory-reflector.md
---description: "Reflects on recent project activity and  curates .kortix/memory/ — the project brain. Runs on a  cron and ends every run by opening a single change  request."mode: primarypermission:  edit: allow  bash:    "git *": allow    "kortix cr *": allow    "kortix sessions *": allow    "*": ask---
A real permission tree, from a real agent that ships.
allow
Runs freely. No prompt, no pause.
ask
Pauses for a human. The session waits for your answer.
deny
Blocked outright. Not a warning — a wall.

Set one action for a whole capability — read, edit, bash, task, websearch, or reaching outside the workspace — or add glob rules underneath it, so git push asks while everything else is allowed.

An agent never exceeds its human
The grant that applies at session start is what the agent declares, intersected with the role of whoever launched it. Grant an agent everything and it still gets exactly your own permissions — no more, on any path.
Some things can never be granted
Account-level administration — members, billing, creating projects — is outside the set an agent can hold at all. There is no value you can write in a file that turns that on.
Secrets are named, not shown
An agent’s block lists the secrets it may use by name — identifiers, never values. A session receives only the intersection of that grant and the role of whoever started it.
It cannot vote itself a raise
An agent can edit kortix.yaml — it is a file. But the edit only applies to sessions started after a person merges the change request, and even then the ceiling still holds.
What a skill is

How your company does one job, written down once.

A skill is a directory with a SKILL.md at its root. Frontmatter names it and says when to reach for it; the body is the procedure. Every session can load it, so the thing you explained to one agent in March is still true for every agent in November.

.kortix/opencode/skills/agent-browser/SKILL.md
---name: agent-browserdescription: Browser automation CLI for AI agents. Use when  the user needs to interact with websites — navigating  pages, filling forms, clicking buttons, taking  screenshots, extracting data, testing web apps. Triggers  include "open a website", "fill out a form", "scrape data  from a page", "test this web app", "login to a site".--- # agent-browser Fast browser automation CLI for AI agents. Chrome via CDPwith accessibility-tree snapshots and compact @eN refs. The CLI and a headless Chromium are **already installed**in this Kortix sandbox and on $PATH — you do not need torun any install step. ## Start here This file is a discovery stub, not the usage guide. Beforerunning any command, load the workflow content: ```bashagent-browser skills get core```
Excerpt of a skill that ships in every new project.

The description is the trigger

An agent decides whether to load a skill from its name and description alone. A vague description means the skill never fires — which is why the description reads like a list of the things a person would actually say.

More than prose

A skill directory can carry scripts, references and assets beside the markdown. The instruction and the tool that executes it ship together, so a procedure does not rot away from the thing it drives.

Granted, not global

The skills grant on an agent controls which skills it may load. A finance agent does not get handed the deployment runbook because it happened to be in the repo.

10
skills committed into a new project repo on day one
10
platform skills injected into every session at boot
2
agents in a new project: a generalist and a memory curator
Everything is files

The workforce is in the diff.

Agents and skills are not rows in a table you cannot see. They are markdown in the repo the cloud computer clones, so changing your workforce is the same act as changing your code — and it gets the same review.

  • your-company/
  • kortix.yamlgovernance: what each agent may touch
  • .kortix/opencode/the runtime your agents think in
  • agents/one OpenCode agent per file
  • kortix.mdthe generalist, in every project
  • memory-reflector.mdcurates the project brain on a cron
  • skills/one directory per skill
  • agent-browser/SKILL.mdhow this company drives a browser
The editor writes a branch, not a row
Customize is deliberately read-only. Pressing “Create new” or “Edit” opens a session that edits the files on a branch and opens a change request you review and merge. There is no button that silently changes how an agent behaves tomorrow.
Agents rewrite themselves — and get reviewed for it
An agent can sharpen its own prompt, add a skill, or tighten a permission rule. Every one of those is a commit on a branch in a change request a person merges. Self-improvement, human-merged. An agent never merges its own.
A workforce you can fork
Because it is all text in one repo, you can branch your whole workforce, try a different set of grants, roll it back, or hand the lot to a new project. The configuration travels with the clone.
Marketplace

Start from someone else’s work. Own it immediately.

Browse agents, skills and whole projects, add one to your project in a click, and what arrives is files in your repo — not a dependency you rent. It is labelled beta because sources and updates are still moving, and it is on for every project.

  1. 00

    Find it

    Browse the marketplace without signing in. Kortix ships its own registry — 62 agents, 61 skills and 62 project templates — and you can switch on curated outside registries with one click. None load by default.

  2. 01

    Add it

    One button. It starts an agent session that reads the item’s source and merges what fits into your project’s own files, rather than dropping a package in and hoping.

  3. 02

    It wires itself up

    If the item needs a key or a connected app, the agent hands you a fill-in link in the same turn. You never paste a credential into a chat, and the agent never sees the value.

  4. 03

    You approve it

    The session opens a change request. You read exactly which files are about to join your company, and merge when you are happy. Nothing lands unreviewed.

One thing this is not: a package manager. There is no lockfile, no version pin and no automatic update — an item you add becomes your own files, exactly like code you wrote. That is a deliberate trade, and it is the one we would make again.

Browse the marketplace
Build the workforce

Write it once. Every session knows it.

Open source and self-hostable. Any model, your keys. Kortix Cloud, your own VPC, or fully on-prem.

Kortix Agents & Skills | Kortix