kotlin/multik-docs
Write and edit Writerside user documentation pages for the Multik library. Covers all page types: Getting Started, User Guide, and API Reference. Handles page structure, Korro code samples, mk.tree navigation, and cross-references. Use this skill when creating new doc pages, updating existing ones, or when the multik-kdoc skill needs to create/update Writerside topics.
npx skills add https://github.com/Kotlin/multik --skill multik-docs
Write and edit Writerside documentation for the Multik library. Documentation lives in docs/topics/ and is organized into three categories, each with distinct structure and purpose.
Before writing, internalize these principles:
From the Diataxis framework (full reference: references/diataxis-framework.md):
Project doc rules (full reference: references/doc-quality-rules.md):
docs/topics/apiDocs/) — strict templatesAudience: Experienced users. Purpose: Precise technical lookup.
API reference pages must look uniform. Three sub-types:
descriptive-statistics.md): each function gets its own H2 with nested H3 sub-sections and anchor IDsarray-creation.md, statistics.md)Read references/api-reference-templates.md for exact structural templates with real examples.
These pages vary in structure depending on the topic. Instead of following a template, read 2-3 existing pages of the same type before writing to match the tone and patterns.
Getting Started (docs/topics/gettingStarted/): Narrative style for beginners. Onboarding, installation, platform setup. May use tabs for Gradle Kotlin/Groovy, bullet lists, multiple Korro imports. Examples: quickstart.md, installation.md, engines-of-multik.md.
User Guide (docs/topics/userGuide/): Task-oriented for intermediate users. Typically opens with ## Overview, each section is self-contained (brief prose + code example). Examples: copies-and-views.md, indexing-and-slicing.md, creating-multidimensional-arrays.md.
FAQ (docs/topics/FAQ.md): H2 headings for topic groups, H3 headings as questions. Direct answers with code examples, uses Fix: and Workaround: labels.
Community & Contribution (docs/topics/community-and-contribution.md): Freeform informational page with links, lists, tables.
Landing pages (.topic XML files): Pure XML format for section entry points (e.g., welcome.topic, getting-started.topic). See references/writerside-markup.md for the XML schema.
references/api-reference-templates.md and follow the exact template for the sub-type (only load this file for API Reference pages). For other pages: read 2-3 existing pages of the same type to match tone and structure. Look at nearby pages in mk.tree for context.docs/mk.tree to add the page to the navigation (see mk.tree section below).<seealso> and inline links.Every markdown page uses these elements in this exact order at the top:
# Page Title
<!---IMPORT samples.docs.category.ClassName-->
<web-summary>
Two to three sentences for search results and SEO.
</web-summary>
<card-summary>
One to two sentences for card previews.
</card-summary>
<link-summary>
One sentence for inline link hover previews.
</link-summary>
# Title is always the first line (H1). Exactly one per page.<!---IMPORT ...--> appears only when the page uses Korro samples. Multiple imports are allowed.web-summary is the longest, link-summary is the shortest.Every page ends with a <seealso> block for related content:
<seealso style="cards">
<category ref="api-docs">
<a href="page-name.md" summary="Brief description of the linked page."/>
</category>
</seealso>
Or with a title and multiple categories:
<seealso style="cards" title="Next steps">
<category ref="user-guide">
<a href="page.md" summary="Description."/>
</category>
<category ref="api-docs">
<a href="page.md" summary="Description.">Custom Link Title</a>
</category>
</seealso>
Category refs: "user-guide", "api-docs", "get-start", "ext" (external links).
Three patterns, in order of preference:
— resolves to the page title. Best for inline references.link text — for when the page title doesn't fit the context.text — for linking to specific sections.> Warning text here.
> {style="warning"}
> Note text here.
> {style="note"}
> Tip text here.
> {style="tip"}
When using non-standard Writerside elements (tabs, compare blocks, procedures, topic switchers, etc.), read references/writerside-markup.md for syntax reference. Skip this file for pages that only use standard markdown, code blocks, admonitions, and seealso blocks.
Korro is a Gradle plugin that synchronizes code snippets between Writerside markdown and executable Kotlin test files. This ensures documentation examples always compile and produce expected output.
Markdown side (docs/topics/{category}/page.md):
<!---IMPORT samples.docs.apiDocs.ArrayCreation-->
<!---FUN arange_example-->
val a = mk.arange<Int>(5) // [0, 1, 2, 3, 4]
val b = mk.arange<Int>(2, 10, 3) // [2, 5, 8]
<!---END-->
Kotlin side (multik-core/src/commonTest/kotlin/samples/docs/{category}/ClassName.kt):
package samples.docs.apiDocs
import org.jetbrains.kotlinx.multik.api.*
import kotlin.test.Test
class ArrayCreation {
@Test
fun arange_example() {
// SampleStart
val a = mk.arange<Int>(5) // [0, 1, 2, 3, 4]
val b = mk.arange<Int>(2, 10, 3) // [2, 5, 8]
// SampleEnd
}
}
<!---FUN name--> must match the @Test fun name() method name exactly<!---IMPORT package.ClassName--> must match the test class fully-qualified name// SampleStart and // SampleEnd is what appears in the markdown code blockassertEquals(...)) go after // SampleEnd — they validate but don't appear in docs//, multi-line with /* ... */samples/docs/apiDocs/ for API Reference pagessamples/docs/userGuide/ for User Guide pagessamples/docs/ root for Getting Started and other pages@Test fun method to it.ShapeManipulation.kt for shape-manipulation.md).samples.docs.apiDocs or samples.docs.userGuide.<!---IMPORT ...--> directive at the top of the markdown page.<!---FUN name--> / <!---END--> blocks in the markdown.After creating or updating samples, remind the user to run:
./gradlew :multik-core:jvmTest --tests "samples.docs.*"
The navigation tree is defined in docs/mk.tree. When adding a new page:
<toc-element> for the page type:<toc-element toc-title="Getting started" topic="getting-started.topic"><toc-element topic="user-guide.topic"><toc-element toc-title="API reference"><toc-element topic="your-page.md"/> at the appropriate position.<toc-element>.toc-title="Custom Title" only when the page's H1 isn't suitable for the sidebar.wip="true" for pages that are not yet complete.Example:
<toc-element topic="array-creation.md">
<toc-element topic="arange.md"/>
<toc-element topic="your-new-function.md"/>
<!-- ... -->
</toc-element>
Before finishing any page:
<!---IMPORT--> and <!---FUN-->)<seealso> block at the end with 2-4 relevant linksmk.tree in the correct location (for new pages)Take kotlin/multik-docs from the repository into ~/.claude/skills for personal
use, or into .claude/skills inside a project.
The agent identifies a skill by the name field in its header. Two skills with the
same name cannot sit side by side — one of them will be ignored.