ai-context-writer

Create and update ai-context.md files that document modules for AI assistants. Use when adding documentation for packages, apps, or external references that should be discoverable via /modules commands.

Safety Notice

This listing is imported from skills.sh public index metadata. Review upstream SKILL.md and repository scripts before running.

Copy this and send it to your AI assistant to learn

Install skill "ai-context-writer" with this command: npx skills add front-depiction/claude-setup/front-depiction-claude-setup-ai-context-writer

AI Context Writer Skill

Use this skill when creating or updating ai-context.md files that document modules in the codebase. These files are indexed by the context-crawler and surfaced via /modules, /module, and /module-search commands.

File Location

Context files must be named exactly ai-context.md and placed at the root of the module:

packages/my-package/ai-context.md    # Internal module
apps/my-app/ai-context.md            # Internal module
.context/external-lib/ai-context.md  # External reference (submodule)

Required Structure

Frontmatter (YAML)

---
path: packages/my-package
summary: One-line description mentioning purpose and key technologies
tags: [effect, http-client, sdk-wrapper]
---

Frontmatter Fields:

  • path - Module identifier (relative path from repo root)
  • summary - Single sentence, concise description for module listings
  • tags - Optional categorization for search (technologies, domains)

Markdown Body Sections

# Module Name

High-level overview paragraph explaining the module's purpose.

## Architecture

┌──────────────────┐
│    Component     │
└──────────────────┘
        │
        ▼
┌──────────────────┐
│     Service      │
└──────────────────┘

Brief explanation of the architecture diagram.

## Core Modules

| Module | Purpose |
|--------|---------|
| `Service.ts` | Main service implementation |
| `Client.ts` | HTTP client wrapper |

## Usage Patterns

### Basic Usage

```typescript
import * as MyModule from "@/packages/my-package"
import { Effect } from "effect"

const program = Effect.gen(function* () {
  const service = yield* MyModule.Service
  return yield* service.doThing()
})

Key Patterns

Pattern Name

Description of when and why to use this pattern.

// Example code

Design Decisions

AD-1: Decision Title Explanation of the decision and trade-offs.

AD-2: Another Decision Why this approach was chosen over alternatives.

Dependencies

  • effect - Core Effect library
  • @effect/platform - Platform abstractions

Spec Reference


## Section Guidelines

### Architecture Diagram

Use simple ASCII box-and-arrow diagrams:

┌──────────────┐ ┌──────────────┐ │ Service │────▶│ Client │ └──────────────┘ └──────────────┘ │ ▼ ┌──────────────┐ │ Repository │ └──────────────┘


Characters: `┌ ┐ └ ┘ │ ─ ▼ ▲ ◀ ▶ ────▶`

### Core Modules Table

Quick reference for key files:

```markdown
| Module | Purpose |
|--------|---------|
| `ParallelClient.ts` | HTTP client with Effect integration |
| `ParallelRun.ts` | Async task execution |
| `Errors.ts` | Tagged error types |

Usage Patterns

Always include:

  • Full imports with namespace pattern (import * as X)
  • Effect.gen for effectful code
  • Layer construction if services are involved
import * as MyService from "@/packages/my-service"
import { Effect, Layer } from "effect"

const program = Effect.gen(function* () {
  const svc = yield* MyService.Service
  return yield* svc.operation()
})

const live = program.pipe(
  Effect.provide(MyService.Live)
)

Design Decisions

Use AD-N format for traceability:

**AD-1: Use Effect.gen over flatMap chains**
Effect.gen provides cleaner syntax and better stack traces. The generator pattern
makes sequential operations readable without callback nesting.

**AD-2: Schema.TaggedStruct for all domain types**
Automatic discriminator and Data equality support. Enables pattern matching
with Match.typeTags.

Dependencies

List external packages the module depends on:

## Dependencies

- `effect` - Core Effect types and functions
- `@effect/platform` - FileSystem, HttpClient, Terminal
- `@effect/schema` - Runtime validation and serialization

Summary Writing

The summary is critical - it appears in /modules listings.

Good summaries:

  • "Effect wrapper for Parallel AI SDK - web search, content extraction, and async task runs"
  • "React frontend with Effect-Atom state management and TanStack Router"
  • "SQLite-backed workflow engine for durable execution patterns"

Bad summaries:

  • "A module for doing stuff" (too vague)
  • "This is the main package that handles various functionality" (no specifics)

Summary formula: [Primary purpose] - [key feature 1], [key feature 2], and [key feature 3]

Discovery and Indexing

Context files are indexed by context-crawler.ts:

  1. Recursively finds all ai-context.md files
  2. Extracts frontmatter (path, summary, tags)
  3. Falls back to first paragraph if no summary
  4. Excludes node_modules, .git, dist, build, .turbo

Module Classification

  • Internal: Local ai-context.md files in packages/apps
  • External: Submodules from .gitmodules (may lack ai-context.md)

External modules without context files show: (grep for implementation details)

Commands for Discovery

# List all modules with summaries
/modules

# Get full content of specific module
/module packages/parallel

# Search modules by pattern
/module-search http

Complete Example

---
path: packages/parallel
summary: Effect wrapper for Parallel AI SDK - web search, content extraction, and async task runs
tags: [effect, sdk-wrapper, parallel-ai, http-client]
---

# Parallel SDK Effect Wrapper

Effect-native wrapper for the Parallel AI SDK. Injects Effect's HttpClient as the
fetch implementation, providing typed errors, deferred computation patterns, and
composable layer construction.

## Architecture

┌─────────────────────────────────────────────────────────────────┐
│                         User Code                                │
│                    (Effect programs)                             │
└─────────────────────────────────────────────────────────────────┘
                              │
                              ▼
┌─────────────────────────────────────────────────────────────────┐
│                      ParallelClient                              │
│    ┌──────────────┐  ┌──────────────┐  ┌──────────────────┐    │
│    │   search()   │  │  extract()   │  │   createRun()    │    │
│    └──────────────┘  └──────────────┘  └──────────────────┘    │
└─────────────────────────────────────────────────────────────────┘
                              │
                              ▼
┌─────────────────────────────────────────────────────────────────┐
│                    Effect HttpClient                             │
│              (injected via Layer.provide)                        │
└─────────────────────────────────────────────────────────────────┘

## Core Modules

| Module | Purpose |
|--------|---------|
| `ParallelClient.ts` | Service interface with Effect operations |
| `ParallelClientLive.ts` | Live implementation using HttpClient |
| `ParallelRun.ts` | Async run execution with polling |
| `Errors.ts` | Tagged error types for failure handling |

## Usage Patterns

### Basic Search

```typescript
import * as Parallel from "@/packages/parallel"
import { Effect } from "effect"

const program = Effect.gen(function* () {
  const client = yield* Parallel.ParallelClient
  const results = yield* client.search({ query: "Effect TypeScript" })
  return results
})

const runnable = program.pipe(
  Effect.provide(Parallel.Live)
)

Error Handling

import * as Parallel from "@/packages/parallel"
import { Effect } from "effect"

const safe = program.pipe(
  Effect.catchTag("ParallelApiError", (e) =>
    Effect.succeed({ error: e.message })
  ),
  Effect.catchTag("ParallelNetworkError", () =>
    Effect.succeed({ error: "Network unavailable" })
  )
)

Design Decisions

AD-1: Inject HttpClient via Layer Enables testing with mock HTTP responses. Production uses FetchHttpClient, tests use a custom client that returns canned responses.

AD-2: Tagged errors for all failure modes ParallelApiError, ParallelNetworkError, ParallelTimeoutError. Enables precise error handling with catchTag.

Dependencies

  • effect - Core runtime
  • @effect/platform - HttpClient abstraction
  • parallel-sdk - Underlying SDK (via .context/parallel-sdk-typescript)

Spec Reference


## When to Use This Skill

- Adding a new package or app that should be discoverable
- Documenting an existing module for AI assistants
- Creating context for external libraries added as submodules
- Updating documentation after significant refactoring
- Ensuring modules appear in `/modules` listings

## Key Principles

1. **Frontmatter is required** - path and summary enable indexing
2. **Summary is critical** - appears in all module listings
3. **Architecture diagrams** - visual overview aids understanding
4. **Usage patterns with imports** - show how to actually use the module
5. **Design decisions** - explain why, not just what
6. **Code examples compile** - include all necessary imports
7. **Namespace imports** - always `import * as X from`

Source Transparency

This detail page is rendered from real SKILL.md content. Trust labels are metadata-based hints, not a safety guarantee.

Related Skills

Related by shared tags or category signals.

General

command-executor

No summary provided by upstream source.

Repository SourceNeeds Review
General

react-composition

No summary provided by upstream source.

Repository SourceNeeds Review
General

effect-ai-streaming

No summary provided by upstream source.

Repository SourceNeeds Review