ProTech
Your entire property portfolio — as a live dashboard in VS Code, and as data your coding agent can actually reason about.
Property managers live in a dozen disconnected systems — Buildium, Yardi, AppFolio, Airbnb, Zillow, Apartments.com, RentCafe — each with its own login, its own export button, its own dashboard. The numbers that actually run the business (occupancy, rent roll, receivables, work orders, the trailing‑12 P&L) are scattered across all of them, and none of it is anywhere a modern AI coding agent can see.
ProTech closes that gap. It brings your unified portfolio into the one place you already work — VS Code — as a real dashboard, and it makes that same data queryable in plain English by Claude Code, Codex, Gemini CLI, and Cursor/Windsurf/Cline. Ask "which properties are below 90% occupancy and carry the most A/R?" and get an answer from your own live data, not a hallucination.
Why ProTech
- 🏢 One portfolio, every system. Buildium/Yardi/AppFolio/Airbnb/Zillow all roll up into a single, tenant‑scoped view — properties, units, tenants, work orders, receivables, financials, staff, and weekly box‑score.
- 📊 The dashboard, embedded. The full ProTech web dashboard (Summary · Portfolio · 12‑Month Statement · Actions · Market) runs right inside a VS Code panel — no browser tab, no context switch.
- 🤖 Your data, agent‑native. One click wires your portfolio into any coding agent as a local, offline‑queryable dataset (JSON + SQLite) plus an auto‑loaded agent guide. No cloud MCP to deploy, no API keys to paste.
- 🔒 Secure by construction. Reads go through the authenticated ProTech service, tenant‑scoped by your token — no storage keys ship in the extension. The agent's pre‑approval is scoped to a single ProTech command (not arbitrary shell), that command can't mutate your systems of record, and its
data query is SQL‑gated and read‑only.
- 🔌 Connectors, not copy‑paste. A Playwright/subprocess connector subsystem logs into the source systems, scrapes, and publishes back — so the dashboard stays fresh from the systems of record.
Sign in once, then everything
- Install the extension and open the ProTech view in the Activity Bar.
- Sign in — a device‑code flow opens your real browser (so SSO/MFA just works). You stay signed in for 24 hours; VS Code restarts don't ask again.
- Your company name (e.g. Evergreen Property Management) appears as the Companies view title, with its dashboard sections — Summary, Portfolio, 12‑Month Statement, Actions, Market — listed below.
That's it — click a section to open the live dashboard.
The headline feature: Connect Coding Agents
Modern coding agents are brilliant at reasoning over data they can see. ProTech gives them your portfolio in a form built exactly for that.
Click ✨ Connect Coding Agents (in the Companies view title bar), point it at an empty project folder, and ProTech:
Materializes your data locally — fetches every section into canonical JSON and a derived SQLite index:
.protech/data/<company>/
normalized/*.json ← source of truth (properties, tenants, actions, ar, statement12, staff, box_score)
protech.db ← SQLite: query it in one shot instead of reading megabytes of JSON
Writes an agent guide — byte‑identical CLAUDE.md, AGENTS.md, and GEMINI.md at the project root, so whichever agent you open the folder with auto‑loads the same instructions: the schema, example queries, and the exact command to run.
Pre‑approves a read‑only runner — .claude/settings.local.json and .gemini/settings.json allow‑list one command, so routine questions don't trigger a permission prompt.
Now open that folder in your agent and just ask:
You: Which 3 properties have the most vacant units, and what's the asking rent?
Agent: (runs node .protech/bin/protech.mjs data query … against the local SQLite)
Cedar Point Apartments — 6 vacant @ $1,850 · Maple Court — 4 @ $2,100 · …
The agent works entirely off your local copy — fast, offline, and read‑only. Re‑run the command anytime to refresh; a ⟲ Re‑initialize button does a clean wipe‑and‑rebuild if anything ever gets stuck.
Won't touch your other projects. Connect only initializes an empty folder (or refreshes one it already set up). Point it at a real codebase and it refuses — it will never scatter CLAUDE.md/.protech/ into an existing project.
How it works
Sign in (device code) Connect Coding Agents Your agent
──────────────────────── ───────────────────────────── ──────────────────────
browser SSO/MFA pull: service ──► normalized/*.json reads CLAUDE.md
│ buildDb ──► protech.db runs the runner:
▼ writes: CLAUDE/AGENTS/GEMINI.md node .protech/bin/protech.mjs
24h session token .protech/bin/protech.mjs data query "SELECT …"
~/.protech/session.json ───────────────► (read by the runner) ◄──────────────┘
- Auth — a device‑code sign‑in mints a 24‑hour session token, persisted to VS Code SecretStorage and mirrored to
~/.protech/session.json so the agent's runner (a plain Node process) can read the same identity.
- Reads — all data comes from the authenticated ProTech service, which resolves your company from the token and enforces tenant + property scope server‑side. The
--company argument is only a label; it cannot cross tenants.
- Local runner — the runner is a tiny shim that points the CLI at this project's data folder. The pre‑approval covers only this one ProTech command (not arbitrary shell), and the command can't mutate your systems of record — it only ever writes the local
.protech/ copy. Its data query command is additionally gated to read‑only SQL (SELECT/WITH/EXPLAIN/PRAGMA table_info) and opens the database read‑only.
What's in your data
Materialized into SQLite (most tables also keep the full source JSON in a raw column; statement12 is stored in long numeric form):
| Table |
What it holds |
properties |
portfolio: name, type, city/state, unit count, balance |
units |
per‑unit: beds/baths/sqft, rent, market rent, occupied/available |
tenants |
residents & leases: name, status, unit, rent, contact |
actions |
work orders / tasks: title, status, priority, assignee, due date, amount |
ar |
accounts receivable: charges & balances per unit/tenant |
statement12 |
trailing‑12 P&L: one row per property × account × month |
box_score |
weekly market/leasing box‑score: occupancy, avg rent, avg sqft |
staff |
team: name, role, email, status |
Commands
| Command |
What it does |
| ProTech: Sign In |
Device‑code sign‑in via your browser |
| ProTech: Open Dashboard |
Open the embedded dashboard panel |
| ProTech: Connect Coding Agents |
Initialize an empty folder for agent access (data + map + runner) |
| ProTech: Re‑initialize Agent Folder |
Clean wipe‑and‑rebuild of .protech/ if something is stuck |
| ProTech: Refresh |
Refresh the tree/company view |
| ProTech: Check Dependencies |
Probe/install connector runtimes (Node, Playwright, Python) |
| ProTech: Reset |
Sign out and clear saved sessions/profiles |
Settings
| Setting |
Default |
Purpose |
protech.defaultCompany |
(auto) |
Company to open by default |
protech.agents.allowNonEmptyFolder |
false |
Allow Connect to write into a non‑empty folder (off = never pollute an existing project) |
protech.scraper.headless |
false |
Run connector exports headless (after a provider is verified) |
protech.browser.channel |
msedge |
Browser channel for Playwright connectors |
protech.python.path |
(auto) |
Python for the optional publish / data‑pipeline tools |
protech.node.path |
(auto) |
Node used to run the CLI (needs ≥ 22.5 for node:sqlite) |
Connectors (bring your own systems of record)
The Accounts view manages per‑provider logins. Every connector is a Playwright connector — a persistent, per‑account browser profile that logs in (SSO/MFA in a real browser), scrapes, and publishes the data back into ProTech:
- ✅ Yardi — available now.
- 🚧 Buildium, AppFolio, Airbnb — on the roadmap.
- 🚧 Zillow, Apartments.com, RentCafe — on the roadmap.
Playwright is never bundled into the extension — it's installed on demand as a managed runtime from the Dependencies view, so the install stays tiny.
Requirements
- VS Code 1.85+
- Node.js 22.5+ on your
PATH — this is the external node the agent runner uses (it needs the built‑in node:sqlite), separate from the Node that VS Code itself runs on. Point protech.node.path at a 22.5+ install if your default node is older.
- A ProTech account for your company (sign in from the extension)
Security & privacy
- No storage keys ship in the extension; every read is an authenticated, tenant‑scoped service call.
- The session token is validated server‑side on every request — revoking access takes effect immediately, even within the token's lifetime.
- The agent's pre‑approval is scoped to the single ProTech CLI command (not arbitrary shell), and that command cannot mutate your systems of record; its
data query is SQL‑gated and opens the database read‑only. Its only writes are to the local .protech/ copy.
- Materialized data lives under
.protech/ in your chosen folder and is git‑ignored by default. Sign out (or Reset) clears the session.
- Telemetry — ProTech sends anonymous usage events (extension activation and which command was run, plus the extension version), keyed to VS Code's anonymized machine ID. It never sends personal information, portfolio/tenant data, credentials, or file paths, and it fully honors your VS Code telemetry setting — set
telemetry.telemetryLevel to off (or use the global toggle) and nothing is sent.
Roadmap
- Now: embedded dashboard · device‑code auth · Connect Coding Agents (JSON + SQLite + agent map) · local MCP · Yardi connector.
- Next: more Playwright connectors — Buildium, AppFolio, Airbnb, Zillow, Apartments.com, RentCafe · one‑click Publish (scrape → dashboard) · auto‑materialize on first sign‑in.
- Later: server‑side ingest endpoint (no operator storage keys) · refreshable tokens · AppFolio/Airbnb · cross‑platform parity.
Vision
Property management is a data business trapped in a UI business. Every decision — renew or turn, chase a balance, greenlight a make‑ready, reprice a vacancy — is a query waiting to happen, buried under logins and spreadsheets. ProTech's bet is simple: put the portfolio where the work and the intelligence already are. A dashboard for the human, a clean local dataset for the agent, and one authenticated pipe feeding both. This extension is the first step.
© 2026 Lynx DI · Proprietary — all rights reserved · protech.lynxdi.com
| |