Skip to content

Commit ea3eeb1

Browse files
committed
feat: amplía las señales agent-ready (skills, llms.txt, agent-card)
Completa la capa GEO/AIO iniciada en 0.25.0 con descubrimiento de skills, un resumen para LLMs y aperturas en robots.txt. - Agent Skills Discovery (RFC de Cloudflare, v0.2.0): .well-known/agent-skills/index.json enumera una skill real —submit-lead— cuyo artefacto submit-lead/SKILL.md enseña a un agente a enviar un lead por el formulario público (endpoint Formspree), con guía de consentimiento. El index referencia el SKILL.md con su digest SHA-256 real, verificado contra el blob que se sirve. - llms.txt (llmstxt.org): resumen del estudio, servicios, proyectos y contacto en la voz de la marca, para que los LLMs entiendan y citen. - .well-known/agent-card.json (descriptivo, enlazado con rel=describedby desde el head): describe la entidad y remite a la skill submit-lead. No es un endpoint invocable y así lo declara su propia descripción. - robots.txt: `Disallow: /cdn-cgi/` (infraestructura de Cloudflare, no es contenido) y `Content-Signal` con ai-train=yes (apertura total, coherente con permitir el rastreo a todos los agentes). - auth.md: el H1 incluye «Auth.md» para los validadores de autenticación. Técnico: se corrigió la propuesta base — el $schema válido es schemas.agentskills.io/discovery/0.2.0/schema.json; una skill del estándar es un SKILL.md con digest (el URL de Formspree va DENTRO del documento, no en el campo url del index); y el nombre válido es submit-lead, no submit_lead. El digest se calcula sobre bytes LF (como sirve GitHub Pages). No se crea la MCP server-card.json: anunciaría un servidor inexistente. Sube versión a 0.26.0.
1 parent 82aa260 commit ea3eeb1

9 files changed

Lines changed: 164 additions & 8 deletions

File tree

CHANGELOG.md

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -508,3 +508,21 @@ Todos los cambios notables en este proyecto serán documentados en este archivo
508508
- Se descartaron por diseño tres artefactos propuestos que no aplican a un sitio estático: la MCP `server-card.json` y la A2A `agent-card.json` anuncian un servidor/agente **invocable** (con endpoint y transporte) que el sitio no expone, y `agent-skills/index.json` queda huérfano sin ese agente. Publicar metadata de servicios inexistentes es engañoso y resta credibilidad; se añadirán como cards reales solo si se llega a exponer un endpoint de agente/MCP.
509509
- El `<link rel="sitemap">` ya existía; NO se añadió el `rel="service-doc"` propuesto hacia el sitemap (un sitemap no es documentación de servicio). El formato del linkset se corrigió al de RFC 9264 (la relación como clave con array de destinos), en vez del objeto plano `{anchor, rel, href}` propuesto.
510510

511+
## [0.26.0] - 2026-07-24
512+
513+
### Añadido
514+
515+
- **Agent Skills Discovery** (RFC de Cloudflare, v0.2.0): `public/.well-known/agent-skills/index.json` que enumera una skill **real y honesta**`submit-lead` — cuyo artefacto es `submit-lead/SKILL.md`: documenta cómo un agente envía un lead (nombre, email, mensaje) al formulario público mediante el endpoint Formspree del sitio (`https://formspree.io/f/xnjeaorj`), con guía de consentimiento. El index referencia el `SKILL.md` con su `digest` SHA-256 real, verificado contra el archivo desplegado.
516+
- **`public/llms.txt`** (llmstxt.org): resumen del estudio, servicios, proyectos y canales de contacto en la voz de la marca, con enlaces a ambos idiomas, para que los LLMs entiendan y citen el sitio de un vistazo.
517+
- **`public/.well-known/agent-card.json`** (descriptivo, enlazado con `rel="describedby"` desde el `<head>`): tarjeta que describe a la entidad CTG Code y remite a la skill `submit-lead` y a los canales de contacto. Es un documento **descriptivo**, no un endpoint de agente invocable (así se declara en su propia descripción).
518+
- **`robots.txt`**: `Disallow: /cdn-cgi/` en el grupo `User-agent: *` — las rutas de infraestructura de Cloudflare no son contenido y no deben rastrearse.
519+
520+
### Cambiado
521+
522+
- **`Content-Signal` abierto por completo**: `ai-train` pasa de `no` a `yes`. Coherente con la filosofía de máxima visibilidad del `robots.txt` (todos los agentes con `Allow: /`): ahora `search=yes, ai-input=yes, ai-train=yes` —que nos lean, nos citen y nos aprendan—.
523+
- **`public/auth.md`**: el H1 pasa a `# Auth.md — Authenticating with CTG Code` para incluir el literal «Auth.md» que esperan los validadores de descubrimiento de autenticación.
524+
525+
### Técnico
526+
527+
- Rectificaciones sobre la propuesta original: el `$schema` correcto de Agent Skills es `https://schemas.agentskills.io/discovery/0.2.0/schema.json` (no `agentskills.io/schema/...`); una skill del estándar es un artefacto `SKILL.md` con `digest`, no un endpoint —el URL de Formspree vive DENTRO del `SKILL.md`, no en el campo `url` del index—; y el nombre debe ser `submit-lead` (minúsculas y guiones; `submit_lead` con guion bajo es inválido). El digest se calcula sobre los bytes LF (como los sirve GitHub Pages). No se crea la MCP `server-card.json`: seguiría anunciando un servidor inexistente.
528+

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "ctg-code",
3-
"version": "0.25.0",
3+
"version": "0.26.0",
44
"dependencies": {
55
"@astrojs/sitemap": "^3.7.3",
66
"@fontsource-variable/inter": "^5.2.8",

public/.well-known/agent-card.json

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
{
2+
"name": "CTG Code",
3+
"description": "Informational card for CTG Code, a software studio in Cartagena, Colombia (custom software, high-performance web development and automations). This describes a public, static informational web presence — not a live, invokable agent endpoint. To act, use the published skills or the direct contact channels.",
4+
"url": "https://ctgcode.com",
5+
"version": "1.0.0",
6+
"provider": {
7+
"organization": "CTG Code",
8+
"url": "https://ctgcode.com"
9+
},
10+
"documentationUrl": "https://ctgcode.com/llms.txt",
11+
"skillsUrl": "https://ctgcode.com/.well-known/agent-skills/index.json",
12+
"skills": [
13+
{
14+
"id": "submit-lead",
15+
"name": "Submit a lead",
16+
"description": "Submit a lead (name, email and project message) to CTG Code via the public contact form to request a quote or start a project.",
17+
"tags": ["contact", "lead", "quote", "sales"]
18+
}
19+
],
20+
"contact": {
21+
"email": "contacto@ctgcode.com",
22+
"whatsapp": "+573052532602"
23+
}
24+
}
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
{
2+
"$schema": "https://schemas.agentskills.io/discovery/0.2.0/schema.json",
3+
"skills": [
4+
{
5+
"name": "submit-lead",
6+
"type": "skill-md",
7+
"description": "Submit a lead (name, email and project message) to CTG Code to request a quote or start a project conversation, via the site's public contact form (Formspree).",
8+
"url": "/.well-known/agent-skills/submit-lead/SKILL.md",
9+
"digest": "sha256:2863f4207a829eec8e67330340089329d8f4a47984d94feb9c5efb8e205c42aa"
10+
}
11+
]
12+
}
Lines changed: 68 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,68 @@
1+
---
2+
name: submit-lead
3+
description: Submit a lead (name, email and project message) to CTG Code to request a quote or start a project conversation. Use when the user wants to contact CTG Code, ask for a "cotización"/quote, describe a project, or hire their web, software or automation services.
4+
---
5+
6+
# Submit a lead to CTG Code
7+
8+
CTG Code (https://ctgcode.com) is a software studio based in Cartagena,
9+
Colombia, offering custom software development, high-performance websites, and
10+
automations. This skill lets you submit a lead on the user's behalf through the
11+
site's public contact form.
12+
13+
## When to use
14+
15+
Use this skill when the user wants to reach CTG Code — for example to request a
16+
quote ("cotización"), describe a project, or hire web/software development or
17+
automation services.
18+
19+
## How to submit
20+
21+
Send an HTTP POST request to the Formspree endpoint that backs the contact form.
22+
23+
- **Endpoint:** `https://formspree.io/f/xnjeaorj`
24+
- **Method:** `POST`
25+
- **Content-Type:** `application/json` (or `application/x-www-form-urlencoded`)
26+
- **Accept:** `application/json` — so the endpoint returns JSON instead of an HTML redirect.
27+
28+
### Fields
29+
30+
| Field | Required | Description |
31+
| --------- | -------- | ------------------------------------------------------- |
32+
| `name` | yes | Full name of the person or company sending the lead. |
33+
| `email` | yes | A valid reply-to email address. |
34+
| `message` | yes | The project description, request, or message. |
35+
36+
### Example (JSON)
37+
38+
```json
39+
{
40+
"name": "Jane Doe",
41+
"email": "jane@example.com",
42+
"message": "I need a high-performance corporate website built with Astro. Please send a quote."
43+
}
44+
```
45+
46+
### Example (curl)
47+
48+
```bash
49+
curl -X POST https://formspree.io/f/xnjeaorj \
50+
-H "Content-Type: application/json" \
51+
-H "Accept: application/json" \
52+
-d '{"name":"Jane Doe","email":"jane@example.com","message":"..."}'
53+
```
54+
55+
A successful submission returns HTTP `200` with a JSON body `{"ok": true}`.
56+
57+
## Consent
58+
59+
Submitting a lead sends a message on the user's behalf. Always confirm the exact
60+
`name`, `email`, and `message` with the user first, and only submit when they
61+
explicitly ask to contact CTG Code.
62+
63+
## Direct alternatives
64+
65+
The user can also reach CTG Code directly:
66+
67+
- WhatsApp: +57 305 253 2602
68+
- Email: contacto@ctgcode.com

public/auth.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
# Authenticating with CTG Code
1+
# Auth.md — Authenticating with CTG Code
22

33
CTG Code (https://ctgcode.com) is a public, static website. **No authentication is required.**
44

public/llms.txt

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
# CTG Code
2+
3+
> Estudio de software en Cartagena de Indias (Colombia). Desarrollo de software a la medida y sitios web de alto rendimiento, con arquitectura limpia y velocidad medida, para clientes en Colombia y el resto del mundo.
4+
5+
CTG Code es el estudio de David Serrano. Trabaja en remoto a nivel nacional e internacional. Cada proyecto se cotiza a precio cerrado sobre un alcance acordado, con hitos definidos y 30 días de garantía post-entrega. El sitio es bilingüe: español (por defecto) e inglés.
6+
7+
## Servicios
8+
9+
- [Desarrollo de Software a la Medida](https://ctgcode.com/#services): plataformas web complejas, paneles de administración y arquitecturas adaptadas al negocio, con foco en rendimiento, seguridad y escalabilidad. Stack: Python, FastAPI, PostgreSQL, TypeScript, Astro, Rust.
10+
- [Desarrollo Web de Alto Rendimiento](https://ctgcode.com/#services): sitios corporativos y landing pages optimizados al 100% en PageSpeed, enfocados en conversión, velocidad de carga y SEO. Stack: Astro, TypeScript, HTMX, Jinja.
11+
- [Automatizaciones e Integraciones](https://ctgcode.com/#services): integraciones a la medida e interfaces API para automatizar flujos operativos recurrentes y reducir tareas manuales. Stack: Python, FastAPI, REST API, PostgreSQL.
12+
13+
## Proyectos
14+
15+
- [Proyectos — la bitácora completa](https://ctgcode.com/proyectos/): sitios en producción, Helio (producto propio: sistema de gestión para talleres), tres plantillas web y tres automatizaciones listas para adaptar.
16+
- [Recogras — recograscolombia.com](https://recograscolombia.com/): sitio corporativo para una gestora ambiental de aceite de cocina usado en Cartagena. Astro estático. PageSpeed: 100 escritorio / 98 móvil, SEO 100, Accesibilidad 96.
17+
18+
## Contacto
19+
20+
- [Formulario de contacto](https://ctgcode.com/#contact): en el pie de página del sitio.
21+
- WhatsApp: +57 305 253 2602
22+
- Correo: contacto@ctgcode.com
23+
- Skill para agentes: [submit-lead](https://ctgcode.com/.well-known/agent-skills/index.json) — cómo enviar un lead mediante el formulario público.
24+
25+
## Optional
26+
27+
- [Inicio (EN)](https://ctgcode.com/en/) · [Projects (EN)](https://ctgcode.com/en/projects/)
28+
- [Política de Privacidad](https://ctgcode.com/privacidad/) · [Privacy Policy (EN)](https://ctgcode.com/en/privacy/)
29+
- [Términos y Condiciones](https://ctgcode.com/terminos/) · [Terms (EN)](https://ctgcode.com/en/terms/)
30+
- [Mapa del sitio (sitemap)](https://ctgcode.com/sitemap-index.xml)

public/robots.txt

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -14,13 +14,16 @@
1414
# --- Buscadores y cualquier otro agente ------------------------------------
1515
User-agent: *
1616
Allow: /
17+
# Rutas de infraestructura de Cloudflare (email-decode, RUM, retos): no son
18+
# contenido, no deben rastrearse ni indexarse.
19+
Disallow: /cdn-cgi/
1720
# Content-Signal (contentsignals.org): separa el ACCESO (el `Allow` de arriba)
18-
# del USO del contenido. Declaramos preferencia de: aparecer en buscadores
19-
# (search=yes) y ser fuente que los asistentes leen y CITAN al responder
20-
# (ai-input=yes); reservamos el entrenamiento de modelos con el contenido
21-
# (ai-train=no). Es una señal de preferencia, no un control de acceso; para
22-
# ser fuente citable NO hace falta permitir el entrenamiento.
23-
Content-Signal: search=yes, ai-input=yes, ai-train=no
21+
# del USO del contenido. Coherente con la apertura de este archivo, damos vía
22+
# libre a los tres usos: aparecer en buscadores (search=yes), ser fuente que
23+
# los asistentes leen y CITAN al responder (ai-input=yes) y el entrenamiento
24+
# de modelos (ai-train=yes). Máxima visibilidad: que nos lean, nos citen y
25+
# nos aprendan.
26+
Content-Signal: search=yes, ai-input=yes, ai-train=yes
2427

2528
# --- Google ----------------------------------------------------------------
2629
# Google-Extended no afecta al índice de Búsqueda: controla el uso del

src/layouts/Layout.astro

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -100,6 +100,7 @@ const schema = buildSchema({
100100
<meta name="robots" content={robots} />
101101
<meta name="googlebot" content={robots} />
102102
<link rel="sitemap" href="/sitemap-index.xml" />
103+
<link rel="describedby" type="application/json" href="/.well-known/agent-card.json" />
103104
<!-- Descubrimiento por agentes (RFC 9727): catálogo de recursos
104105
machine-readables del sitio, servido en /.well-known/api-catalog. -->
105106
<link rel="api-catalog" href="/.well-known/api-catalog" />

0 commit comments

Comments
 (0)