Agent skill

List Styling

by pnp in pnp/sharepoint-skills

Apply a visual style theme to any SharePoint list or document library using column formatting, view formatting, row templates, and tile layouts.

MITAuto-check passedDocuments & Office

Install List Styling

skills CLI
$ npx skills add pnp/sharepoint-skills --skill list-styling -a claude-code

Project install by default; add -g for ~/.claude/skills/.

GitHub CLI
$ gh skill install pnp/sharepoint-skills list-styling --agent claude-code

Project scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).

Manual copy
$ git clone --depth 1 https://github.com/pnp/sharepoint-skills.git skills-src && mkdir -p .claude/skills && cp -r skills-src/Skills/list-styling/list-styling .claude/skills/list-styling && rm -rf skills-src

Use ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.

Claude Code skills documentation · loads skills from .claude/skills/

Facts

Skill name
list-styling
GitHub stars
131
Token cost
~3.6k tokens
SKILL.md length
1,948 words
Files
1
Skills in repo
51
Repo updated
First seen
Licence
MIT

At a glance

Apply a visual style theme to any SharePoint list or document library using column formatting, view formatting, row templates, and tile layouts.

  • Works in 8 steps: Read the list schema — required before… → Read the style token file → Map the user's columns to the template → …
  • The user asks to style
  • SKILL.md covers Formatting Capabilities — Use…, The Style Application Workflow, rowFormatter Structure and SharePoint JSON Formatting…, plus 2 more sections
  • Reaches developer.microsoft.com

What it does

List Styling is an agent skill from pnp/sharepoint-skills. Apply a visual style theme to any SharePoint list or document library using column formatting, view formatting, row templates, and tile layouts. Use this skill whenever the user asks to style, theme, or visually transform a list or library. The goal is "I can't believe that's SharePoint" impact — not just color swaps, but fully art-directed views. This skill works with any style token file.

Its SKILL.md is about 3.6k tokens, which your agent loads only when the skill is triggered. It is a single SKILL.md file with no bundled scripts.

It sits in Documents & Office, covering Cloud office suites and Design tokens. It works with Microsoft SharePoint. The repository describes itself as: Skills for Copilot in SharePoint. The licence is MIT.

When your agent uses it

  • The user asks to style
  • Visually transform a list

Example prompts

  • “t believe that”
  • “/list-styling”

Workflow steps

8 steps, taken from the step headings in SKILL.md.

  1. Read the list schema — required before generating any JSON
  2. Read the style token file
  3. Map the user's columns to the template
  4. Generate formatters — in this order
  5. Create a custom view
  6. Preview and test before committing
  7. Mobile responsiveness
  8. Apply and verify

What it can do on your machine

Read from SKILL.md and the folder at commit aa9eb14. It shows what the files ask for, not the result of running them.

  • Tool permissions

    Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.

    From allowed-tools in the SKILL.md frontmatter.

  • Runs code

    No scripts in the folder and no shell commands in SKILL.md (its code samples are json).

    From the folder's file list and the shell code blocks in SKILL.md.

  • Network

    Hosts in commands or code, which the agent is likely to contact:

    • developer.microsoft.com

    From URLs in SKILL.md, links to its own repository left out.

  • Credentials

    Names no API keys, tokens, secrets or passwords.

    From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.

Context cost

List Styling loads about 3.6k tokens when it runs. Until then it costs about 102 tokens; SKILL.md has 1,948 words of instructions outside code blocks.

Always · name and description, kept in context so the agent knows when to use it
~102
When it runs · the whole SKILL.md, loaded when a task matches
~3.6k

Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.

Safety

Auto-check passed

The automated check found no risky patterns in SKILL.md.

Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); files beside SKILL.md are not scanned.

SKILL.md

The full file from pnp/sharepoint-skills at commit aa9eb14, republished under its MIT licence (© pnp). 1,948 words, ~3,627 tokens.

Download SKILL.mdSave it as .claude/skills/list-styling/SKILL.md (or your agent's skills folder).
name
list-styling
description
Apply a visual style theme to any SharePoint list or document library using column formatting, view formatting, row templates, and tile layouts. Use this skill whenever the user asks to style, theme, or visually transform a list or library. The goal is "I can't believe that's SharePoint" impact — not just color swaps, but fully art-directed views. This skill works with any style token file.

List Styling Engine

Transform SharePoint lists and document libraries into fully art-directed views. This is not a color palette swap — it's a complete visual redesign using every formatting capability SharePoint provides.

The bar: "I can't believe that's SharePoint."

Formatting Capabilities — Use ALL of These

SharePoint provides four levels of formatting. A properly styled view uses MULTIPLE levels together. Do not stop at column formatting.

Level 1: Column Formatting

Per-column rendering. Controls how individual cell values display.

  • Status badges, progress bars, date compositions
  • Applied via: Column header → Column settings → Format this column → Advanced mode
Level 2: View Formatting (additionalRowClass)

Adds CSS classes to existing rows. Lightweight — doesn't change layout.

  • Alternating row colors, conditional row highlighting (overdue tinting)
  • Applied via: View dropdown → Format current view → Advanced mode
Level 3: Row Template (rowFormatter)

REPLACES the entire row layout. This is the power move. Instead of SharePoint's default column grid, you define the complete HTML structure of each row.

  • Full card layouts with sidebars, composed metadata, multi-section rows
  • Can combine multiple columns into a single visual composition
  • Applied via: View dropdown → Format current view → Advanced mode (uses rowFormatter key instead of additionalRowClass)
Level 4: Tile Formatting

Gallery/card view layouts. Each item renders as a card instead of a row.

  • Standalone card designs with headers, bodies, footers, progress indicators
  • Applied via: Gallery view → Format current view → Advanced mode

Rule: Every style MUST use at least Level 1 + Level 3. Level 3 (rowFormatter) is what creates the "I can't believe it" impact. Column formatting alone is a 3/10.


The Style Application Workflow

Step 1: Read the list schema — required before generating any JSON

Know the columns, their internal names, types, and Choice values. Get this from SHAREPOINT.md if available, or ask the user. Do not generate any JSON until you have the actual column names and Choice values.

Step 2: Read the style token file

Load the matching style-{name}/style-{name}/SKILL.md. It contains design tokens and a rowFormatter reference template. The column names in that template ([$Status], [$Progress], [$Deadline]) are example placeholders that almost certainly do not match the user's list.

Step 3: Map the user's columns to the template

The style file's rowFormatter uses reference column names: [$Title], [$FileLeafRef], [$Status], [$Progress], [$Deadline]. These are examples — the user's list will likely have different column names.

Before applying the rowFormatter, you MUST adapt it:

Column-discovery checklist

Run this checklist against the schema you read in Step 1 before you start the find-and-replace. If you skip it, the generated JSON will reference columns that don't exist and the view will render blank cells.

  • List every column the user's list actually has, with its internal name (not display name). Spaces in display names become _x0020_ in internal names — the rowFormatter uses internal names.
  • Confirm the four role columns are present and capture each one:
    • Name/Title role → internal name = ______
    • Status role (Choice) → internal name = ______, choices = ______
    • Progress role (Number 0–100) → internal name = ______
    • Deadline role (DateTime) → internal name = ______
  • Capture the exact Choice values for the Status column — case-sensitive. "In Progress" ≠ "in progress" ≠ "InProgress".
  • Note the Number column scale. SharePoint stores 0.72 for a 72% slider but 72 for a free-entry number column. The rowFormatter must treat the value accordingly — do not assume.
  • Check the Date column format. Date-only vs Date-and-time changes which expression to use for overdue comparisons against @now.
  • List any "extra" columns the user wants surfaced (Owner, Priority, Category, etc.) and decide their slot per Step 3 rule 4 below.
  • List any "missing" template columns (e.g. the user has no Deadline) and mark the corresponding rowFormatter section for removal per Step 3 rule 5.

If any item above cannot be filled in from the schema, stop and ask the user — do not guess column names or choice values.

  1. Identify which column in the user's list serves each role:

    • Name/Title role: The item or document name (e.g., [$Title], [$FileLeafRef], [$ProjectName])
    • Status role: A Choice column with workflow states (e.g., [$Status], [$Phase], [$Stage])
    • Progress role: A Number column 0-100 (e.g., [$Progress], [$Completion], [$PercentComplete])
    • Deadline role: A DateTime column (e.g., [$Deadline], [$DueDate], [$TargetDate])
  2. Find-and-replace all [$ReferenceName] values in the rowFormatter JSON with the actual internal column names.

  3. Update the status_colors if() expressions to use the actual Choice values from the user's list. If they use "Active" instead of "In Review", or "Complete" instead of "Published", remap accordingly using the same color logic from the style tokens.

  4. If the user's list has ADDITIONAL columns not covered by the style template (e.g., Owner, Priority, Category), decide where to surface them:

    • In the sidebar/panel area alongside existing metadata
    • In the main content area replacing the "Open Item" button
    • As additional inline elements in the metadata row
  5. If the user's list is MISSING a column the template expects (e.g., no Deadline column), remove that section from the rowFormatter rather than letting it error.

The style's rowFormatter is a reference implementation. Adapt it to the user's data — do not paste it verbatim.

Step 4: Generate formatters — in this order

A. Row Template (rowFormatter) — DO THIS FIRST This is the centerpiece. The style token file defines the row layout structure. Generate the complete rowFormatter JSON that composes all columns into the styled row design.

B. Column Formatters — FOR COLUMNS NOT HANDLED BY rowFormatter If the row template covers Status, Progress, and Deadline inline, you may not need separate column formatters for those. But any column NOT included in the rowFormatter still needs its own formatter.

C. View Formatting — IF the style uses alternating rows or row highlighting Add additionalRowClass only if the style specifies it AND only if you're NOT using a rowFormatter (the two conflict — rowFormatter replaces the row entirely, so additionalRowClass has no effect when rowFormatter is active).

D. Tile Formatting — IF the user wants a gallery/card view Generate tile formatting for card-based layouts.

Step 5: Create a custom view

Tell the user to create a new view named after the style (e.g., "Neobrutalism") so the formatting doesn't affect the default "All Items" view.

Step 6: Preview and test before committing

Never apply formatting to the default view, and never tell the user to skip this step. A broken rowFormatter makes a list look empty and is a frightening experience for anyone who isn't a developer.

  1. Confirm the user is on the new view created in Step 5 — not "All Items" / "All Documents".
  2. Have the user paste the JSON via Format current view → Advanced mode and click Preview, not Save. The preview pane renders the row template against real data without persisting it.
  3. Walk through this checklist against the preview:
    • Every row renders (no blank rows, no [$ColumnName] literals leaking through).
    • Status pills show the right color for at least one row of each Choice value.
    • Progress bars show varied widths — not all 0% and not all 100%.
    • Deadline composition renders both a future date and a past date correctly (overdue treatment fires).
    • Clickable elements open the item (customRowAction with defaultClick works).
    • Resize the browser to ~600 px wide — see Step 7 below.
  4. Only after the preview checklist passes, tell the user to click Save.
  5. If anything in the checklist fails, iterate on the JSON — do not ask the user to save first and fix later. SharePoint will happily save a broken formatter.
Show full SKILL.md (744 more words)Show less
Step 7: Mobile responsiveness

A styled view that looks incredible on a 1920-px monitor and breaks on a phone is half a solution. SharePoint lists are rendered in three places that matter — desktop browser, Teams mobile, and the SharePoint mobile app — and they all hit narrow viewports.

Apply these rules to every rowFormatter you generate, regardless of style:

  • No fixed pixel widths greater than 240 px on row sections. The 280-px sidebar pattern that appears in several style templates clips badly on mobile. Either drop to ≤ 240 px or convert the layout to use flex with flex-basis and flex-grow so the section can shrink.
  • Wrap, don't overflow. Use flex-wrap: wrap on the outer row container so the sidebar drops below the main content on narrow viewports instead of being cut off. Set min-width: 0 on text children so long titles ellipsis-truncate rather than push their parent wider.
  • Hide secondary metadata under ~480 px, don't shrink it to unreadable. SharePoint supports "@window.innerWidth < 480 ? 'none' : 'flex'" style expressions — use them on tertiary chips (Owner, Category, sublabels) so the row stays scannable on a phone.
  • Hero number sizing. Progress percentages and status pills that look right at 32 px on desktop are oversized on mobile. Use a step-down expression: "@window.innerWidth < 480 ? '20px' : '32px'".
  • Touch targets. Anything customRowAction-clickable must be at least 44 × 44 px on mobile. Don't ship pill-clicks that only work on a mouse.
  • Test the preview at ~375 px (iPhone), ~600 px (tablet portrait), and ≥ 1024 px (desktop) before saving — SharePoint's preview pane respects window resizing.

If a style token file is missing responsive breakpoints, fill them in using the rules above and report this back to the user so they know the generated formatter is more responsive than the upstream style spec.

Step 8: Apply and verify

rowFormatter Structure

This is the most powerful tool. It replaces the entire row with a custom layout.

json
{
  "$schema": "https://developer.microsoft.com/json-schemas/sp/v2/view-formatting.schema.json",
  "hideSelection": false,
  "hideColumnHeaders": true,
  "rowFormatter": {
    "elmType": "div",
    "style": { ... },
    "children": [ ... ]
  }
}

Key behaviors:

  • hideColumnHeaders: true — hides the default column headers since the row template defines its own layout
  • Access any column value with [$InternalColumnName]
  • Can compose multiple columns into a single visual element
  • Supports all the same style properties as column formatters
  • Can include buttons, links, icons, conditional elements

Layout patterns the style file can define:

  • Card row: Full-width card per item with sidebar + main content
  • Split row: Left panel (metadata) + right panel (details)
  • Compact row: Single line with composed inline elements
  • Summary card: Tile-style card within a list view

SharePoint JSON Formatting Reference

Supported
  • elmType: div, span, a, img, svg, path, button
  • All CSS properties via inline style object
  • border-radius, text-transform, box-shadow, overflow, gap — all work
  • Colors: hex only (#ffffff)
  • Emoji in txtContent — works for icons
  • customRowAction with action: "defaultClick" — makes elements clickable to open the item
  • forEach — iterate over multi-value fields
  • Expressions: @currentField, [$ColumnName], @now, @me, @rowIndex
  • toString(), Number(), toLocaleDateString(), if(), indexOf(), substring()
NOT Supported
  • backdrop-filter, gradients, rgb()/rgba()/hsl()
  • Custom CSS classes in column formatters (only built-in SP classes in additionalRowClass)
  • CSS variables, hover pseudo-states
  • Nested if() beyond ~10 levels
Common Mistakes
  • Forgetting $schema
  • Display names vs internal names (spaces → _x0020_)
  • Case-sensitivity on Choice values
  • Number column stores 0.72 not 72
  • Trailing commas (invalid JSON)
  • Using additionalRowClass WITH rowFormatter (they conflict — rowFormatter wins)

What "11/10 Ambition" Looks Like

The difference between "formatted" and "I can't believe that's SharePoint":

Formatted (3/10)Styled (7/10)Art-Directed (11/10)
Colored status pillsStatus badges with style-specific shape/borderFull row template with composed status + progress + deadline in a card layout
Default progress bar colorsStyled progress bar (height, border, colors)Progress bar integrated into the row card with contextual coloring and inline label
Date stringDate with overdue coloringComposed deadline block with icon, date, sublabel, and conditional overdue treatment — all positioned within the row card
Default row gridAlternating row colorsComplete row template that recomposes the entire layout into the style's signature pattern
No view changesCustom view nameCustom view with rowFormatter + style-specific header treatment

The token file defines the row template. The engine generates it. RALPH iterates until it hits 11/10.


Application Instructions

Creating a styled view:

  1. Go to the list/library
  2. Click "Add view" → name it after the style (e.g., "Neobrutalism")
  3. Select columns to include: the columns identified in your Step 3 mapping
  4. Save the view
  5. Click the view dropdown → "Format current view" → "Advanced mode"
  6. Paste the rowFormatter JSON
  7. For any columns NOT covered by the rowFormatter, apply individual column formatters

Important: Always create a new view. Never modify "All Items" or "All Documents" directly.

© pnp, MIT. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file

Files

Just SKILL.md in Skills/list-styling/list-styling of pnp/sharepoint-skills.

Open the folder on GitHubat commit aa9eb14

Compare with similar skills

List Styling next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.

List Styling compared with similar skills
SkillStarsUsed inTokensAuto-checkLicenceRepo updated
List Styling this skillpnp/sharepoint-skills131—~3.6kAutomated safety check: PassMIT
Colleague DistillationZhixiangLuo/10xProductivity478—~2.1kAutomated safety check: NotesMIT
CLI Microsoft365pnp/cli-microsoft365-mcp-server131—~3.5kAutomated safety check: PassMIT
Spfx Releasepnp/docker-spfx134—~572Automated safety check: NotesMIT
Msgraphcodemie-ai/codemie-code294—~4.1kAutomated safety check: PassApache-2.0
CLI Microsoft365 Scriptpnp/cli-microsoft365-mcp-server131—~3.3kAutomated safety check: PassMIT

Similar skills

  • Colleague Distillation

    ZhixiangLuo/10xProductivity

    Distill a colleague into a reusable AI skill (work + persona) using tool connections — Slack, Slack AI, Jira, GHE, Bitbucket, Confluence, SharePoint, Teams, Outlook, Notion, Linear, Google Docs, and…

    478 GitHub stars~2.1k tokensUpdated 2 mo ago
    Documents & OfficeAuto-check: notes
  • CLI Microsoft365

    pnp/cli-microsoft365-mcp-server

    Use CLI for Microsoft 365 to manage Microsoft 365 tenants from the terminal.

    131 GitHub stars~3.5k tokensUpdated 2 days ago
    Documents & OfficeAuto-check passed
  • Spfx Release

    pnp/docker-spfx

    Automate SPFx version releases - branch, update files, commit, open PR, then tag after merge

    134 GitHub stars~572 tokensUpdated 3 mo ago
    Documents & OfficeAuto-check: notes
  • Msgraph

    codemie-ai/codemie-code

    Work with Microsoft 365 services via the Graph API — emails, calendar events, SharePoint sites (read and write), Teams chats and channel messages, OneDrive files, OneNote notebooks, Planner task…

    294 GitHub stars~4.1k tokensUpdated today
    Documents & OfficeAuto-check passed
  • CLI Microsoft365 Script

    pnp/cli-microsoft365-mcp-server

    Write PowerShell scripts using CLI for Microsoft 365 commands to automate Microsoft 365 management tasks.

    131 GitHub stars~3.3k tokensUpdated 2 days ago
    Documents & OfficeAuto-check passed
  • aai-cli Microsoft 365

    aai-labs/agent-barn

    Guides work with Outlook, OneDrive, SharePoint, Teams, Excel, To Do and Planner through aai-cli's Microsoft Graph commands, starting from which service owns the data.

    109 GitHub stars~1.2k tokensUpdated today
    Documents & OfficeAuto-check passed

More from pnp/sharepoint-skills

All 51 skills in this repo
  • Scorecard Matrix

    pnp/sharepoint-skills

    Generates a polished, self-contained HTML heatmap scorecard — a weighted comparison matrix where entities (rows) are scored across dimensions (columns), with computed totals, rank badges, and a…

    131 GitHub stars~1.9k tokensUpdated yesterday
    Auto-check passed
  • Analyze Document Library

    pnp/sharepoint-skills

    Analyze the current SharePoint document library in read-only mode and produce a structured summary of files, folders, file types, recent activity, naming issues, and organization recommendations.

    131 GitHub stars~899 tokensUpdated yesterday
    Auto-check passed
  • Broken Link Auditor

    pnp/sharepoint-skills

    Audits SharePoint pages, news posts, and hyperlink fields for broken or risky links and saves a self-contained HTML link-health report to the site.

    131 GitHub stars~2.5k tokensUpdated yesterday
    Auto-check passed
  • Custom Image Tagger

    pnp/sharepoint-skills

    Analyze selected construction images, create missing object metadata columns, and write concise visual metadata back to SharePoint columns using explicit image-analysis, list-schema, list-update…

    131 GitHub stars~1.2k tokensUpdated yesterday
    Auto-check passed
  • Dossier

    pnp/sharepoint-skills

    Renders a polished, self-contained HTML briefing from any data source — SharePoint lists, uploaded documents, or a verbal description.

    131 GitHub stars~1.9k tokensUpdated yesterday
    Auto-check passed
  • Exec Report

    pnp/sharepoint-skills

    Generates a polished, self-contained HTML executive report or dashboard from any data source — SharePoint lists, CSV exports, or a user description.

    131 GitHub stars~2k tokensUpdated yesterday
    Auto-check passed

Questions about List Styling

What does List Styling do?

Apply a visual style theme to any SharePoint list or document library using column formatting, view formatting, row templates, and tile layouts. List Styling is an agent skill from pnp/sharepoint-skills. Apply a visual style theme to any SharePoint list or document library using column formatting, view formatting, row templates, and tile layouts.

When should I use List Styling?

List Styling fits situations like: the user asks to style; visually transform a list.

How do I install List Styling in Claude Code?

Run `npx skills add pnp/sharepoint-skills --skill list-styling -a claude-code`. Or copy the skill folder (Skills/list-styling/list-styling in pnp/sharepoint-skills) into .claude/skills/list-styling in your project. Claude Code loads it when a task matches its description.

How do I install List Styling in Codex?

Run `npx skills add pnp/sharepoint-skills --skill list-styling -a codex`. Or copy the skill folder (Skills/list-styling/list-styling in pnp/sharepoint-skills) into .agents/skills/list-styling in your project. Codex loads it when a task matches its description.

Can I use List Styling in Cursor, Gemini CLI or GitHub Copilot?

Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add pnp/sharepoint-skills --skill list-styling -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/list-styling, .gemini/skills/list-styling, .github/skills/list-styling and .opencode/skills/list-styling in your project.

What does List Styling need to run?

SKILL.md names no scripts, command-line tools or credentials: List Styling is instructions for the agent only.

Does List Styling access the network?

SKILL.md names 1 domain. In commands or code: developer.microsoft.com; the agent is likely to contact it when it follows the instructions. This is read from the text; nothing was executed.

Is List Styling safe to install?

Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. Review the folder before installing.

What licence does List Styling use?

List Styling is published under the MIT licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.

How many tokens does List Styling use?

About 3.6k tokens (SKILL.md is roughly 15k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.

What are the alternatives to List Styling?

Skills that share tags, products or a category with List Styling: Colleague Distillation (ZhixiangLuo/10xProductivity, 478 stars), CLI Microsoft365 (pnp/cli-microsoft365-mcp-server, 131 stars), Spfx Release (pnp/docker-spfx, 134 stars) and Msgraph (codemie-ai/codemie-code, 294 stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.

Who maintains List Styling?

pnp (a GitHub organization) maintains it in pnp/sharepoint-skills, which has 131 GitHub stars. The repository holds 51 skills in this directory. The repository was last updated on October 6, 2026.

Source: pnp/sharepoint-skills on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.