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
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.
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:
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.
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.
Usage: /update-docs <description of what changed>
update-deps
Updates project dependencies to latest versions, optionally creating a Linear issue and PR.
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.
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.
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.
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:
- Scaffold a skill:
tessl skill new --name majority-dt/<name>— or, if you already have aSKILL.md, runtessl skill import <path>to generate its manifest (.tessl-plugin/plugin.json). - Write the
SKILL.md: YAML frontmatter (name,description) followed by the steps and shell commands. - Lint:
tessl skill lint <path> - Publish:
tessl skill publish <path>— requirestessl login. - 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:
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 /:
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