Skip to content
Productivity
Skill

/LocalIntelligence

Generic civic intelligence aggregator for any US city — daily local digest of construction permits, crime, new businesses, public officials, legislation, elections, arrests, and local news, keyed off principal's Hometown. Writes JSON consumed by Pulse LOCAL tab. Crime delegates

From plugin
lifeos
19k56 skills8 agents7 commands
Install
$ npx -y skills add danielmiessler/personal_ai_infrastructure --skill LocalIntelligence --agent claude-code

How it fires

How this skill gets triggered: by you, by Claude, or both.

  • Fires itselfAuto-invocation. Claude auto-loads it when your prompt matches the work.Auto-invocation is when the right skill fires by itself at the right moment, driven by a FLOW.md router and a hook, instead of you invoking it by name. It is the difference between a skill being installed and a skill actually getting used.Read the full definition →
  • You can call itInvoke it directly when you want it.
  • Slash command/LocalIntelligence

Context preview

The summary Claude sees to decide when to auto-load this skill.

Generic civic intelligence aggregator for any US city — daily local digest of construction permits, crime, new businesses, public officials, legislation, elections, arrests, and local news, keyed off principal's Hometown. Writes JSON consumed by Pulse LOCAL tab. Crime delegates

SKILL.md

LocalIntelligence.SKILL.md
name: LocalIntelligence
version: 1.0.9
description: "Generic civic intelligence aggregator for any US city — daily local digest of construction permits, crime, new businesses, public officials, legislation, elections, arrests, and local news, keyed off principal's Hometown. Writes JSON consumed by Pulse LOCAL tab. Crime delegates to a dedicated crime-stats skill. Workflows: DailyBrief, Construction, Crime, Business, Officials, Legislation, Elections, Arrests, News. USE WHEN local news, hometown news, council meeting, building permits, mayor, ballot measures, ordinance, recent arrests, civic intel, local digest. NOT FOR national news or arbitrary-city crime."

LocalIntelligence

Customization

**Before executing, check for user customizations at:** `~/.claude/LIFEOS/USER/CUSTOMIZATIONS/SKILLS/LocalIntelligence/`

If this directory exists, load and apply any `PREFERENCES.md`, optional source-list overrides, or per-source API keys (e.g., OpenStates, Google News topic ID). These override defaults. If the directory does not exist, proceed with skill defaults — universal sources only.

**`sources.json`** in the same directory is the deterministic per-city source list (RSS feeds, local JSON APIs) consumed by `Tools/UserSources.ts` on every refresh — see `Tools/UserSources.help.md` for the schema. City-specific URLs belong there, never in this skill.

Voice Notification

**When executing a workflow, do BOTH:**

1. **Send voice notification**:

   curl -s -X POST http://localhost:31337/notify \
     -H "Content-Type: application/json" \
     -d '{"message": "Running WORKFLOWNAME in LocalIntelligence"}' \
     > /dev/null 2>&1 &

2. **Output text notification**:

   Running **WorkflowName** in **LocalIntelligence**...

What It Does

LocalIntelligence is a civic intelligence aggregator for any US city. It pulls eight categories of local data — construction permits, crime, new businesses, public officials, legislation, elections, arrests, and local news — into a single daily JSON digest, keyed off the city in the principal's identity file and served to the Pulse LOCAL tab. Crime delegates to the dedicated crime-stats skill.

The Problem

What's actually happening where you live is scattered across a dozen sites that nobody checks — the city's permit portal, the council agenda system, the sheriff's blotter, a local paper, the elections office. No single feed tells you a new ordinance is up for a vote, a building is going up down the street, or an election is coming. Most "local news" tools either cover one city, hardcode endpoints that break, or paywall the good stories. This skill stays generic across every US city, resolves the target city at runtime, and degrades gracefully when a source has no data instead of blanking the whole digest.

How It Works

Local civic intelligence for whatever city the principal lists in `PRINCIPAL_IDENTITY.md` Hometown. Generic across all US cities — no per-city profiles, no hardcoded endpoints. Eight fetchers run in parallel and write one JSON digest, served to the Pulse `LOCAL` tab.

Default Hometown — Always Dynamic

The principal's hometown is **never hardcoded in this skill**. Every workflow and tool resolves it at runtime via:

import { readHometown } from "./Tools/Hometown.ts"
const { city, state, zip, county } = await readHometown()

`Tools/Hometown.ts` parses the `**Hometown:**` line from `~/.claude/LIFEOS/USER/PRINCIPAL/PRINCIPAL_IDENTITY.md`. If absent, every workflow surfaces a clear "no hometown set" message and refuses to fetch. There is no fallback city.

Workflow Routing

| Workflow | Trigger | File | |----------|---------|------| | **DailyBrief** | "daily local digest", "what's happening in my city", "refresh local intel" | `Workflows/DailyBrief.md` | | **Construction** | "new construction", "building permits", "what's being built" | `Workflows/Construction.md` | | **Crime** | "crime stats", "is my city safer", "crime trend" | `Workflows/Crime.md` | | **Business** | "new businesses", "business openings", "business closures" | `Workflows/Business.md` | | **Officials** | "city council", "mayor", "school board", "public officials" | `Workflows/Officials.md` | | **Legislation** | "pending laws", "council agenda", "ordinance vote", "new laws in effect" | `Workflows/Legislation.md` | | **Elections** | "upcoming election", "ballot measures", "who's running", "polling location" | `Workflows/Elections.md` | | **Arrests** | "recent arrests", "police blotter", "sheriff blotter" | `Workflows/Arrests.md` | | **News** | "local news", "hometown news", "headlines from my city" | `Workflows/News.md` |

Architecture

LocalIntelligence/
├── SKILL.md                  this file
├── Workflows/
│   ├── DailyBrief.md         orchestrator — runs Refresh.ts and summarizes
│   ├── Construction.md
│   ├── Crime.md              fetches city crime stats via the configured crime-data adapter
│   ├── Business.md
│   ├── Officials.md
│   ├── Legislation.md
│   ├── Elections.md
│   ├── Arrests.md
│   └── News.md
├── Tools/
│   ├── Hometown.ts           parser + types — sole source of city info
│   ├── Refresh.ts            orchestrator — calls 8 fetchers, writes latest.json; --fill adds AI gap-fill
│   ├── ClaudeFill.ts         AI gap-filler — one web-research claude subprocess for empty sections
│   ├── UserSources.ts        user-configured RSS/JSON sources from CUSTOMIZATIONS sources.json
│   ├── FetchConstruction.ts
│   ├── FetchBusiness.ts
│   ├── FetchOfficials.ts
│   ├── FetchLegislation.ts
│   ├── FetchElections.ts
│   ├── FetchArrests.ts
│   ├── FetchNews.ts
│   └── FetchCrime.ts         shells to a dedicated crime-stats skill's workflow output
└── References/
    └── DataSources.md        catalog of universal civic sources keyed off {city,state}

Output: `~/.claude/LIFEOS/MEMORY/DATA/LocalIntelligence/<YYYY-MM-DD>_<city>_<state>_digest.json` (dated history — the Week/Month/Year views agg

Read more
Ships withlifeos

⛰️ The Life Operating System — an intent engineering platform that moves you from your current state to your ideal state, in life and work.

Get the whole plugin

Other skills on lifeos.