Skip to content

Claude Code

Claude Code is Anthropic's official CLI for AI-assisted development. It helps with code generation, debugging, refactoring, and general software engineering tasks.

Installation

brew install --cask claude-code

Configuration

Global CLAUDE.md

Create a global configuration file at ~/.claude/CLAUDE.md to set personal preferences that apply across all projects.

Download the team's standard configuration: CLAUDE.md

mkdir -p ~/.claude
gh api -H "Accept: application/vnd.github.raw" repos/majority-dev/dt-documentation/contents/docs/assets/claude/CLAUDE.md > ~/.claude/CLAUDE.md

Project-level CLAUDE.md

Each repository can have its own CLAUDE.md at the project root. This file contains project-specific instructions that override or extend global settings.

my-project/
├── CLAUDE.md          # Project-specific instructions
├── src/
└── ...

Tessl

Tessl is a package manager for AI coding-agent skills. It lets the team share versioned, discoverable skills via plugins — think dbt packages, but for Claude Code prompts. A plugin bundles one or more skills (each a SKILL.md) and is published to the Tessl registry under the majority-dt/ workspace.

Installing plugins

Install a plugin globally (-g / --global) to make its skills available across all projects:

tessl install -g majority-dt/gh-issue
tessl install -g majority-dt/update-docs
tessl install -g majority-dt/update-deps
tessl install -g majority-dt/merge-dependency-prs
tessl install -g majority-dt/watch-pr

To check for updates:

tessl outdated
tessl update

Available plugins

gh-issue

Creates a GitHub issue in majority-dev/projects, adds it to the Data project board, and checks out a local branch.

tessl install -g majority-dt/gh-issue

Usage: /gh-issue <issue-title>

update-docs

Drafts documentation updates for dt-documentation when infrastructure, pipelines, dbt models, or architecture changes are detected. Claude will also proactively suggest running this skill when it detects relevant changes.

tessl install -g majority-dt/update-docs

Usage: /update-docs <description of what changed>

update-deps

Updates project dependencies to latest versions, optionally creating a Linear issue and PR.

tessl install -g majority-dt/update-deps

Usage: /update-deps [--auto-pr]

merge-dependency-prs

Finds every open dependency-bot PR (Renovate, Dependabot) across the dt-* repos (excluding dt-ai-agents), lists them with their URLs, and — after you confirm — approves and enables auto-merge (squash) so each merges once CI is green. Reports a per-repo summary with the URL and outcome of every PR.

tessl install -g majority-dt/merge-dependency-prs

Usage: /merge-dependency-prs

add-ingestion-source

Walks onboarding a new file feed end-to-end — pulling files from SFTP, Azure Blob, or another source into GCS, loading them into BigQuery, and scheduling the download in Airflow. Also covers adding a new report/table to a source that already exists. Spans dt-file-ingestion, dt-gcp-infrastructure, dt-gcp-bq-ingestion-cloud-function, and dt-airflow-dags.

tessl install -g majority-dt/add-ingestion-source

Usage: /add-ingestion-source

watch-pr

Watches an open PR until the review bots (GitHub Copilot + Cursor Bugbot) finish, fixes the legitimate findings and pushes, then replies to and resolves each bot comment thread on GitHub — dismissals get a visible reason, fixes get a Fixed in <sha> note. It loops until the bots go quiet, then pings #data_team_prs_ready_for_review so humans don't review before the bot/fix rounds have settled. Runs as a self-paced poll loop, so you can keep working while it waits.

tessl install -g majority-dt/watch-pr

Usage: /watch-pr [PR# or PR-url] (defaults to the current branch's PR)

Creating a plugin

See the Tessl Intro presentation for background. The current workflow:

  1. Scaffold a skill: tessl skill new --name majority-dt/<name> — or, if you already have a SKILL.md, run tessl skill import <path> to generate its manifest (.tessl-plugin/plugin.json).
  2. Write the SKILL.md: YAML frontmatter (name, description) followed by the steps and shell commands.
  3. Lint: tessl skill lint <path>
  4. Publish: tessl skill publish <path> — requires tessl login.
  5. Install it to use it: tessl install -g majority-dt/<name>

To ship a change to an existing plugin, bump version in its .tessl-plugin/plugin.json, run tessl skill publish <path> again, then tessl update.

Note

Plugin sources live in the tiles/ directory in this repo for version control and review. Publishing to the registry is a manual tessl skill publish step — it is not automated on merge. The legacy tile.json manifest is still read but deprecated; .tessl-plugin/plugin.json is authoritative.

Skills

Skills are reusable prompts that can be invoked with /<skill-name>. They help standardize common tasks across the team.

Tip

Prefer installing skills via Tessl plugins (see above) for team-wide distribution.

Skill Locations

Skills can be stored in three locations:

Location Scope Path
Tessl plugin Team-wide (recommended) Installed globally via tessl install -g
Personal Your machine only ~/.claude/skills/
Project Single repository .claude/skills/

Creating a Skill

A skill is a directory containing a SKILL.md with YAML frontmatter:

mkdir -p ~/.claude/skills/test-generator

Example skill (~/.claude/skills/test-generator/SKILL.md):

---
name: test-generator
description: Use when generating pytest unit tests for Python code
---

Generate pytest unit tests for the specified Python code.

Requirements:
- Use pytest fixtures where appropriate
- Include edge cases and error scenarios
- Use descriptive test names following pattern: test_<function>_<scenario>_<expected>
- Mock external dependencies

Using Skills

Invoke a skill by typing its name prefixed with /:

/test-generator

Project Skills

Some repositories include project-specific skills in .claude/skills/. These are available automatically when working inside that repo.

republish-events (dt-bq2pubsub-publisher)

Guides the full workflow for republishing BigQuery events to Pub/Sub: clearing the event-specific *_previous_run table, running the event's *_delta dbt model, publishing events, and updating the event-specific *_previous_run table.

Usage: /republish-events <event-type> (e.g., /republish-events crde)

Best Practices

  • Keep CLAUDE.md instructions concise and specific
  • Update project CLAUDE.md when team conventions change
  • Share useful skills with the team via the shared skills repository
  • Use skills for repetitive tasks to ensure consistency