Skip to main content
A skill is a reusable, versioned rule set that the Filed analyst applies during a run. Skills are scoped to a workspace (WORKSPACE skills, shared firm protocols) or to a single user (USER skills, personal protocols). The Playbook screen in the Filed web app is the human UI over this API. Skill operations are reached through the me query resolved as a WorkspaceUser, so every read and mutation on this page requires a workspaceToken (see Authentication). All requests go to:
There is no top-level skills or skill query. Both are fields on Workspace, reached through me { ... on WorkspaceUser { workspace { skills(...) } } }. The workspaceToken already identifies which workspace, so you never pass a workspace ID.

The Skill type

SkillKind!
The skill’s scope: WORKSPACE (shared firm protocol) or USER (personal protocol). Determines who can edit, promote, and delete it.
String!
The task family this skill applies to, for example tax-prep or tax-advisor. Skills are grouped and listed by taskType.
String!
The skill’s unique name within its taskType and kind. Together kind + taskType + name (+ optional returnType) identifies a single skill.
String!
A short human-readable summary of what the skill does.
String
The full rule body (the prompt / instruction text the analyst applies). May be empty for curated skills.
String!
ISO 8601 timestamp of the last edit.
String!
ISO 8601 timestamp of creation.
ReturnType
When set, the skill only applies to clients of this return type (F1040, F1041, F1065, F1120, F1120S, F990). When null, the skill applies to all return types.
String
A free-text condition describing when the skill should fire. Display only.
[SkillRule!]
The structured rules attached to the skill. See the SkillRule type.
[SkillStrategy!]
The strategies attached to the skill. See the SkillStrategy type.
SkillStatus
The skill’s lifecycle state: NONE, PENDING, APPROVED, DENIED, or DISABLED. PENDING means a USER skill has been shared with the firm and is awaiting approval; APPROVED/DENIED are the resolved promotion states; DISABLED means an admin has turned it off without deleting it.
UserShortDetails
The user who owns the skill. See UserShortDetails.
[SkillActivityEvent!]
The skill’s activity timeline (promotions, approvals, activations, edits). See SkillActivityEvent.

The SkillRule type

String!
The rule’s unique identifier within the skill.
String!
The severity the rule raises when it fires (for example critical, high, medium, low).
String!
The review category the rule maps to (for example data-entry, reconciliation).
String!
The knowledge domain the rule belongs to.
Int
An optional numeric tolerance the rule allows before flagging.
String
A template string used to render the rule’s title in review output.

The SkillStrategy type

String!
The strategy’s unique identifier within the skill.
String
A template string used to render the strategy’s title in planning output.

The SkillActivityEvent type

String!
What happened, for example created, updated, shared, approved, denied, enabled, disabled. The web app humanizes this by replacing hyphens and underscores with spaces and title-casing the result.
String!
ISO 8601 timestamp of the event.
UserShortDetails
The user who triggered the event. See UserShortDetails.
String
An optional human-readable note attached to the event (for example the denial reason from denySkillPromotion).

The UserShortDetails type

UserShortDetails is a federated entity. The ai subgraph declares it with only id; the platform subgraph resolves the human-readable fields.
ID!
The user’s account ID.
String!
The user’s display name.
String!
The user’s email.
String
An optional hash of the email (used for avatars).

List skills

Read workspace.skills to list skills for a task family. The web app’s Playbook screen calls this with showCuratedSkills: true to include Filed’s built-in curated skills alongside the workspace’s own.

Arguments

Boolean
When true, include Filed’s curated (built-in) skills in the result alongside the workspace’s own. Defaults to false.
String
Filter to one task family, for example tax-prep or tax-advisor. Omit to list skills across all task families.
ReturnType
Filter to skills that apply to a specific return type. Omit to list skills that apply to all return types.

View a single skill

Read workspace.skill to fetch one skill’s full detail, including its body, rules, strategies, and activity timeline. Identify the skill with kind + taskType + name (and optional returnType).

Arguments

SkillKind!
required
WORKSPACE or USER.
String!
required
The task family, for example tax-prep.
String!
required
The skill’s name within its taskType and kind.
ReturnType
When the skill is scoped to a return type, pass it to disambiguate. Omit for skills that apply to all return types.
workspace.skill returns null when no skill matches the supplied kind + taskType + name (+ returnType). Handle null as a not-found result.

The promotion workflow

A USER skill starts as a personal protocol visible only to its owner. To share it with the whole firm, the owner requests a promotion; a workspace admin then approves or denies it. On approval the skill becomes a WORKSPACE skill (or its WORKSPACE counterpart is activated) and applies for every user in the workspace. The three mutations below drive that flow. All require a workspaceToken.

Request a promotion

requestSkillPromotion submits a USER skill for firm-wide review. Its status becomes PENDING.
String!
required
The skill’s task family.
String!
required
The skill’s name.

Returns: Skill!

The promoted Skill with its updated status.

Approve a promotion

approveSkillPromotion approves a PENDING skill. Its status becomes APPROVED and it applies firm-wide.
String!
required
The skill’s task family.
String!
required
The skill’s name.

Returns: Skill!

The approved Skill with status: APPROVED.

Deny a promotion

denySkillPromotion denies a PENDING skill. Its status becomes DENIED and the optional reason is recorded on the activity timeline.
String!
required
The skill’s task family.
String!
required
The skill’s name.
String
An optional denial note. Stored on the SkillActivityEvent so the owner can see why the promotion was rejected.

Returns: Skill!

The denied Skill with status: DENIED.

Toggle a skill active or inactive

setSkillActive enables or disables a skill without deleting it. Disabling sets status: DISABLED so the skill stops applying but is still listed and can be re-enabled. Pass returnType when the skill is scoped to a return type.
String!
required
The skill’s task family.
String!
required
The skill’s name.
Boolean!
required
true to enable, false to disable.
ReturnType
When the skill is scoped to a return type, pass it to disambiguate. Omit for skills that apply to all return types.

Returns: Skill!

The updated Skill. Its status reflects the new active state (APPROVED when enabled, DISABLED when disabled).

Delete a skill

deleteSkill permanently removes a skill. For WORKSPACE skills this deletes the skill for the whole firm (curated skills revert to their default). For USER skills this deletes the personal protocol. The mutation returns true on success.
deleteSkill is irreversible. For a WORKSPACE skill it removes the protocol for every user in the firm. Prefer setSkillActive with active: false when you only need to turn a skill off.
SkillKind!
required
WORKSPACE or USER.
String!
required
The skill’s task family.
String!
required
The skill’s name.
ReturnType
When the skill is scoped to a return type, pass it to disambiguate. Omit for skills that apply to all return types.

Returns: Boolean!

true when the skill was deleted.
After any skill mutation, refetch GetTaskSkills and GetSkill so the Playbook UI reflects the new status. The web app calls client.refetchQueries({ include: ["GetTaskSkills", "GetSkill"] }) after every bulk action.