Reddit Post Engine
Redacta un post para Reddit que encaje en la cultura del subreddit. Opcionalmente, publícalo mediante Composio.
Regla crítica: Nunca publiques sin confirmar las reglas del subreddit. No incluyas enlaces a productos en el cuerpo: colócalos en el primer comentario solo si es apropiado. Sigue la regla 90/10: tu publicación debe aportar valor independientemente de cualquier mención de producto.
Regla anti-spam: Las publicaciones que sean principalmente promocionales serán eliminadas y pueden resultar en la suspensión de la cuenta. El objetivo es contribuir primero a la comunidad. Las menciones de producto van en el primer comentario, y solo si el subreddit permite la autopromoción.
Paso 1: Verificación de configuración
echo "GEMINI_API_KEY: ${GEMINI_API_KEY:+set}"
# Verificar si Composio Reddit MCP está conectado
claude mcp list 2>/dev/null | grep -i reddit || echo "Composio Reddit MCP: no conectado"
Si falta GEMINI_API_KEY: Detente. Indica al usuario: "Se requiere GEMINI_API_KEY. Obténla en aistudio.google.com. Añádela a tu archivo .env."
Si Composio Reddit MCP no está conectado: Continúa. La habilidad redactará borradores pero omitirá el paso de publicación. Informa al usuario: "Composio Reddit MCP no conectado: redactaré tu publicación para que la envíes manualmente. Para habilitar la publicación directa, consulta las instrucciones de configuración en README.md."
Paso 2: Recopilar contexto
Necesitas:
- Subreddit destino (ej., r/devops, r/startups, r/SideProject)
- Qué estás compartiendo (proyecto, artículo, pregunta, discusión, herramienta)
- Descripción en una frase de lo que hace
- Por qué es relevante para la comunidad de este subreddit en concreto
- Si quieres un post de texto o de enlace
Si falta alguno de estos datos, pregunta en un solo mensaje:
"Para redactar tu publicación de Reddit, necesito:
- ¿Qué subreddit? (ej., r/devops, r/startups)
- ¿Qué estás compartiendo? (proyecto, artículo, herramienta, pregunta)
- ¿Qué hace? (una frase, técnica)
- ¿Por qué este subreddit debería interesarse específicamente?"
Paso 3: Obtener reglas y cultura del subreddit
Obtén las reglas del subreddit:
curl -s \
-H "User-Agent: varnan-skills/1.0" \
"https://www.reddit.com/r/{SUBREDDIT}/about/rules.json" \
| python3 -c "
import sys, json
d = json.load(sys.stdin)
rules = d.get('rules', [])
for r in rules:
print(f'Regla: {r.get(\"short_name\", \"\")}')
print(f'Detalle: {r.get(\"description\", \"\")[:200]}')
print()
"
Obtén los posts más populares recientes para entender el tono y estilo:
curl -s \
-H "User-Agent: varnan-skills/1.0" \
"https://www.reddit.com/r/{SUBREDDIT}/top.json?t=week&limit=10" \
| python3 -c "
import sys, json
d = json.load(sys.stdin)
for p in d['data']['children'][:10]:
pd = p['data']
print(f'Puntuación: {pd[\"score\"]} | Título: {pd[\"title\"][:100]}')
"
Observa patrones en los posts principales:
- ¿Los títulos son preguntas o afirmaciones?
- ¿Lideran con la tecnología o con el resultado?
- ¿Son personales ("Construí...") o impersonales ("Herramienta para...")?
- ¿Qué formato obtiene más participación en este subreddit?
Verifica la barra lateral del subreddit para reglas de publicación:
curl -s \
-H "User-Agent: varnan-skills/1.0" \
"https://www.reddit.com/r/{SUBREDDIT}/about.json" \
| python3 -c "
import sys, json
d = json.load(sys.stdin)
data = d.get('data', {})
print('Descripción pública:', data.get('public_description', '')[:300])
print('Suscriptores:', data.get('subscribers', 0))
"
Identifica el tipo de subreddit:
| Tipo | Ejemplos | Estilo de publicación |
|---|---|---|
| Profesional técnico | r/devops, r/sysadmin, r/ExperiencedDevs | Detalles técnicos concretos, sin relleno, "Hice X y aprendí Y" |
| Startups/creadores | r/startups, r/SideProject, r/indiehackers | Historia personal, métricas, lecciones aprendidas |
| Tecnología general | r/programming, r/technology | Ángulo de noticia, gancho de discusión, opinión controvertida |
| Carrera profesional | r/cscareerquestions, r/ITCareerQuestions | Formato de pregunta, escenario específico, pedir experiencia |
| Herramienta de nicho | r/vim, r/rust, r/golang | Contenido técnico profundo, ejemplos de código, benchmarks |
Utiliza las reglas obtenidas y los posts principales para determinar qué estilo se aplica.
Paso 4: Redactar el borrador con Gemini
Escribe el contenido del post en un archivo temporal y llama a Gemini:
cat > /tmp/reddit-post-request.json << 'ENDJSON'
{
"system_instruction": {
"parts": [{
"text": "Eres un desarrollador activo en la comunidad de {SUBREDDIT}. Escribe un post para Reddit que encaje en la cultura de este subreddit. Reglas: (1) Escribe en primera persona si es un post sobre un proyecto o experiencia. (2) NO incluyas ningún enlace a productos en el cuerpo: los enlaces van solo en el primer comentario. (3) El post debe aportar valor genuino a la comunidad independientemente del producto que se comparta. (4) Iguala el tono de los posts principales de este subreddit: {SUBREDDIT_TONE_NOTES}. (5) Título máximo 300 caracteres. (6) Cuerpo de 150 a 400 palabras para posts de texto. (7) Sin lenguaje de marketing: no uses 'revolucionario', 'potente', 'robusto', 'sin fisuras', 'innovador'. (8) Si el post trata sobre una herramienta que el usuario creó, usa el inicio 'Hice...' o 'Construí...': funciona mejor en Reddit. (9) Salida: título en la primera línea, línea en blanco, luego cuerpo. Sin etiquetas, sin comentarios. No uses guiones largos."
}]
},
"contents": [{
"parts": [{
"text": "DETALLES_DEL_POST_AQUI"
}]
}],
"generationConfig": {
"temperature": 0.7,
"maxOutputTokens": 1024
}
}
ENDJSON
curl -s -X POST \
"https://generativelanguage.googleapis.com/v1beta/models/gemini-2.0-flash:generateContent?key=$GEMINI_API_KEY" \
-H "Content-Type: application/json" \
-d @/tmp/reddit-post-request.json \
| python3 -c "import sys,json; d=json.load(sys.stdin); print(d['candidates'][0]['content']['parts'][0]['text'])"
Reemplaza DETALLES_DEL_POST_AQUI con:
- Nombre y tipo del subreddit
- Patrones observados en los posts principales
- Qué se comparte y por qué es relevante
- Detalles técnicos clave
- Motivación honesta del creador
Paso 5: Redactar el primer comentario
Si el usuario tiene un enlace al producto o contexto adicional para compartir, redacta un primer comentario para publicar inmediatamente después de que el post se publique.
El primer comentario tiene dos propósitos:
- Proporcionar el enlace (lo que mantiene el cuerpo libre de enlaces y parece menos promocional)
- Añadir contexto que sería demasiado promocional en el cuerpo del post
Reglas del primer comentario:
- Publícalo como la primera respuesta a tu propio post, inmediatamente después de que se publique
- Mantenlo por debajo de 100 palabras
- Formato de ejemplo: "Enlace para quienes quieran verlo: [URL]; también estaré encantado de responder preguntas sobre [cosa técnica específica mencionada en el post]."
- Incluye el primer comentario solo si el subreddit permite la autopromoción en comentarios
- Si el subreddit tiene una regla de "No autopromoción", omite el enlace por completo
Paso 6: Auto-verificación
Revisa el borrador antes de presentarlo:
Estructura:
- El título no supera los 300 caracteres
- No aparecen enlaces en el cuerpo del post
- El post comienza en primera persona (para posts de proyecto/experiencia)
- Se incluye al menos un detalle técnico específico o un número concreto
- El post coincide con el tono de los posts principales observados en este subreddit (anotado en el Paso 3)
- No se violan las reglas del subreddit del Paso 3
Detección de lenguaje típico de Claude: escanea estas categorías de vocabulario y elimina todas las ocurrencias:
| Categoría | Palabras a eliminar |
|---|---|
| Intensificadores de relleno | increíblemente, absolutamente, ciertamente, definitivamente, esencialmente, fundamentalmente, literalmente, particularmente, bastante, realmente, significativamente, simplemente, verdaderamente, en última instancia, muy |
| Rodeos de IA | debo señalar, vale la pena señalar, es importante señalar, como se mencionó, como señalé |
| Descriptores de hype | revolucionario, potente, robusto, sin fisuras, innovador, de primera clase, vanguardista, innovador, notable, que cambia las reglas del juego |
| Preliminares | en conclusión, en resumen, para resumir, en general, primero y ante todo, por último pero no menos importante |
| Conectores innecesarios | además, es más, adicionalmente, sin embargo (al inicio de la frase), por lo tanto, de ahí, por ello |
| Marcas de IA | esto garantiza que, esto permite que, esto ayuda a que, esto facilita, profundizar, utilizar, aprovechar, fomentar |
Si aparece alguno: reemplázalo con un sustantivo, verbo o número específico. "Muy rápido" se convierte en "se ejecuta en 12ms". "Herramienta potente" se convierte en lo que realmente hace.
Verificación de frases de eliminación instantánea: estos patrones activan los filtros de spam de Reddit o la eliminación por parte de moderadores:
- Cualquier frase que suene a anuncio ("Prueba [Producto] hoy", "Regístrate ahora", "Empieza gratis")
- Frases que impliquen que no eres el creador ("Me encontré con esta gran herramienta", "Encontré este producto increíble")
- Posesión en primera persona de usuarios ("nuestros usuarios", "nuestros clientes") en subreddits donde no tienes presencia establecida en la comunidad
- "Hice X y puedes usarlo para..." seguido inmediatamente de un enlace (estructura promocional)
- Superlativos sin calificación ("la mejor manera de...", "la única herramienta que...")
- Enlaces externos en el cuerpo del post (usa solo el primer comentario)
Si aparece alguna frase de eliminación instantánea: revisa la frase por completo, no solo cambies palabras.
Paso 7: Revisión adversarial
Antes de presentar el borrador final, realiza una revisión con 3 personajes. Cada personaje lee el post y encuentra UN problema específico, citando el texto exacto que lo desencadena.
Personaje 1: El profesional escéptico Esta persona ha estado en r/{SUBREDDIT} durante años y ha visto cientos de lanzamientos de producto disfrazados de publicaciones. Su lectura:
- ¿Alguna frase parece promocional aunque no venda explícitamente?
- ¿El post revela conocimiento genuino de los problemas de la comunidad, o solo habla del producto?
- ¿Hay alguna afirmación que un profesional consideraría ridícula?
Indica la línea específica que señalaría y por qué.
Personaje 2: El moderador Esta persona hace cumplir las reglas obtenidas en el Paso 3. Su lectura:
- ¿Cumple técnicamente el post con las reglas del subreddit?
- ¿Es aceptable la proporción entre autopromoción y contribución a la comunidad?
- ¿Habrían visto eliminar esta misma estructura de post antes?
Indica la regla específica que corre el riesgo de violarse, o confirma que está limpio.
Personaje 3: El lector objetivo Este es un miembro de la comunidad que no es creador y que coincide con la demografía del subreddit. Su lectura:
- ¿Votarían a favor de este post aunque nunca usen el producto?
- ¿Hay una conclusión que puedan aplicar aunque ignoren el enlace del primer comentario?
- ¿La frase inicial les da ganas de seguir leyendo?
Indica la única cosa por la que dejarían de leer, o confirma que el post mantiene su atención.
Después de que los tres personajes informen: aplica las correcciones necesarias. Si ningún personaje encontró un problema, indica "Revisión adversarial: limpia."
Paso 8: Publicar mediante Composio (Opcional)
Si Composio Reddit MCP está conectado y el usuario confirma que quiere publicar:
Usa la herramienta reddit-composio MCP REDDIT_CREATE_REDDIT_POST con:
- subreddit: {SUBREDDIT_SIN_r/}
- title: {TITULO}
- kind: "self"
- text: {CUERPO}
Antes de publicar, confirma con el usuario: "Listo para publicar en r/{SUBREDDIT}. Título del post: '{TITULO}'. ¿Procedo?"
Solo continúa después de una confirmación explícita.
Después de publicar:
- Anota la URL del post de la respuesta
- Si se redactó un primer comentario, publícalo inmediatamente usando el mismo MCP con el ID del post devuelto
Si la publicación falla (403, 429 u otro error): Presenta el borrador para su envío manual. Indica al usuario: "La publicación directa falló ([código de error]). Aquí tienes tu post para que lo envíes manualmente. Copia y pega el título y el cuerpo en reddit.com/r/{SUBREDDIT}/submit."
Paso 9: Presentar el resultado
## Post de Reddit: r/{SUBREDDIT}
### Título
{título}
### Cuerpo
{cuerpo}
### Primer comentario (publicar inmediatamente después)
{primer comentario, si aplica}
---
### Notas de envío
- Tipo de post: {texto/enlace}
- Mejor momento para publicar: {horas punta para este subreddit: mañanas de días laborables en horario de EE. UU. para la mayoría de subreddits técnicos}
- Después de publicar: Responde a todos los comentarios en la primera hora: la interacción temprana indica calidad al algoritmo
- Nota sobre karma: {Si la cuenta es nueva, indica que algunos subreddits requieren un karma mínimo antes de publicar}
Si el post ya fue enviado mediante Composio, reemplaza el bloque de resultado con:
Post enviado: {url_del_post_de_reddit}