2016judea/agente-mercado-vertical

Construya un agente conversacional que conozca una industria y una zona metropolitana mejor que cualquier modelo general, porque lleva un resumen precomputado de registros públicos reales (o un corpus de reseñas minado) y puede obtener registros en vivo durante la conversación.

¿Qué es agente-mercado-vertical?

Este skill guía la creación de un agente de IA vertical especializado en un sector y una zona metropolitana, superando a los modelos generales al fundamentar sus respuestas en datos reales y precomputados (un 'sustrato' JSON congelado, como registros de propiedad o reseñas minadas) que se inyectan en el prompt del sistema. El agente también puede extraer datos en vivo durante la conversación y utiliza herramientas para cálculos deterministas (como DSCR o impuestos) en lugar de depender de la aritmética del modelo, evitando errores plausibles pero incorrectos. El skill detalla pasos clave: encontrar el foso (datos propietarios), construir el sustrato byte-estable, enumerar lo que los registros no cubren, evitar trampas de datos que generan números erróneos, medir costos de tokens, configurar caché según el tráfico, y desplegar como destino publicitario con URLs personalizadas y atribución en sessionStorage. También incluye una capa espacial precomputada ('qué hay al lado') y un manejo de consultas fuera del sector que captura señales para construir el próximo sector. Está diseñado para desarrolladores que construyen agentes verticales fundamentados en datos, no en conocimiento general, y es aplicable a plataformas como Claude Code, Cursor o Codex mediante la implementación de los pasos descritos. El enfoque en trampas de datos (como inversiones de valores, direcciones con formatos inconsistentes o esquemas compartidos con convenciones distintas) lo hace especialmente útil para evitar errores costosos en producción.

Compatible con~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/2016judea/brick-mortar-skills/tree/HEAD/skills/vertical-market-agent

Installed? Explore more Investigación y análisis de datos skills: affaan-m/uspto-database, affaan-m/scholar-evaluation, affaan-m/literature-review · View all 6 →

Preguntar en tu IA favorita

Abre un nuevo chat con esta habilidad de agente ya precargada.

Documentación

Construcción de un agente de mercado vertical

Un agente conversacional que supera a un modelo general en una industria y una zona metropolitana, porque lleva un resumen precomputado de datos reales y puede obtener registros en vivo mientras conversa. Terminado = en vivo en una URL, respondiendo con cifras que se remontan al sustrato, negándose a inventar las que no tiene, y verificado en producción con pruebas reales (no una prueba local).

Paso 0: dos preguntas que responde el propietario

  1. ¿Qué zona metropolitana, y por qué esa? Elija donde ya tenga trabajo de campo o datos que sean literalmente ciertos allí. Mine una zona metropolitana, luego anuncie allí.
  2. ¿Se anunciará, y está enlazado? Cuatro decisiones de ingeniería dependen de esto (píxel, TTL de caché, URLs personalizadas, atribución). Ver Paso 7.

Paso 1: encuentre el foso antes de escribir código

Dos tipos: un corpus que minó y posee (ej. decenas de miles de reseñas), o una unión (un feed de ventas en vivo contra registros catastrales, de valoración y fiscales: dos fuentes gratuitas que nadie se molesta en combinar). La enumeración masiva paga a menudo falla (créditos agotados, búsqueda de propietario ausente).

Cuando la enumeración masiva está amurallada, el punto de entrada es la restricción, no los datos. Una aplicación del condado que responde para cualquier dirección pero no lista ninguna está bien si enumera direcciones en otro lugar (Paso 3).

Los estados sin divulgación son una oportunidad: nadie tiene comparables de venta, incluidos los competidores, por lo que la propia aritmética del condado, bien organizada, se convierte en el mejor ancla.

Paso 2: construya el sustrato

Un resumen JSON congelado inyectado del lado del servidor en el prompt del sistema en cada mensaje.

  • Verifique primero el tamaño del panel en un agente de corpus de reseñas. "Dónde se ubica entre lugares como el suyo" necesita ~50+ negocios con 50+ reseñas cada uno. Por debajo de eso, no envíe una clasificación.
  • Un perfil sectorial escrito por un modelo no es sustrato. Cargar prosa que un modelo escribió le dice al modelo lo que ya sabe y crea un foso nulo. El sustrato es medido.
  • Los datos faltantes son un backlog, no un bloqueador: si posee los medios para minar un panel, mínelo.
  • Verifique la licencia antes de minar. Los datos de algunas fuentes no pueden redistribuirse, lo que decide si un panel minado puede ser alguna vez una descarga.
  • Cada bloque lleva un _interpretation: 2-4 oraciones sobre lo que significa y cómo lo usa un profesional. El mayor valor por byte; es la diferencia entre recitar y razonar.
  • Salida byte-estable: sort_keys=True, ordenaciones totales con desempates en un campo único, sin marca de tiempo excepto generated_on. Un byte variable vuelve a facturar el prefijo en caché en cada mensaje.
  • Superponga capas, y deje que las capas mejores reemplacen a las anteriores; dos bloques que dan números diferentes para una misma pregunta hacen que el modelo arbitre a medio camino de la respuesta. Reemplace a nivel de sub-clave cuando un bloque está mezclado.
  • Archive completo, envíe compacto (gemelos .compact.json), recurriendo al archivo si falta un gemelo.
  • Elimine correos electrónicos personales de la investigación combinada: a escala publicitaria, el modelo convierte la bandeja de entrada de un funcionario público en su canal de salida. Departamento + teléfono dice lo mismo.

Paso 3: enumere lo que los registros no pueden

Un feed de listados delgado casi no ve nada. Busque "cerca de" en una cuadrícula de círculos pequeños, luego una cada resultado con el registro del condado (una ejecución: 307 complejos -> 208 parcelas coincidentes -> 9,736 unidades).

  • Círculos pequeños (~3.5 km en una cuadrícula de ~3.9 km): la API limita los resultados por llamada, por lo que una consulta para toda la zona metropolitana devuelve silenciosamente solo los lugares más conocidos.
  • Deje que el registro público decida qué es algo, no la fuente de la que lo enumeró (un "apartamento" de un directorio que el condado registra como un centro de cuidado; un lote de autos usados etiquetado como multifamiliar).
  • En un mercado donde no se lista nada, las personas con las que vale la pena hablar son las que no están vendiendo.

Paso 4: las trampas de datos (lea dos veces)

Cada error aquí produjo un número plausiblemente incorrecto, nunca un error. Presupueste tiempo de QA contra un fixture conocido como correcto.

  1. Vuelva a consultar la fuente antes de planificar basándose en su descripción. Un nombre de capa en un documento es una hipótesis. Lea los metadatos del servicio (para ArcGIS ?f=json, editingInfo.dataLastEditDate) y los valores de campo reales antes de confiar en un nombre de campo.
  2. Verifique contra algo que sepa. Un edificio que se sabe que tiene 36 unidades se analizó como 10: un fixture detectó el peor error. Mejor aún, envíe una muestra de su salida a la propia API del editor en un marco de coordenadas diferente y compare.
  3. Vigile las inversiones, no solo los valores atípicos: propiedades pequeñas que valoran más por puerta que las grandes significa que el analizador está mal, no el mercado.
  4. Haga que los datos se verifiquen a sí mismos. Donde exista una verificación cruzada (pies cuadrados por unidad), calcule ambas lecturas de un campo ambiguo y deje que la banda plausible elija; si ninguna encaja, marque y excluya.
  5. Desduplique antes de agregar. Un feed que lista una propiedad bajo cada tipo de activo que tiene: 623 filas eran 206 propiedades.
  6. Almacene en caché CRUDO, nunca analizado, o una corrección del analizador significa volver a rastrear el servidor de un condado pequeño.
  7. Los formatos de dirección difieren del índice de registros. Abrevie las direcciones y elimine el sufijo; una escalera de variantes recuperó aproximadamente la mitad de los errores.
  8. Etiquete las muestras pequeñas con su n; a veces la delgadez es el hallazgo.
  9. En un corpus de reseñas, lea las COINCIDENCIAS, nunca la proporción. Ejecute cada expresión regular de taxonomía contra texto real de 1-3 estrellas y lea con qué coincidió. El verbo de servicio del sector es a menudo un verbo de daño: un patrón de "lesión" en cortar (me|mi) coincidió con el 10.7% de las quejas de salones, en su mayoría "pagó $40 para cortarme mi propio pelo". Verifique taladrar (odontología), remolcar (grúas), despojar (detallado), romper (vidrio), afeitar / cortar (barberías, cuidado personal), pegar (flebotomía). Y un tema que nadie plantea permanece fuera.
  10. El vocabulario del editor no es el del comprador. La clase "arterial" de un condado puede ser la red de autopistas, donde nada tiene fachada, mientras que las calles comerciales que un broker quiere decir son "colectoras". Liste el contenido de cada grupo antes de mapear, y nombre los campos por lo que contienen.
  11. Un esquema compartido comparte nombres de columna, no convenciones. En varios condados, un campo puede llevar cuatro sistemas de clasificación, -9999 vs 0, un tercer valor de exención de vivienda. Cense cada campo por condado; trate un cero de un condado como un error de consulta hasta que se demuestre lo contrario; prefiera pruebas derivadas (valor del edificio = 0 y valor del terreno > 0 para vacancia).
  12. Un nombre son varias cosas (una autopista y su vía de servicio comparten un nombre). Devuelva las alternativas y haga que el modelo diga cuál usó.
  13. Las cosas que "deberían" encontrarse una vez se encuentran muchas veces (dos carreteras que se cruzan en seis lugares). Promediar los puntos cae en un campo; agrupe, conserve cada ubicación, elija por una regla declarada.
  14. Un total derivado elimina silenciosamente filas que nunca calculó. Envíe el conteo de cobertura junto a cualquier total con entradas parciales, y haga que se lea como un piso.

Paso 5: las matemáticas deterministas van en una herramienta, nunca en el prompt

DSCR, IRR, efectivo sobre efectivo, dosis, impuestos: una herramienta, calculada, que devuelve sus suposiciones y advertencias. La aritmética de un modelo es plausiblemente incorrecta (un DSCR de 1.19 que en realidad es 1.09 va a un prestamista). Esto fuerza un bucle de agente real (stream -> ejecutar herramientas -> retroalimentar -> stream), incluyendo el manejo de pause_turn y max_tokens.

Paso 6: costo del prompt, medido

  • Cuente los tokens con la API. Un JSON denso funciona a ~2.4 bytes/token, no ~4.
  • Imponga un límite de bytes/token en una prueba: enviar el archivo en lugar del gemelo compacto no tiene síntoma excepto la factura.
  • El TTL de caché sigue al tráfico. Escaso, compartido manualmente: el valor predeterminado de 5 minutos (una escritura de 1 hora es un recargo que nadie reutiliza). Tráfico pago continuo: 1 hora, porque los visitantes comparten el prefijo.

Paso 7: despliegue

  • Derive la página de un generador; cada reemplazo afirma que su ancla existe, y las comprobaciones verifican ambas direcciones (el contenido eliminado se ha ido y la función sobrevivió).
  • Si es un destino publicitario: URLs personalizadas como redirecciones temporales (las permanentes son almacenadas en caché por la plataforma publicitaria), verificando que la cadena de consulta sobreviva; un nombre de evento de píxel por campaña; TTL de caché de 1 hora; y atribución fijada en sessionStorage en la visita de llegada y transportada en cada turno (no localStorage, o la visita orgánica de la próxima semana se acreditará al anuncio de hoy).
  • Verifique el estado del despliegue, no el registro de compilación; un límite de función serverless o un archivo no rastreado puede fallar detrás de un registro verde. Importe los archivos de datos estáticamente para que el empaquetador los incluya.

Reglas estrictas para el prompt

  1. Nunca invente un número. Sustrato, una llamada de herramienta realmente ejecutada, o una estimación marcada.
  2. Nunca presente un valor de registro público como un valor de mercado. Diga cuál está dando.
  3. Indique el límite de cobertura en la descripción de la herramienta Y en el prompt (qué condados). Una regla en un solo lugar se evita.
  4. Registro público uno a la vez, no como lista. La búsqueda del propietario de la propiedad preguntada está bien; los listados masivos de nombres y direcciones pueden violar las leyes estatales de registros abiertos sobre uso comercial.
  5. Vuelva a verificar lo que el prompt llama imposible. Una falsedad segura sobre lo que no se puede saber es peor que la brecha.

Agentes de investigación para capas de contexto

Dé a los agentes de investigación paralelos un presupuesto de tokens (y la proporción de 2.4 bytes/token), dígales que reduzcan la cifra en lugar de la advertencia, y espere que corrijan su trabajo anterior.

Paso 8: el final fuera del sector

Algunos visitantes no son su usuario (una tienda de segunda mano en un agente de restaurantes). El "No tengo eso" por defecto pierde la mejor señal que obtendrá: un propietario real que nombra el sector a construir a continuación.

  • Una herramienta flag_out_of_scope(sector): el cliente renderiza tres opciones tocables; una herramienta submit_feature_request archiva el toque.
  • Todo en la primera respuesta: la profundidad media de sesión es un turno.
  • No inventarie lo que el agente lleva en su lugar (un corte redujo una respuesta de 1,275 a 124 caracteres).
  • Las opciones son renderizadas por el cliente, nunca una lista numerada en prosa (un "2" desnudo puede activar la habilidad 2).
  • Dígale al modelo dónde se renderizan las opciones; no puede ver al cliente.
  • Mapee las opciones a capacidades universales para que una solicitud archivada nombre una capacidad para un sector.

Paso 9: la capa espacial ("qué hay al lado")

  • Encuentre la organización ArcGIS Online del condado, no su host GIS bloqueado por WAF; los servicios alojados a menudo sirven de forma anónima. Solicite la geometría en la referencia espacial nativa de la capa.
  • Cuando dos fuentes se encuentren, solicite la segunda en el marco de la primera (outSR), y afirme que las extensiones se superponen antes de emitir filas: un desajuste de marco no intersecta nada e informa "cada parcela sin zonificar". En DuckDB, ST_Transform necesita always_xy := true o devuelve POINT(inf inf) silenciosamente.
  • Zonificación por centroide; la zonificación dividida necesita un umbral de participación (>5% del lote), comparando distritos no polígonos. Una intersección simple llamó al 37% de las parcelas divididas; el umbral dio aproximadamente el 4%.
  • Los códigos de zonificación de una ciudad son de esa ciudad. El mismo código significa distritos diferentes al lado; envíe la ciudad y el nombre publicado con cada código.
  • Precalcule fuera de línea, envíe un índice libre de geometría, no agregue ninguna ruta API: GIS del condado -> espejo espacial DuckDB -> un índice JSON comprometido; el tiempo de ejecución solo realiza búsquedas y haversine. Una dependencia espacial fallida degrada a una lista de vecinos vacía, una respuesta incorrecta segura. Valide el índice al cargar y lanze una excepción.
  • Una desigualdad en cualquier lugar de una unión espacial degrada el predicado espacial a un post-filtro (ON a.id < b.id AND ST_Intersects(...) probó ~29 mil millones de pares). Deje que el predicado esté solo, EXPLAIN para SPATIAL_JOIN, emita claves, luego desduplique: 7 minutos sin terminar se convirtieron en 19 segundos.
  • Limite el índice enviado a lo que el comprador transacciona más los vecinos inmediatos, y marque las parcelas de "contexto" que llevan menos datos.

Individual skills in this repo

This repo contains 7 individual skills — each has its own dedicated page.

2016judea/ascii-charts

Build charts as plain Unicode-block text — bar, range, bullet, gap-bracket, star-histogram, heatmap, line, Venn, pie, donut and scatter — with a dependency-free Python script, for anywhere only monospace text survives (newsletter code blocks, Markdown, terminals, plain-text email, chat). Use when a chart has to embed as literal text instead of an image or a third-party chart service, or when you want a hand-made terminal look with no branding footer.

2016judea/buffett-checklist

Apply Warren Buffett's investment framework as a discipline lens when weighing a buy, hold, or sell decision — circle of competence, economic moat, owner earnings & intrinsic value, margin of safety, management/capital-allocation quality, and market psychology (Mr. Market, fear vs greed, temperament). Use when asked to "run this through Buffett", "what would Buffett say", "does this pass the moat test", "is this cheap enough", or for a second, more skeptical read on a name being evaluated or already held. This is a discipline overlay, not a replacement for a strategy — it applies the Buffett lens to how someone actually invests, rather than issuing generic advice.

2016judea/image-riff

Turn one or more reference images into original art in that reference's own visual language, then cut it to whatever surface it's for. Use when you paste or point at art and say "use this as the base image", "generate art from this", "riff on this", "some creative ideation with these images", "make me a channel banner / avatar / cover / plate", "wilder version of this", or want a spread of options off one piece of reference. This is the TASK skill; the engine is the `make-art` tool skill.

2016judea/leonardo

Draw the way Leonardo da Vinci drew — a study sheet, a notebook folio, a red-chalk or silverpoint study, a machine cutaway, a storm of vortices — in his real materials and page-logic, generated with the make-art engine and anchored on fifteen of his actual (public-domain) sheets. Use when you say "Leonardo", "da Vinci", "like his notebooks", "a codex page of X", "draw this as one of his study sheets", "sanguine", "silverpoint", or wants a design, diagram, or illustration in that hand. Also a reading guide to his notebooks (Richter's 1883 public-domain translation) for "what did Leonardo say about shadow / trees / water". This is a TASK skill; the engine is `make-art`.

2016judea/mcp-stack

Which free MCP server or framework to reach for, and its traps — finance/gov data (SEC EDGAR, Yahoo, SAM.gov, USAspending), web research (Exa, Firecrawl, Crawl4AI, Jina reader), design/art/brand (Canva, Inkscape, Penpot, Figma, Orshot, Hugging Face image gen, vectorizing, charts), data/spatial (DuckDB spatial, live ArcGIS layers, OpenStreetMap/Overpass, Census, MapLibre), and ops (PostHog, iMessage, context7 docs). Use when making a social post, OG card, poster, logo/vector, chart, map, or brand asset; when querying parquet/geojson/duckdb or a city's open-data layer; when an MCP "needs authentication" or fails; or when asked "what tools do we have", "is there an MCP for X", "should we add X".

2016judea/records-request

Get a specific record out of a US government office by public-records request — "request the assessor's model", "file a data practices request", "FOIA this", "open records request", "can we just ask the county for it", "who do I write to at <county>", "chase that request", "did they ever answer". Covers checking the website first, finding the right office and statute, the carve-out paragraph that makes a request answerable instead of refused, web-form traps (hidden character caps, WAFs that reject apostrophes), chasing (there is usually no deadline), whether what comes back may be republished, and parsing multi-year tables without silent errors.

2016judea/sms-native-product

Build a product whose interface is text messages rather than an app or a website — "no app, no website", "they just text a number", "chat with our agent natively in Text Messages", "can we do this over text", "an SMS bot", "a Telegram bot", "make it a group chat", "minimum viable friction". Fires equally when it has already gone wrong — "my campaign got rejected", "our number is blocked", "the texts aren't arriving", "why do I need to register". Covers the gate that decides whether such a product can send at all (US A2P 10DLC registration, SHAFT content rules, permanent rejection codes), group MMS from code, what each channel can't do, an architecture that survives losing the channel, and guarding model-rewritten user content.

Skills relacionados