Extract entity data from household document folders (PDFs, Word docs, images, spreadsheets) and update the Altitude (Altcore) platform via API. Queries Altitude first to find existing households and their universe of entities (Individuals, LegalEntities, AccountFinancials, Contacts, TangibleAssets, Households), extracts data from documents, matches and merges against existing records (filling empty fields, flagging conflicts), creates relationships, and uploads documents to the correct entity. Use this skill whenever the user mentions Altitude, Altcore, onboarding families, extracting entity data from documents, updating households, processing client folders, or uploading documents. Also trigger when the user has a folder of family documents (trusts, LLCs, tax returns, IDs, insurance, estate plans, bank statements) and wants to populate a wealth management platform.
⛔ CRITICAL RULE: You MUST read EVERY SINGLE FILE in the household folder. Not most files. Not the important-looking files. ALL files. Write a file tracker (
altitude_review/file_tracker.md) listing every file. Mark each READ as you go. Do NOT proceed to Phase 4 until the tracker shows 100% READ. If you read 22 out of 60 files, you have failed. This is the #1 cause of extraction failure — see "Zero-Skip Rule" in Phase 3.
This skill extracts entity data from household document folders and updates the Altitude platform. It follows a query-first, match-and-merge approach — never blindly creating entities. Every change is reviewed before pushing.
Do this FIRST before anything else.
Determine the home directory:
HOME environment variableUSERPROFILE environment variableUse the Read tool to check for {HOME_DIR}/.altitude/config.json:
If the file exists and contains valid JSON, use its values:
{
"apiKey": "ak_live_xxxxxxxx",
"baseUrl": "https://api.m62.live",
"firmName": "Wellington Advisors"
}
apiKey for all API requests via the X-API-Key headerbaseUrl as the API base URLfirmName as contextIf the config file exists and is valid, skip credential prompts — proceed directly with these values.
If the Read tool returns an error (file not found), ask the user for:
X-API-Key: ak_live_xxxxxxxx
/api/v1/authenticate with credentialshttps://api.m62.live) or Development (http://localhost:8080)Then save using the Write tool to {HOME_DIR}/.altitude/config.json:
{
"apiKey": "<their-api-key>",
"baseUrl": "<their-chosen-url>",
"firmName": "<their-firm-name>"
}
Tell the user: "Saved your configuration to ~/.altitude/config.json. Future runs will use it automatically."
Detect the operating system and set platform-appropriate defaults. Do this ONCE at the start and reuse throughout:
import platform, shutil, os, tempfile
OS = platform.system() # "Windows", "Darwin", "Linux"
# Python command
PYTHON = "python" if OS == "Windows" else "python3"
# Temp directory (NEVER hardcode /tmp/)
TMPDIR = tempfile.gettempdir() # e.g., C:\Users\X\AppData\Local\Temp on Windows, /tmp on Unix
# Word doc converter
if shutil.which("textutil"):
DOCX_CMD = "textutil -convert txt" # macOS
elif shutil.which("pandoc"):
DOCX_CMD = "pandoc -t plain -o" # Cross-platform