# Skill Catalog and Runtime Context

> Advertise allowed skill metadata to a model without inserting every skill body into every request.

- Path: `Guides > Harness > Skills > Skill Catalog and Runtime Context`
- Human: https://looprig.com/docs/guides/harness/skills/catalog-and-runtime-context
- Machine index: https://looprig.com/llms.txt

The catalog answers “what can I load?” without paying the context cost of every instruction body. `SkillDescriber` returns only the validated name and description.

## Render the catalog

```text
<available_skills>
- weather-briefing: Turn weather observations into a practical recommendation.
- severe-weather: Escalate hazardous conditions using verified observations.
</available_skills>
```

Build this list from the same per-agent allow-set used by the loader. Do not advertise names the Loop cannot load. Keep the body behind the Skill tool.

## Inject per-turn context

Harness accepts a `RuntimeContextProvider` for volatile, per-turn blocks:

```go
type RuntimeContextProvider interface {
	Blocks(context.Context) []content.Block
}

definition, err := loop.Define(
	loop.WithRuntimeContext(skillCatalogProvider),
	loop.WithPolicyRevision("skills-catalog-v1"),
)
```

The provider has no error return, so catalog construction should be bounded and fail soft. Its behavior participates in the Loop policy revision. See [Runtime Context](/docs/guides/harness/loop/runtime-context.md) for lifecycle and fingerprint rules.

## Source and proof

- [Skill metadata interfaces](https://github.com/looprig/tools/blob/main/skill/skill_loader.go)
- [Harness runtime context contract](https://github.com/looprig/harness/blob/main/pkg/loop/runtime_context.go)
