---
sidebar:
  hidden: true
title: roboto.domain.skills.record
---
## Module Contents

### MAX_SKILL_DESCRIPTION_LENGTH

```python
roboto.domain.skills.record.MAX_SKILL_DESCRIPTION_LENGTH = 500
```

`from roboto.domain.skills import MAX_SKILL_DESCRIPTION_LENGTH`

[Source](https://github.com/roboto-ai/roboto-python-sdk/blob/main/src/roboto/domain/skills/record.py#L17-L17)

### SkillAccessibility

```python
class roboto.domain.skills.record.SkillAccessibility
```

`from roboto.domain.skills import SkillAccessibility`

[Source](https://github.com/roboto-ai/roboto-python-sdk/blob/main/src/roboto/domain/skills/record.py#L20-L32)

Bases: `roboto.compat.StrEnum`

Controls who can see and edit a skill.

**Attributes**

- **SkillAccessibility.Org** = `'org'`: All members of the owning org can see and invoke the skill. Only the author can edit.
- **SkillAccessibility.OrgEditable** = `'org-editable'`: All members of the owning org can see and invoke the skill, and any member who has subscribed to it can also edit its versions, name, and tags. Changing the skill's accessibility and deleting the whole skill remain author-only.
- **SkillAccessibility.Private** = `'private'`: Only the author (`created_by`) can see, edit, or invoke the skill.

### SkillRecord

```python
class roboto.domain.skills.record.SkillRecord(/, **data: Any)
```

`from roboto.domain.skills import SkillRecord`

[Source](https://github.com/roboto-ai/roboto-python-sdk/blob/main/src/roboto/domain/skills/record.py#L35-L55)

Bases: `pydantic.BaseModel`

Top-level skill identity, ownership, and visibility.

A skill on its own carries no procedure content — see [`SkillVersionRecord`](/reference/python-sdk/roboto/domain/skills/record#roboto.domain.skills.record.SkillVersionRecord).

**Parameters**

- **data** (`Any`)

**Attributes**

- **SkillRecord.accessibility** (`SkillAccessibility`)
- **SkillRecord.created** (`datetime.datetime`)
- **SkillRecord.created_by** (`str`)
- **SkillRecord.modified** (`datetime.datetime`): Last edit timestamp. Skill mutations are author-only, so the editor is always `created_by` — no separate `modified_by` field is stored.
- **SkillRecord.name** (`str`)
- **SkillRecord.org_id** (`str`)
- **SkillRecord.skill_id** (`str`)
- **SkillRecord.tags** (`list[str]`) = `None`: Free-form labels for categorization (e.g. `"qa-review"`, `"experiments"`). Skill-level metadata, not version-scoped — they describe what the skill is for, not how a specific version implements it. Edited via the changeset fields on [`UpdateSkillMetadataRequest`](/reference/python-sdk/roboto/domain/skills/operations#roboto.domain.skills.operations.UpdateSkillMetadataRequest) (`put_tags` / `remove_tags`).

### SkillSubscriptionRecord

```python
class roboto.domain.skills.record.SkillSubscriptionRecord(/, **data: Any)
```

`from roboto.domain.skills import SkillSubscriptionRecord`

[Source](https://github.com/roboto-ai/roboto-python-sdk/blob/main/src/roboto/domain/skills/record.py#L83-L101)

Bases: `pydantic.BaseModel`

Per-user state for a single skill.

Created when a user subscribes to a skill (or authors one — authors are auto-subscribed at create time). Carries the user's choice of which version, if any, should be exposed to the AI auto-invoke registry. `ai_version=None` means the user is subscribed but has not enabled the skill for AI auto-invoke; manual chip-invocation still works.

**Parameters**

- **data** (`Any`)

**Attributes**

- **SkillSubscriptionRecord.ai_version** (`int | None`) = `None`: If set, the AI's `LoadSkillTool` registry surfaces this exact version of the skill to this user. If `None`, the skill is hidden from AI auto-invocation for this user. Manual invocation works regardless.
- **SkillSubscriptionRecord.skill_id** (`str`)
- **SkillSubscriptionRecord.subscribed** (`datetime.datetime`): When the subscription was created.
- **SkillSubscriptionRecord.user_id** (`str`)

### SkillSummary

```python
class roboto.domain.skills.record.SkillSummary(/, **data: Any)
```

`from roboto.domain.skills import SkillSummary`

[Source](https://github.com/roboto-ai/roboto-python-sdk/blob/main/src/roboto/domain/skills/record.py#L104-L124)

Bases: `pydantic.BaseModel`

Compact projection of a skill plus its latest version (if any).

Also includes the caller's personal subscription state for the skill, when one exists. `subscription=None` means the caller has neither authored nor subscribed to the skill.

**Parameters**

- **data** (`Any`)

**Attributes**

- **SkillSummary.latest_version** (`SkillVersionRecord | None`) = `None`: The MAX(version) row for this skill. Always populated for summaries returned from the public API: `Skill.create()` makes the skill row and v1 atomically, and deleting the last version cascades to delete the parent skill in the same transaction. The `Optional` is defense-in- depth for repo-direct callers (test fixtures, manual SQL) and should not be treated as a real branch by SDK consumers.
- **SkillSummary.skill** (`SkillRecord`)
- **SkillSummary.subscription** (`SkillSubscriptionRecord | None`) = `None`: The caller's subscription row for this skill, if any. Populated by the server based on the caller's identity; not used in INSERT or UPDATE payloads.

### SkillVersionRecord

```python
class roboto.domain.skills.record.SkillVersionRecord(/, **data: Any)
```

`from roboto.domain.skills import SkillVersionRecord`

[Source](https://github.com/roboto-ai/roboto-python-sdk/blob/main/src/roboto/domain/skills/record.py#L58-L80)

Bases: `pydantic.BaseModel`

A single, mutable version of a skill's content.

**Parameters**

- **data** (`Any`)

**Attributes**

- **SkillVersionRecord.body** (`str`): The procedure text the model executes when the skill is invoked.

- **SkillVersionRecord.created** (`datetime.datetime`)

- **SkillVersionRecord.description** (`str`) = `None`: Short \`\`when to use'' text. Surfaces verbatim in the LoadSkillTool description.

- **SkillVersionRecord.modified** (`datetime.datetime`)

- **SkillVersionRecord.relevant_topics** (`list[str]`) = `None`: Topic names this version's procedure investigates (e.g. `"/imu/data"`).

  Version-scoped content, not skill-level metadata — they track the `body`, so a new version may reference a different set. When the chat AI loads this skill and is given a dataset scope, it resolves each name to a topic schema and returns them alongside the body in the same `load_skill` tool result, sparing a follow-up `get_topic_schema` turn. Names only; field-level references live in the `body` text. Empty when the author listed none.

- **SkillVersionRecord.skill_id** (`str`)

- **SkillVersionRecord.version** (`int`)
