Skills DirectorySkills Directory
SkillsLearnSecurityCategoriesDocsCommunityBlog
Sign InSubmit Skill
Skills Directory

Security-tested agent skills for Claude, coding agents, and AI workflows.

Directory

  • Browse Skills
  • All Skills A–Z
  • Claude Skills
  • Claude Code Skills
  • Agent Skills
  • Categories
  • Submit a Skill

Learn

  • Learn Hub
  • Install Claude Skills
  • Write SKILL.md
  • Skills vs MCP
  • Directories Compared

Security

  • Security
  • Methodology
  • Secure Claude Skills
  • Security Badges

Company

  • About
  • Community
  • Blog
  • API Docs
  • Advertise

2026 Skills Directory. All rights reserved.

Back to skills

Close My Month

ASecurity

Run a full monthly close end-to-end: reconcile every registered account, refresh the accrual register, draft every due standard journal entry (reversing, accrual, prepaid, payroll, revenue recognition, depreciation, stock-comp, adjustment), run a cutoff check for transactions booked in the wrong period, generate P&L plus balance sheet plus cash flow, run variance analysis, and assemble a close package with the four open-items flags (recon breaks > $100, uncategorized > 10%, stale accruals > 9...

113 stars
0 votes
0 copies
0 views
Added 9/19/2026
businessgo

Works with

cli

Security Analysis

A100/100

Scanned 9/19/2026

Install to Claude Code

$npx -y skills add gethouston/houston --skill close-my-month --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Close My Month?

Add the live security badge to your README — it updates automatically with every re-scan.

Security grade badge for Close My Month
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/gethouston-close-my-month/badge)](https://www.skillsdirectory.com/skills/gethouston-close-my-month)

More formats (shields.io, HTML) on the badges page.

Download Zip
Files
SKILL.md
---
name: close-my-month
description: "Run a full monthly close end-to-end: reconcile every registered account, refresh the accrual register, draft every due standard journal entry (reversing, accrual, prepaid, payroll, revenue recognition, depreciation, stock-comp, adjustment), run a cutoff check for transactions booked in the wrong period, generate P&L plus balance sheet plus cash flow, run variance analysis, and assemble a close package with the four open-items flags (recon breaks > $100, uncategorized > 10%, stale accruals > 90 days, journal entries still in draft) at the top. Sub-invocation `step=cutoff-check` runs the cutoff step standalone. Drafts only — I never post journal entries, never file, never move money."
version: 1
category: Bookkeeping
featured: yes
image: ledger
integrations: [quickbooks, xero]
x_houston:
  created_by: houston
  skill_schema: 1
---


# Close My Month

The orchestrator for month-end. Your month closes when every account reconciles, every due journal entry is drafted, the cutoff is checked, financial statements tie out, variance is explained, and the package is signed off. I chain the skills that own each step; I never do their work inline.

Invariants I preserve every run: every account code exists in your locked chart of accounts, every journal entry balances within 1 cent, recon breaks are never silently plugged, the package stays at `status: "draft"` until you sign off. I never post journal entries, never move money, never file.

## When to use

- "close the books for March" / "run month-end" / "close Q1's last month".
- "can we ship the close for {YYYY-MM}"  -  runs whole chain.
- "cutoff check" / "anything booked in the wrong period" / "what got booked in the wrong period"  -  invoke with `step=cutoff-check` for the standalone sub-step.
- `step=cutoff-check`  -  standalone cutoff sub-step, no looping rest of orchestration. Useful when other steps already ran and only need refresh cutoff.

## Connections I need

I run external work through Composio. Before this skill runs I check that the categories below are linked. Missing → I name the category, ask you to connect it from the Integrations tab, stop.

- **QuickBooks Online or Xero** (accounting) — preferred for general ledger registers and accounts payable aging cutoff checks. Required if you want me to pull general ledger activity directly.
- **Bank feed** (Plaid-backed banking) — preferred source for reconciling each cash account. Optional, you can also drop statement PDFs.
- **Payroll provider** (Gusto, Rippling, Justworks) — needed only when there's a payroll journal entry due for the period. Optional, paste a summary as a fallback.
- **Stripe** (billing) — needed only when reconciling Stripe or pulling current monthly revenue for revenue recognition. Optional.

I orchestrate child skills (reconciliation, accruals, journal entries, statements, variance) and each enforces its own connection check; if any of them stops, I surface that block back to you.

## Information I need

I read your bookkeeping context first. For every required field that's missing I ask ONE plain-language question (best modality: connected app > file drop > URL > paste) and wait.

- **The period to close** — Required. Why: tells me the date range for reconciliations, accruals, and statements. If missing I ask: "Which month are we closing?"
- **A finished bookkeeping context** — Required. Why: I need your accounting method, suspense code, and registered accounts before I orchestrate the close. If missing I ask: "Have we set up the books yet? If not, run the setup first."
- **A chart of accounts** — Required. Why: every journal entry and statement keys off it. If missing I ask: "Do we have a chart of accounts yet? If not, let's draft one first."
- **An opening trial balance** — Required if this is your first close on this system. Why: every balance-sheet number anchors here. If missing I ask: "Do you have a closing trial balance from your prior books? Drop the spreadsheet so I can load opening balances."
- **A current budget** — Optional. Why: variance analysis runs against budget if available, otherwise against prior period. If you don't have one I keep going and run prior-period variance only.

## Steps
<!-- houston-workflow:v1 -->

1. **Parse inputs & read context.**
   - Required: `period` (`YYYY-MM`). Parse to `{periodStart, periodEnd}`.
   - Load `context/bookkeeping-context.md`  -  stop if missing, ask user run `set-up-my-books` first.
   - Load `config/context-ledger.json`, `config/chart-of-accounts.json` (**locked** for run  -  stop if absent, ask `build-my-chart-of-accounts`), `config/prior-categorizations.json`, `config/opening-trial-balance.json` (if present), `config/budget.json` (if present).
   - Make close folder: `mkdir -p closes/{YYYY-MM}/`.

2. **Snapshot prior-period state.** Before any writes, copy relevant `outputs.json` rows for period into `closes/{YYYY-MM}/_snapshot.json` so close reproducible if user re-runs.

3. **`step=cutoff-check` branch.** If triggered, skip to Step 7.

4. **Reconcile every account (loop `reconcile-my-accounts`).** For each account in `context-ledger.domains.banks.accounts[]`, invoke `reconcile-my-accounts` skill for `{accountLast4, period}`. Collect output path + break status. Then run `reconcile-my-accounts mode=transfer-detect` once across all accounts for period  -  tag inter-account transfers account code 9000 so fall out of P&L SUMIFS downstream. Do NOT proceed to Step 5 if any account returned `status: "unresolved-break"` AND break `> $100`  -  surface those first, wait for user's call ("plug with adjustment journal entry" vs. "research further").

5. **Refresh accrual register (`review-my-accruals`).** Invoke `review-my-accruals` for period. Rewrites `accruals/register.md`, read-merge-writes `accruals.json` with current set of active accruals. Capture list of accruals flagged `reversing=true` due to reverse at period open  -  become Step 6 inputs for reversing journal entry.

6. **Draft every due standard journal entry (loop `draft-a-journal-entry`).** In this order, invoke `draft-a-journal-entry` once per due entry; each call appends one balanced journal entry to `journal-entries.json`. Collect paths + ids for package.

   1. **Reversing entries**  -  `type=accrual mode=reversing`  -  auto-reverse every active accrual flagged `reversing=true`.
   2. **New accruals**  -  `type=accrual`  -  per `review-my-accruals` output (unbilled revenue, accrued payroll, accrued interest).
   3. **Prepaids**  -  `type=prepaid`  -  amortize rent / SaaS / insurance.
   4. **Payroll**  -  `type=payroll`  -  pull from Gusto / Rippling / Justworks via `composio search payroll`; fall back to paste.
   5. **Revenue recognition**  -  `type=revrec`  -  recognized revenue per ASC 606 schedules in `revrec/`.
   6. **Depreciation**  -  `type=depreciation`  -  from `config/fixed-assets.json`.
   7. **Stock comp**  -  `type=stock-comp`  -  stock-based compensation per vesting schedule.
   8. **Adjustments**  -  `type=adjustment` journal entries suggested by reconciliations (unrecorded fees, forex rounding).

   Every journal entry lands at `status: "draft"`. Never flip to `posted` here  -  needs explicit user confirmation.

7. **Cutoff check sub-step.** Build `closes/{YYYY-MM}/cutoff-check.md` with these checks:
   - **Expenses dated prior, booked current**  -  scan period journal entries for receipt / source dates in prior period. Suggest "accrue in prior period, reverse this period".
   - **Expenses dated current, not yet booked**  -  pull accounts payable aging via `composio search accounting`. Any open bill dated `≤ periodEnd` missing from this period's journal entries is unrecorded liability candidate.
   - **Revenue cutoff**  -  invoices dated after `periodEnd` with delivery dates before `periodEnd` (ASC 606 cross-check).
   - **Cash-basis sanity**  -  payments `> 1%` of period operating expenses within ±3 days of `periodEnd`.
   - **Suspense survey**  -  current `suspense.json` balance; flag items aged `> 90d`.

   Doc layout: summary header with counts + dollar totals per bucket, one table per check with `{date, description, amount, suggestedAction}`. Append one `outputs.json` row with `type: "books-audit", domain: "close"`. If invoked as `step=cutoff-check`, stop here; skip Steps 8+.

8. **Generate three financial statements (`prepare-my-financials` × 3).** In sequence so downstream statements can read prior ones:
   1. `statement=pnl`  -  writes `financials/{YYYY-MM}/pnl.md`.
   2. `statement=balance-sheet`  -  writes `financials/{YYYY-MM}/balance-sheet.md`. Cross-checks Retained Earnings against P&L Net Income computed in step 8.1.
   3. `statement=cash-flow`  -  writes `financials/{YYYY-MM}/cash-flow.md`. Reconciles ending cash line to sum of `context-ledger.domains.banks` ending balances (from recons in Step 4).

   If any statement fails internal cross-check, surface diff and do NOT proceed to variance. User makes call.

9. **Run variance analysis (`explain-my-variance`).** Invoke once for period. If `config/budget.json` exists, skill runs actuals vs. budget; else runs vs. prior period. Captures driver decomposition + plain-English narrative. Writes `variance-analyses/{YYYY-MM}.md`.

10. **Compute open-items flags for package header.**
    - **Recon breaks > $100**  -  count in `recon-breaks.json` with `abs(amount) > 100` AND `status: "unresolved"`.
    - **Uncategorized > 10% of volume**  -  Suspense absolute dollars ÷ total period absolute volume. Flag if `> 0.10`.
    - **Stale accruals > 90d**  -  entries in `accruals.json` with `active=true` AND `now - createdAt > 90 days`.
    - **Journal entries still in draft**  -  count from `journal-entries.json` for period with `status: "draft"` (non-zero at first run expected  -  flags "post these N journal entries to QuickBooks Online / Xero" action item).

11. **Assemble `closes/{YYYY-MM}/package.md`.** Sections:
    - **Header**  -  period, status (`draft`), timestamp, four Step-10 flags rendered prominently as user's TODOs.
    - **Reconciliations**  -  one-line summary per account with three-way proof result and link to full recon; internal transfer pairs called out.
    - **Journal entries**  -  table `{id, date, type, memo, totalDebits, status}` sorted by type then date; each row links to `journal-entries/{YYYY-MM}/{slug}.md`.
    - **Cutoff check**  -  bucket counts + link to `cutoff-check.md`.
    - **Financial statements**  -  P&L, balance sheet, cash flow links with headline numbers inline (Net Income, Ending Cash, Total Assets).
    - **Variance analysis**  -  link + 3-bullet narrative pulled verbatim from `variance-analyses/{YYYY-MM}.md`.
    - **Accruals snapshot**  -  counts (active / reversed / stale) + link to `accruals/register.md`.
    - **Open questions for founder**  -  anything child skills surfaced needing human input before flipping to `ready`.

12. **Update indexes** (atomic `.tmp` + rename, read-merge-write):
    - `outputs.json`  -  `{type: "close-package", title: "Close {YYYY-MM}", summary, path, status: "draft", domain: "close"}`. Child skills already appended own rows.
    - `run-index.json`  -  `{id, period, status: "draft", accountsIncluded[], suspenseTotal, pnlNetIncome}`. `pnlNetIncome` read verbatim from P&L.

13. **Summarize to user.** Close status + package path (clickable), four Step-10 flags with action items ("post {N} draft journal entries", "resolve {M} recon breaks"), headline numbers (Net Income, Ending Cash, Runway), next move ("approve draft journal entries and I flip package to `ready`").

## Sub-skill invocation contract

Each child skill (`reconcile-account`, `review-accruals`, `prep-journal-entry`, `generate-financial-statements`, `run-variance-analysis`) invoked with `period`, owns own artifact + index rows, never re-done inline. If child stops on blocker (missing config / connection), surface verbatim and pause.

## Outputs

- `closes/{YYYY-MM}/package.md`  -  top-level close narrative with four open-items flags at top.
- `closes/{YYYY-MM}/cutoff-check.md`  -  cutoff issues + unrecorded liabilities.
- `closes/{YYYY-MM}/_snapshot.json`  -  prior-period state snapshot for reproducibility.
- All child skill artifacts  -  `reconciliations/{account_last4}/{YYYY-MM}.md` × N, `journal-entries/{YYYY-MM}/*.md` × M, `financials/{YYYY-MM}/*.md` × 3, `variance-analyses/{YYYY-MM}.md`, `accruals/register.md` (rewritten).
- `outputs.json`  -  one row for close package + rows from every child skill.
- `run-index.json`  -  one row appended, `status: "draft"`.

Attribution

gethoustongethouston
View sourceMore from gethouston →
SSkills DirectorySkills Directory

Ship a skill? Prove it's safe.

Free 120-pattern security scan, letter grade, and an embeddable README badge.

Submit a skill

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 (0)

No comments yet. Be the first to comment!

SSkills DirectorySkills Directory

Ship a skill? Prove it's safe.

Free 120-pattern security scan, letter grade, and an embeddable README badge.

Submit a skill

Related Skills

Solution Architect

Designs system architecture, component specifications, and technical integration strategy. Use when: designing solutions, system architecture, technology stack, or integration approaches.

192 votes

Akorchak:Venture Assessment

Generate a comprehensive VC investment assessment report for a company

72 votes

Stock Analysis

Analyze stocks and cryptocurrencies using Yahoo Finance data. Supports portfolio management (create, add, remove assets), crypto analysis (Top 20 by market cap), and periodic performance reports (daily/weekly/monthly/quarterly/yearly). 8 analysis dimensions for stocks, 3 for crypto. Use for stock analysis, portfolio tracking, earnings reactions, or crypto monitoring.

6511 votes

Just Fucking Cancel

Find and cancel unwanted subscriptions by analyzing bank transactions. Detects recurring charges, calculates annual waste, and helps you cancel with direct URLs and browser automation. Use when: 'cancel subscriptions', 'audit subscriptions', 'find recurring charges', 'what am I paying for', 'save money', 'subscription cleanup', 'stop wasting money'. Supports CSV import (Apple Card, Chase, Amex, Citi, Bank of America, Capital One, Mint, Copilot) OR Plaid API for automatic transaction pull. Out...

6511 votes

Telegram Compose

Compose rich, readable Telegram messages using HTML formatting via direct Telegram API. Use when: (1) Sending any Telegram message beyond a simple one-line reply, (2) Creating structured messages with sections, lists, or status updates, (3) Need formatting unavailable via Clawdbot's Markdown conversion (underline, spoilers, expandable blockquotes, user mentions by ID), (4) Sending alerts, reports, summaries, or notifications to Telegram, (5) Want professional, scannable message formatting wit...

6511 votes
View all in business →