Maintainer Configuration

VerifiedSafe

Control triage scoring, stale policy, label mapping, and derived metrics in the maintainer workflow by editing `.github/maintainer/config.json`. Use this skill when scoring or actionability feels off, when you want different prioritization, or when changing automation policies. It outputs proposed edits with rationale, and warns that `semantics.generated.json` is auto-managed and should not be manually edited.

Sby Skills Guide Bot
DevOpsIntermediate
6/2/2026
Claude CodeCopilot
#maintainer-config#triage-automation#issue-scoring#stale-policy#github-workflow

Recommended for

Automated summary

This skill provides the ability to configure and customize the maintainer workflow for a GitHub repository by editing the .github/maintainer/config.json file.

Strengths

  • 1. Allows fine-grained control over triage scoring, stale policies, label mapping, and derived metrics. 2. Uses a human-readable JSON format that is easy to edit. 3. Includes comprehensive heuristics for detecting issues needing info, duplicates, and relationship quality. 4. Provides sensible defaults with the option to fall back if config is missing.

Limitations

  • 1. Only applies to repositories that use the maintainer workflow script
  • not a universal solution. 2. Requires understanding of the config schema and its impact on scoring. 3. Some settings may not be documented in the file itself, requiring external knowledge.
When to use it

Use when you need to tweak issue scoring, adjust stale policies, or customize label mappings for your GitHub repository's maintainer automation.

When not to use it

Do not use if you do not have the maintainer bot set up, or if you prefer manual triage without automation.

Security analysis

Safe
Quality score92/100

The file is a static configuration template for a GitHub maintainer workflow. It contains no executable code, destructive commands, or data exfiltration risks.

No concerns found

How this analysis is made

Examples

Increase stale days for issues
I need to increase the stale days for issues to 90 days. Edit the maintainer config to change the staleDays.issues value to 90.
Boost feature request priority
Our team decided that feature requests should have higher priority. Edit the maintainer config to increase the type boost for 'feature' to 8.
Add missing steps signal
Please add a new signal for missing steps to reproduce in the needsInfo heuristics. Edit the config to include 'missingSteps' with weight 2.

Maintainer Config

At a glance

  • Purpose: Control triage scoring, stale policy, label mapping, and derived metrics.
  • Use when: Scoring/actionability feels “off,” you want different prioritization, or you’re changing automation policy.
  • Output: Proposed edits to .github/maintainer/config.json with a short rationale.
  • Do not: Manually edit .github/maintainer/semantics.generated.json (it is auto-managed).

Machine-readable configuration file for the maintainer workflow.

Place it at:

.github/maintainer/config.json

The triage script reads this file to drive scoring, labels, and stale policy. If it is missing, the script falls back to built-in defaults and prints a warning.

Config Template

{
  "schemaVersion": 1,
  "reportsDir": "reports",
  "stateFile": ".github/maintainer/state.json",
  "noMergeExternalPRs": true,
  "semantics": {
    "intent": {
      "bug": ["bug", "crash", "error", "exception"],
      "feature": ["feature request", "enhancement"],
      "question": ["how do i", "question"],
      "support": ["help", "support"],
      "meta": ["roadmap", "governance"]
    },
    "needsInfo": {
      "repro": ["steps to reproduce", "repro steps"],
      "expected": ["expected behavior"],
      "actual": ["actual behavior"],
      "environment": ["environment", "os"],
      "version": ["version", "node version"],
      "logs": ["logs", "stack trace"],
      "testPlan": ["test plan", "testing"]
    },
    "environmentTokens": ["windows", "macos", "linux", "node", "npm"],
    "relationship": {
      "linkKeywords": ["fixes", "closes", "resolves", "addresses"],
      "duplicateHints": ["duplicate", "same issue"]
    },
    "errors": {
      "signatures": [],
      "keywords": ["error", "exception", "failed", "crash"]
    }
  },
  "heuristics": {
    "needsInfo": {
      "enabled": true,
      "threshold": 2,
      "issueSignals": {
        "missingRepro": { "enabled": true, "applyTo": ["bug", "unknown"] },
        "missingExpectedActual": { "enabled": true, "applyTo": ["bug", "unknown"] },
        "missingEnvironment": { "enabled": true, "applyTo": ["bug", "support", "question", "unknown"] },
        "missingVersion": { "enabled": true, "applyTo": ["bug", "support", "question", "unknown"] },
        "missingLogs": { "enabled": true, "applyTo": ["bug", "support", "unknown"] }
      },
      "prSignals": {
        "missingTestPlan": { "enabled": true },
        "missingDescription": { "enabled": true }
      },
      "weights": {
        "missingRepro": 2,
        "missingExpectedActual": 1,
        "missingEnvironment": 1,
        "missingVersion": 1,
        "missingLogs": 1,
        "missingTestPlan": 1,
        "missingDescription": 1
      }
    },
    "duplicates": {
      "titleSimilarityThreshold": 0.6,
      "overlapThreshold": 0.35,
      "requireSharedError": false
    },
    "relationshipQuality": {
      "strongOverlapThreshold": 0.45,
      "mediumOverlapThreshold": 0.15,
      "strongWhenExplicit": true,
      "defaultWhenLinked": "medium"
    }
  },
  "sentiment": {
    "positiveWords": ["thanks", "great", "helpful", "fixed"],
    "negativeWords": ["broken", "error", "crash", "fail"]
  },
  "staleDays": {
    "issues": 60,
    "prs": 30
  },
  "labels": {
    "blocked": ["blocked", "on-hold"],
    "needsInfo": ["needs-info", "needs-more-info", "waiting-for-response"],
    "needsDecision": ["needs-decision"],
    "closable": ["duplicate", "wontfix", "invalid", "out-of-scope"]
  },
  "typeLabels": {
    "bug": ["bug"],
    "feature": ["feature", "enhancement"],
    "question": ["question"],
    "support": ["support"],
    "meta": ["meta", "governance", "roadmap"]
  },
  "priority": {
    "issue": {
      "commentWeight": 2,
      "reactionWeights": {
        "THUMBS_UP": 3,
        "THUMBS_DOWN": 2,
        "HEART": 2
      },
      "typeBoosts": {
        "bug": 10,
        "feature": 5
      },
      "stalePenalty": {
        "over30": -5,
        "over60": -10
      },
      "ageBoost": {
        "over30AndFresh": 5
      }
    },
    "pr": {
      "commentWeight": 2,
      "reviewWeight": 3,
      "approvalBoost": 8,
      "ciSuccessBoost": 6,
      "unresolvedThreadsPenalty": -5,
      "changesRequestedPenalty": -5,
      "draftPenalty": -8,
      "stalePenalty": {
        "over14": -5,
        "over30": -10
      }
    },
    "labelBoosts": {
      "security": 40,
      "critical": 25,
      "high-priority": 15
    }
  },
  "relationshipScore": {
    "overlapWeight": 30,
    "explicitLinkBoost": 8,
    "linkedIssuesWeight": 2,
    "mentionedByWeight": 2,
    "linkedIssuePriorityWeight": 0.15
  },
  "implementation": {
    "commentWeight": 1,
    "reviewWeight": 2,
    "reviewCommentWeight": 1,
    "reactionWeight": 1,
    "linkedIssuePriorityWeight": 0.6,
    "linkedIssueReactionWeight": 0.3,
    "linkedIssueSentimentWeight": 0.2,
    "relationshipScoreWeight": 0.5,
    "relationshipQualityBoosts": {
      "strong": 6,
      "medium": 3,
      "weak": 0,
      "none": -2
    },
    "touchesTestsBoost": 5,
    "ciSuccessBoost": 6,
    "ciFailurePenalty": -6,
    "changesRequestedPenalty": -8,
    "unresolvedThreadsPenalty": -4,
    "draftPenalty": -10,
    "agePenalty": {
      "over14": -3,
      "over30": -7,
      "over60": -12
    },
    "sizePenalty": {
      "filesOver10": -3,
      "filesOver25": -7,
      "linesOver500": -8,
      "linesOver1000": -12
    },
    "agentScoreWeight": 1,
    "agentConfidenceMultipliers": {
      "high": 1.5,
      "medium": 1,
      "low": 0.5,
      "unset": 0
    },
    "scoreFloor": 0,
    "tierThresholds": {
      "strong": 40,
      "medium": 20
    }
  }
}

Notes

  • All label names are matched case-insensitively.
  • labelBoosts apply to both issues and PRs.
  • noMergeExternalPRs is a policy guardrail used by docs and agent workflow.
  • stateFile stores the last run and hashes for delta reports.
  • sentiment uses a small lexicon; extend for non-English repos if needed.
  • implementation weights tune the auto score; agent adjustments are recorded in .github/maintainer/notes/.
  • semantics and heuristics drive all derived metrics (type classification, actionability, duplicates, relationship quality).
  • relationshipScore weights control PR-to-issue relationship scoring.
  • .github/maintainer/semantics.generated.json is auto-managed by the agent and merged each run.

From the file to a first result

The download contains exactly the content displayed on this page. This copy may differ from the latest version in the source repository.

View the source and supporting files

This download contains SKILL.md only. Any scripts, references, templates and dependencies are not included. Get the required files from the source, preserving their directory structure, before continuing.

1. Download the file

Download SKILL.md

From the root of a test project, save the file as .skill-downloads/maintainer-configuration-mm5t8cit/SKILL.md, or use the command below. This folder is for inspecting the skill before installation.

Command for macOS/Linux or WSL: requires a POSIX shell and curl. On Windows without WSL, use the download button and create the folder manually.

mkdir -p '.skill-downloads/maintainer-configuration-mm5t8cit' && curl --fail --show-error --location 'https://skills-guides.com/api/skills/maintainer-configuration-mm5t8cit/download' --output '.skill-downloads/maintainer-configuration-mm5t8cit/SKILL.md.part' && mv '.skill-downloads/maintainer-configuration-mm5t8cit/SKILL.md.part' '.skill-downloads/maintainer-configuration-mm5t8cit/SKILL.md'

2. Check prerequisites

Read SKILL.md before using it. If it references scripts or external services, inspect them and prepare the required access in your test environment.

No recognized prerequisites section in this file. This does not mean it is self-contained: libraries, tools and access requirements may be mentioned elsewhere in the content or source repository.

The platforms on this page are catalog indications. The paths below follow tool documentation; they do not prove this skill has been run in those tools. No minimum tool version is confirmed for this listing.

3. Load the skill

This file does not provide a usable name/description header for this native procedure. It remains available to download and inspect; use the manual method below.

Manual method or another tool: attach SKILL.md to a conversation, or open it in an agent that can read files. Include any required supporting resources. No universal folder is recognized by every tool.

4. Try a first task

Use a short, synthetic input: an API endpoint, a small document or an interface brief. In a new conversation, attach the file or give the agent its path, then adapt this request:

Read .skill-downloads/maintainer-configuration-mm5t8cit/SKILL.md and apply its instructions to this example: [describe a test input]. Identify any missing files, dependencies or access. Produce the result requested by the skill without inventing data or running unreviewed scripts.

Expected result: output matching the skill instructions, or a precise list of missing prerequisites. A read confirmation alone does not validate a first use. If an external resource is unavailable, that path remains untested.

Related skills