Back to skills
SkillHub ClubShip Full StackFull StackIntegration

agent-setup

Check and configure outfitter marketplaces and plugins. Use when setting up a new project, checking plugin configuration, or when "setup outfitter", "configure plugins", or "marketplace" are mentioned.

Packaged view

This page reorganizes the original catalog entry around fit, installability, and workflow context first. The original raw source lives below.

Stars
0
Hot score
74
Updated
March 20, 2026
Overall rating
C0.0
Composite score
0.0
Best-practice grade
A88.4

Install command

npx @skill-hub/cli install outfitter-dev-agents-internal-agent-setup

Repository

outfitter-dev/agents-internal

Skill path: internal/skills/agent-setup

Check and configure outfitter marketplaces and plugins. Use when setting up a new project, checking plugin configuration, or when "setup outfitter", "configure plugins", or "marketplace" are mentioned.

Open repository

Best for

Primary workflow: Ship Full Stack.

Technical facets: Full Stack, Integration.

Target audience: everyone.

License: Unknown.

Original source

Catalog source: SkillHub Club.

Repository owner: outfitter-dev.

This is still a mirrored public skill entry. Review the repository before installing into production workflows.

What it helps with

  • Install agent-setup into Claude Code, Codex CLI, Gemini CLI, or OpenCode workflows
  • Review https://github.com/outfitter-dev/agents-internal before adding agent-setup to shared team environments
  • Use agent-setup for development workflows

Works across

Claude CodeCodex CLIGemini CLIOpenCode

Favorites: 0.

Sub-skills: 0.

Aggregator: No.

Original source / Raw SKILL.md

---
name: agent-setup
description: Check and configure outfitter marketplaces and plugins. Use when setting up a new project, checking plugin configuration, or when "setup outfitter", "configure plugins", or "marketplace" are mentioned.
---

# Agent Setup

Check and configure outfitter marketplaces in a project.

## Check Current Status

Checks both project (`.claude/settings.json`) and user (`~/.claude/settings.json`) levels.

!`bun ${CLAUDE_PLUGIN_ROOT}/skills/agent-setup/scripts/check-outfitter.ts .`

## Marketplaces

| Alias | Repo | Required Plugin |
|-------|------|-----------------|
| `outfitter` | `outfitter-dev/agents` | `outfitter@outfitter` |
| `outfitter-internal` | `outfitter-dev/agents-internal` | `outfitter-dev@outfitter-internal` |

## Optional Plugins

From `outfitter` marketplace:

| Plugin | Purpose |
|--------|---------|
| `gt` | Graphite stacked PR workflows |
| `but` | GitButler virtual branch workflows |
| `cli-dev` | CLI development patterns |

## Required Setup

```json
{
  "extraKnownMarketplaces": {
    "outfitter": {
      "source": { "source": "github", "repo": "outfitter-dev/agents" }
    },
    "outfitter-internal": {
      "source": { "source": "github", "repo": "outfitter-dev/agents-internal" }
    }
  },
  "enabledPlugins": {
    "outfitter@outfitter": true,
    "outfitter-dev@outfitter-internal": true
  }
}
```

## Full Setup

```json
{
  "extraKnownMarketplaces": {
    "outfitter": {
      "source": { "source": "github", "repo": "outfitter-dev/agents" }
    },
    "outfitter-internal": {
      "source": { "source": "github", "repo": "outfitter-dev/agents-internal" }
    }
  },
  "enabledPlugins": {
    "outfitter@outfitter": true,
    "outfitter-dev@outfitter-internal": true,
    "gt@outfitter": true,
    "but@outfitter": true,
    "cli-dev@outfitter": true
  }
}
```


---

## Skill Companion Files

> Additional files collected from the skill directory layout.

### scripts/check-outfitter.ts

```typescript
#!/usr/bin/env bun
/**
 * Check if outfitter marketplaces are configured in project or user settings
 * Usage: bun check-outfitter.ts [project-root]
 */

import { join } from "path";
import { homedir } from "os";

const ROOT = process.argv[2] || ".";
const PROJECT_SETTINGS = join(ROOT, ".claude/settings.json");
const USER_SETTINGS = join(homedir(), ".claude/settings.json");

interface Settings {
  extraKnownMarketplaces?: Record<string, { source: { source: string; repo: string } }>;
  enabledPlugins?: Record<string, boolean>;
}

interface MarketplaceConfig {
  alias: string;
  repo: string;
  requiredPlugin: string;
  label: string;
}

const MARKETPLACES: MarketplaceConfig[] = [
  {
    alias: "outfitter",
    repo: "outfitter-dev/agents",
    requiredPlugin: "outfitter@outfitter",
    label: "outfitter (core)",
  },
  {
    alias: "outfitter-internal",
    repo: "outfitter-dev/agents-internal",
    requiredPlugin: "outfitter-dev@outfitter-internal",
    label: "outfitter-dev (internal)",
  },
];

const OPTIONAL_PLUGINS = ["gt@outfitter", "but@outfitter", "cli-dev@outfitter"];

async function loadSettings(path: string): Promise<Settings | null> {
  const file = Bun.file(path);
  if (!(await file.exists())) return null;
  return file.json();
}

function checkMarketplace(settings: Settings | null, config: MarketplaceConfig): boolean {
  return settings?.extraKnownMarketplaces?.[config.alias]?.source?.repo === config.repo;
}

function checkPlugin(settings: Settings | null, plugin: string): boolean {
  return settings?.enabledPlugins?.[plugin] === true;
}

function location(project: boolean, user: boolean): string {
  if (project && user) return "both";
  if (user) return "user";
  if (project) return "project";
  return "none";
}

async function main() {
  const projectSettings = await loadSettings(PROJECT_SETTINGS);
  const userSettings = await loadSettings(USER_SETTINGS);

  let allConfigured = true;
  const issues: string[] = [];

  console.log("Outfitter Setup Check");
  console.log("=====================");
  console.log("");

  // Check each marketplace and its required plugin
  for (const mp of MARKETPLACES) {
    const projectHasMp = checkMarketplace(projectSettings, mp);
    const userHasMp = checkMarketplace(userSettings, mp);
    const hasMp = projectHasMp || userHasMp;

    const projectHasPlugin = checkPlugin(projectSettings, mp.requiredPlugin);
    const userHasPlugin = checkPlugin(userSettings, mp.requiredPlugin);
    const hasPlugin = projectHasPlugin || userHasPlugin;

    console.log(`${mp.label}:`);
    if (hasMp) {
      console.log(`  Marketplace: ✓ (${location(projectHasMp, userHasMp)})`);
    } else {
      console.log(`  Marketplace: ✗ missing`);
      issues.push(`Add ${mp.alias} marketplace (${mp.repo})`);
      allConfigured = false;
    }

    if (hasPlugin) {
      console.log(`  Plugin: ✓ (${location(projectHasPlugin, userHasPlugin)})`);
    } else {
      console.log(`  Plugin: ✗ missing`);
      issues.push(`Enable ${mp.requiredPlugin}`);
      allConfigured = false;
    }
    console.log("");
  }

  // Check optional plugins
  const enabledOptional = OPTIONAL_PLUGINS.filter(
    p => checkPlugin(projectSettings, p) || checkPlugin(userSettings, p)
  ).map(p => p.split("@")[0]);

  if (enabledOptional.length > 0) {
    console.log(`Optional: ${enabledOptional.join(", ")}`);
    console.log("");
  }

  // Summary
  if (allConfigured) {
    console.log("Status: CONFIGURED");
  } else {
    console.log("Status: INCOMPLETE");
    console.log("");
    console.log("Issues:");
    for (const issue of issues) {
      console.log(`  - ${issue}`);
    }
    console.log("");
    printRecommendation();
  }
}

function printRecommendation() {
  console.log("Required .claude/settings.json:");
  console.log("");
  console.log(`{
  "extraKnownMarketplaces": {
    "outfitter": {
      "source": { "source": "github", "repo": "outfitter-dev/agents" }
    },
    "outfitter-internal": {
      "source": { "source": "github", "repo": "outfitter-dev/agents-internal" }
    }
  },
  "enabledPlugins": {
    "outfitter@outfitter": true,
    "outfitter-dev@outfitter-internal": true
  }
}`);
  console.log("");
  console.log("Optional: gt@outfitter, but@outfitter, cli-dev@outfitter");
}

main().catch(console.error);

```

agent-setup | SkillHub