Skip to content
Back to skills

Blueprint Adr List

ASecurity

List all ADRs with title, status, date, and domain in a markdown table

  • 58 stars
  • 0 votes
  • 0 copies
  • 3 views
  • Added February 8, 2026
databasesbashsqlreactdatabasefrontend

Security analysis

A100/100

Scanned February 12, 2026

npx -y skills add laurigates/claude-plugins --skill blueprint-adr-list --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Blueprint Adr List?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for Blueprint Adr List
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/laurigates-blueprint-adr-list/badge)](https://www.skillsdirectory.com/skills/laurigates-blueprint-adr-list)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
SKILL.md
---
model: haiku
created: 2026-01-29
modified: 2026-02-06
reviewed: 2026-02-06
description: "List all ADRs with title, status, date, and domain in a markdown table"
allowed-tools: Bash, Glob
name: blueprint-adr-list
---

List Architecture Decision Records dynamically from the filesystem.

**Use Case**: Generate ADR index tables for README files, audit ADR status, or quickly view all architectural decisions.

**Steps**:

## 1. Check for ADRs

```bash
ls docs/adrs/*.md 2>/dev/null | head -1
```

If no ADRs found:
```
No ADRs found in docs/adrs/
Run `/blueprint:derive-adr` to generate ADRs from project analysis.
```

## 2. Generate ADR Table

ADR formats vary: some use markdown headers (`## Status`, `## Date`), others use YAML frontmatter (`status:`, `date:`). The extraction handles both.

**Command to generate markdown table**:

```bash
printf "| ADR | Title | Status | Date |\n|-----|-------|--------|------|\n" && \
fd '^[0-9]{4}-.*\.md$' docs/adrs -x awk '
  # Extract title from H1 header
  /^# ADR-/ {gsub(/^# ADR-[0-9]+: /, ""); title=$0}

  # Extract status from ## Status section (next non-empty line)
  /^## Status/ {p_status=1; next}
  p_status && NF {status=$0; p_status=0}

  # Extract date from ## Date section (next non-empty line)
  /^## Date/ {p_date=1; next}
  p_date && NF {date=$0; p_date=0}

  # Fallback: YAML frontmatter fields
  /^status:/ && !status {gsub(/^status:[[:space:]]*/, ""); status=$0}
  /^date:/ && !date {gsub(/^date:[[:space:]]*/, ""); date=$0}

  END {
    # Extract ADR number from filename (path-depth independent)
    fname = FILENAME
    sub(/.*\//, "", fname)
    num = substr(fname, 1, 4)
    if (title == "") title = "(untitled)"
    if (status == "") status = "-"
    if (date == "") date = "-"
    printf "| [%s](%s) | %s | %s | %s |\n", num, FILENAME, title, status, date
  }
' {} | sort
```

## 3. Display Results

Output the generated table. Example:

```
| ADR | Title | Status | Date |
|-----|-------|--------|------|
| [0001](docs/adrs/0001-use-react.md) | Use React for Frontend | Accepted | 2024-01-15 |
| [0002](docs/adrs/0002-use-postgres.md) | Use PostgreSQL for Database | Accepted | 2024-01-20 |
| [0003](docs/adrs/0003-migrate-to-vite.md) | Migrate from CRA to Vite | Accepted | 2024-02-01 |
```

## 4. Optional: Extended Table with Domain

If domain tags are used, generate extended table:

```bash
printf "| ADR | Title | Status | Date | Domain |\n|-----|-------|--------|------|--------|\n" && \
fd '^[0-9]{4}-.*\.md$' docs/adrs -x awk '
  /^# ADR-/ {gsub(/^# ADR-[0-9]+: /, ""); title=$0}
  /^## Status/ {p_status=1; next}
  p_status && NF {status=$0; p_status=0}
  /^## Date/ {p_date=1; next}
  p_date && NF {date=$0; p_date=0}
  /^domain:/ {gsub(/^domain:[[:space:]]*/, ""); domain=$0}
  /^status:/ && !status {gsub(/^status:[[:space:]]*/, ""); status=$0}
  /^date:/ && !date {gsub(/^date:[[:space:]]*/, ""); date=$0}
  END {
    fname = FILENAME; sub(/.*\//, "", fname); num = substr(fname, 1, 4)
    if (title == "") title = "(untitled)"
    if (status == "") status = "-"
    if (date == "") date = "-"
    if (domain == "") domain = "-"
    printf "| [%s](%s) | %s | %s | %s | %s |\n", num, FILENAME, title, status, date, domain
  }
' {} | sort
```

## 5. Summary Statistics

After the table, show summary:

```bash
echo ""
echo "**Summary**:"
echo "- Total: $(fd '^[0-9]{4}-.*\.md$' docs/adrs | wc -l | tr -d ' ') ADRs"
echo "- Accepted: $(grep -rl '^Accepted$\|^status:.*Accepted' docs/adrs/*.md 2>/dev/null | wc -l | tr -d ' ')"
echo "- Superseded: $(grep -rl '^Superseded\|^status:.*Superseded' docs/adrs/*.md 2>/dev/null | wc -l | tr -d ' ')"
echo "- Deprecated: $(grep -rl '^Deprecated\|^status:.*Deprecated' docs/adrs/*.md 2>/dev/null | wc -l | tr -d ' ')"
```

**Tip**: Add the listing command to `docs/adrs/README.md` so anyone can regenerate the index. See the ADR README template generated by `/blueprint:derive-adr`.

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments

Loading comments…