search-things
Registry-aware search across .things/ - search by collection, tag, field, full-text, or find orphaned data. Use when user says 'search things', 'find in things', 'which profiles have [tag]'.
What this skill does
<purpose>
Registry-aware search across all `.things/` data. Knows where to look and what shape indexes have from the collection registry.
</purpose>
<steps>
<step id="load-config" number="1">
<description>Load Configuration</description>
<load-config>
Resolve the user's home directory (run `echo $HOME` via Bash). Use this absolute path for all file operations below -- never pass `~` to the Read tool.
1. Read `<home>/.things/config.json`
2. Read `<home>/.things/registry.json`
<if condition="config-missing">Tell the user to run `/things:setup-things`.</if>
</load-config>
</step>
<step id="determine-search-mode" number="2">
<description>Determine Search Mode</description>
<step name="parse-arguments">
Parse `$ARGUMENTS` for flags and query text.
</step>
<step name="scope-collection">
Flag: `--collection <name>` -- Scope to a single collection
<validate>Verify the collection exists in the registry.</validate>
Scope all subsequent searching to `<home>/.things/<collection-path>/`.
</step>
<step name="search-by-tag">
Flag: `--tag <tag>` -- Filter by tag
<phase name="central-tag-index" number="1">
Read `<home>/.things/tags/index.json` (the central tag index). Look up the tag to find which collections contain it and their counts.
</phase>
<phase name="index-search" number="2">
For each collection that has matching tags (from central index or master_index):
1. Read the master index file (if it exists)
2. Filter entries where the `tags` array contains the specified tag
3. Return matching entries with their collection context
</phase>
<phase name="fallback-scan" number="3">
For collections without a master index, scan individual `index.json` files if the collection uses `directory_per_item`, or scan files directly if the collection declares `tags_field`.
</phase>
</step>
<step name="search-by-field">
Flag: `--field <field> --value <value>` -- Query on index fields
Same approach as `--tag` but for arbitrary fields declared in `index_schema`:
1. Read master indexes
2. Filter entries where the specified field matches the value
3. Support basic matching: exact for strings, contains for arrays
</step>
<step name="search-full-text">
Flag: `--text <query>` -- Full-text search
Use Grep to search across all `.md` files in the target scope:
<if condition="collection-flag-specified">Scope to that collection's directory.</if>
<if condition="no-collection-flag">Search all of `<home>/.things/` (excluding `.git/`).</if>
Return matching file paths with surrounding context lines.
</step>
<step name="search-orphaned">
Flag: `--orphaned` -- Find structural anomalies
<phase name="find-orphan-dirs" number="1">
List all directories in `<home>/.things/` (one level deep, excluding `.git/`, `shared/`).
</phase>
<phase name="check-against-registry" number="2">
Check each against the registry -- any directory not accounted for is orphaned.
</phase>
<phase name="check-item-structure" number="3">
For `directory_per_item` collections, check each item subdirectory against `required_files`.
</phase>
<phase name="check-index-coverage" number="4">
Check for items present on disk but missing from master indexes.
</phase>
<phase name="report-findings" number="5">
Report findings.
</phase>
</step>
<step name="search-default">
Default (no flags, just query text)
<phase name="index-search" number="1">
Search across all master indexes for entries where `display_name`, `id`, or `description` matches the query.
</phase>
<phase name="text-fallback" number="2">
<if condition="no-index-results">Fall back to full-text grep across all `.md` files.</if>
</phase>
<phase name="return-results" number="3">
Return results with collection context.
</phase>
</step>
</step>
<step id="present-results" number="3">
<description>Present Results</description>
<template name="index-results">
For index-based searches, show:
- Collection path
- Item id / display_name
- Matching field and value
- File path for direct access
</template>
<template name="text-results">
For text searches, show:
- File path
- Matching lines with context
- Which collection the file belongs to (from registry)
</template>
<template name="orphan-results">
For orphan searches, show:
- Orphaned directories/files
- Missing required files per item
- Items missing from indexes
</template>
</step>
</steps>
Related in General
modeling-omnistudio-epc-catalog
IncludedSalesforce Industries CME EPC product-modeling skill for Product2-based catalog creation. Use when creating EPC products, configuring product attributes, building offer bundles with Product Child Items, or reviewing EPC DataPack JSON metadata for product catalog changes. TRIGGER when: user creates or updates Product2 EPC records, AttributeAssignment payloads, AttributeMetadata/AttributeDefaultValues, Offer bundles, or ProductChildItem relationships. DO NOT TRIGGER when: designing OmniScripts/FlexCards/Integration Procedures (use building-omnistudio-omniscript, building-omnistudio-flexcard, or building-omnistudio-integration-procedure), implementing Apex business logic (use generating-apex), or troubleshooting deployment pipelines (use deploying-metadata).
relationship-science-coach
IncludedUse this skill for direct, practical adult relationship coaching: couples conflict, repair, trust, marriage, dating, flirting, attachment patterns, emotional connection, sex, desire differences, eroticism, kink negotiation, affection, love languages, breakups, and long-term passion. Draw on Gottman, EFT and Hold Me Tight, attachment science, modern sex research, Perel, Nagoski, Kerner, Schnarch, Love and Stosny, and flexible love-language tools. Be concrete and low-hedge. Redirect only for imminent danger, abuse, coercive control, minors, non-consent, self-harm, stalking, or medical/legal/psychiatric decisions.
building-sf-integrations
IncludedSalesforce integration architecture and runtime plumbing with 120-point scoring. Use this skill to set up Named Credentials, External Credentials, External Services, REST/SOAP callout patterns, Platform Events, and Change Data Capture. TRIGGER when: user sets up Named Credentials, External Services, REST/SOAP callouts, Platform Events, CDC, or touches .namedCredential-meta.xml files. DO NOT TRIGGER when: Connected App/OAuth config (use configuring-connected-apps), Apex-only logic (use generating-apex), or data import/export (use handling-sf-data).
venue-templates
IncludedAccess comprehensive LaTeX templates, formatting requirements, and submission guidelines for major scientific publication venues (Nature, Science, PLOS, IEEE, ACM), academic conferences (NeurIPS, ICML, CVPR, CHI), research posters, and grant proposals (NSF, NIH, DOE, DARPA). This skill should be used when preparing manuscripts for journal submission, conference papers, research posters, or grant proposals and need venue-specific formatting requirements and templates.
let-fate-decide
IncludedDraws the 12 Houses of the Zodiac Tarot spread to inject entropy into planning when prompts are vague, ambiguous, or casually delegated. Interprets the spread to guide next steps. Use when the user says 'let fate decide', 'YOLO', 'whatever', 'idk', or other nonchalant phrases, makes Yu-Gi-Oh references, or when you are about to arbitrarily pick between multiple reasonable approaches. Prefer over ask-questions-if-underspecified when the user's tone is casual or playful rather than precision-seeking.
net-ops
IncludedCross-platform network troubleshooting (Windows, macOS, Linux) via local or remote shell. Use for: DNS broken, can't resolve hostnames, nslookup/dig works but apps fail, NRPT, WFP, scutil, /etc/resolver, systemd-resolved, /etc/resolv.conf, NetworkManager, VPN DNS leak residue (ProtonVPN/Mullvad/WireGuard/AnyConnect), AV/firewall blocking DNS or DoH, Tailscale DNS interaction, intermittent connectivity, remote diagnostics over SSH.