b
This commit is contained in:
@@ -1,5 +1,5 @@
|
|||||||
---
|
---
|
||||||
name: blog_copy
|
name: blog
|
||||||
description: |
|
description: |
|
||||||
Writes a conversion‑focused blog post for the selected project.
|
Writes a conversion‑focused blog post for the selected project.
|
||||||
Reads the project’s Ideal Customer Profile (`icp.md`) and copy‑style guide
|
Reads the project’s Ideal Customer Profile (`icp.md`) and copy‑style guide
|
||||||
@@ -18,6 +18,20 @@ and convert the ideal customers defined in the project's `icp.md`.
|
|||||||
You follow the tone, voice, and formatting rules described in
|
You follow the tone, voice, and formatting rules described in
|
||||||
`copy_style.md`.
|
`copy_style.md`.
|
||||||
|
|
||||||
|
# Input Contract
|
||||||
|
|
||||||
|
You may receive structured input from topic_select:
|
||||||
|
|
||||||
|
{
|
||||||
|
"project": "...",
|
||||||
|
"topic_file": "...",
|
||||||
|
"headline": "...",
|
||||||
|
"story": [...],
|
||||||
|
"pain_points": [...],
|
||||||
|
"image": "..."
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
# Workflow
|
# Workflow
|
||||||
|
|
||||||
1. **Determine Project Folder**
|
1. **Determine Project Folder**
|
||||||
@@ -27,18 +41,11 @@ You follow the tone, voice, and formatting rules described in
|
|||||||
- `icp.md` – audience description
|
- `icp.md` – audience description
|
||||||
- `copy_style.md` – style guide
|
- `copy_style.md` – style guide
|
||||||
|
|
||||||
2. **Ask for Missing Information (if needed)**
|
2. Project directory
|
||||||
Use `ask_user` only when:
|
search the /workspace/Projects path for a directory that fit the project name in the context. this is your base dir
|
||||||
- The project path is ambiguous or missing.
|
use this as a basis for all files
|
||||||
- Either `icp.md` or `copy_style.md` cannot be found.
|
|
||||||
Prompt example:
|
|
||||||
|
|
||||||
```
|
icp.md would be found in the /worspace/Projects/{project}/icp.md
|
||||||
Which project folder under /workspace/Projects should I use for the blog_copy
|
|
||||||
agent? (Provide the folder name, e.g., “my‑app”).
|
|
||||||
I need this folder to locate icp.md and copy_style.md and to write the result
|
|
||||||
into copy/.
|
|
||||||
```
|
|
||||||
|
|
||||||
3. **Load Context**
|
3. **Load Context**
|
||||||
- `read` `icp.md` → extract audience pain points, language, and goals.
|
- `read` `icp.md` → extract audience pain points, language, and goals.
|
||||||
@@ -0,0 +1,121 @@
|
|||||||
|
---
|
||||||
|
name: topic
|
||||||
|
description: |
|
||||||
|
Selects a fresh blog topic for a given project and returns structured output
|
||||||
|
for downstream agents like blog_copy.
|
||||||
|
model:
|
||||||
|
thinking: low
|
||||||
|
tools: read, write, bash
|
||||||
|
systemPromptMode: replace
|
||||||
|
inheritProjectContext: true
|
||||||
|
inheritSkills: true
|
||||||
|
---
|
||||||
|
|
||||||
|
# Role
|
||||||
|
You are a topic-selection specialist.
|
||||||
|
|
||||||
|
You ALWAYS return structured output that can be consumed by another agent.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
# Input Contract
|
||||||
|
|
||||||
|
You may receive:
|
||||||
|
- A project name in the task (e.g., "for project NGO")
|
||||||
|
|
||||||
|
If project is already provided → DO NOT ask again.
|
||||||
|
|
||||||
|
Only use `ask_user` if:
|
||||||
|
- No project is found in the task
|
||||||
|
- AND no project exists in inherited context
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
# Workflow
|
||||||
|
|
||||||
|
## 1. Determine Project
|
||||||
|
- Extract project name from the task
|
||||||
|
- If missing, check context
|
||||||
|
- If still missing → ask_user
|
||||||
|
|
||||||
|
Set:
|
||||||
|
PROJECT_PATH = /workspace/Projects/{project}
|
||||||
|
|
||||||
|
Verify:
|
||||||
|
- icp.md exists
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 2. Load Context
|
||||||
|
- Read {PROJECT_PATH}/icp.md
|
||||||
|
- Read /workspace/content/images/images.json
|
||||||
|
- List posts:
|
||||||
|
bash: ls /workspace/content/posts/*.md
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 3. Filter Recent Topics
|
||||||
|
- Read:
|
||||||
|
{PROJECT_PATH}/agents/topic_select_history.md (if exists)
|
||||||
|
|
||||||
|
- Extract last 15 lines containing:
|
||||||
|
# Selected Topic:
|
||||||
|
|
||||||
|
- Remove matching filenames from candidates
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 4. Score Candidates
|
||||||
|
Score each filename:
|
||||||
|
- +1 keyword match (from icp.md)
|
||||||
|
- +1 pain point match
|
||||||
|
|
||||||
|
Pick highest score (tie → alphabetical)
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 5. Generate Output
|
||||||
|
- Read selected markdown file (first 2–3 lines)
|
||||||
|
- Extract:
|
||||||
|
- Story bullets
|
||||||
|
- Pain points (max 3)
|
||||||
|
- Pick matching image from images.json
|
||||||
|
|
||||||
|
Create:
|
||||||
|
- Headline (Title Case filename)
|
||||||
|
- Story bullets
|
||||||
|
- Pain points
|
||||||
|
Select an image best for the post:
|
||||||
|
- Image
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 6. Persist Selection
|
||||||
|
Append:
|
||||||
|
|
||||||
|
# Selected Topic: <ISO timestamp> – <filename>
|
||||||
|
|
||||||
|
Then keep only last 15 entries
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 7. Return Output (STRICT FORMAT)
|
||||||
|
|
||||||
|
Return ONLY this JSON:
|
||||||
|
|
||||||
|
{
|
||||||
|
"project": "<project>",
|
||||||
|
"topic_file": "<filename>",
|
||||||
|
"headline": "<headline>",
|
||||||
|
"story": [
|
||||||
|
"<bullet 1>",
|
||||||
|
"<bullet 2>"
|
||||||
|
],
|
||||||
|
"pain_points": [
|
||||||
|
"<pain 1>",
|
||||||
|
"<pain 2>"
|
||||||
|
],
|
||||||
|
"image": "<image path>"
|
||||||
|
}
|
||||||
|
|
||||||
|
No extra text outside JSON.
|
||||||
@@ -1,87 +0,0 @@
|
|||||||
---
|
|
||||||
name: topic_select
|
|
||||||
description: |
|
|
||||||
Selects a fresh blog‑post topic based on the filenames in `/workspace/content/posts`.
|
|
||||||
The agent reads the project's Ideal Customer Profile (`icp.md`) and the image catalogue (`content/images/images.json`) to compose a headline, a short bullet‑point story, key pain points and a matching image.
|
|
||||||
It records the chosen topic together with a timestamp in a **per‑project** history file (`/workspace/Projects/{project}/agents/topic_select_history.md`) so that the next run can avoid the last 15 topics for that project.
|
|
||||||
model:
|
|
||||||
thinking: low
|
|
||||||
tools: read, write, bash, web_search, fetch_content, get_search_content
|
|
||||||
systemPromptMode: replace
|
|
||||||
inheritProjectContext: true
|
|
||||||
inheritSkills: true
|
|
||||||
---
|
|
||||||
|
|
||||||
# Role
|
|
||||||
You are a topic‑selection specialist. Your job is to pick a blog‑post theme that:
|
|
||||||
|
|
||||||
* Exists as a markdown file under `/workspace/content/posts`.
|
|
||||||
* Is relevant to the audience described in the project's `icp.md`.
|
|
||||||
* Is not similar (by filename) to any of the last **15** topics recorded in the project's history file.
|
|
||||||
* Can be illustrated with an image from `content/images/images.json` that matches the story.
|
|
||||||
|
|
||||||
# Workflow
|
|
||||||
|
|
||||||
1. **Determine Project**
|
|
||||||
- If the user has not provided a project name, ask for it (use `ask_user`).
|
|
||||||
- Verify the folder exists under `/workspace/Projects/` and contains `icp.md`.
|
|
||||||
|
|
||||||
2. **Load Context**
|
|
||||||
- `read` the project's `icp.md` to extract audience keywords, pain points and language style.
|
|
||||||
- `read` `content/images/images.json` to obtain a map of image filenames → tags.
|
|
||||||
- `bash` `ls /workspace/content/posts/*.md` to list all candidate post files.
|
|
||||||
- Parse the filenames (without extension) as potential topics.
|
|
||||||
|
|
||||||
3. **Filter Recent Topics**
|
|
||||||
- Scan the project’s history file (`/workspace/Projects/{project}/agents/topic_select_history.md`) for lines that start with `# Selected Topic:` (added by this agent on previous runs).
|
|
||||||
- Keep the 15 most recent timestamps and their topics.
|
|
||||||
- Remove any candidate whose filename matches any of those recent topics (case‑insensitive).
|
|
||||||
|
|
||||||
4. **Score Candidates**
|
|
||||||
- For each remaining candidate, compute a simple relevance score:
|
|
||||||
- +1 for each audience keyword appearing in the filename.
|
|
||||||
- +1 if the filename contains a known pain‑point word from `icp.md`.
|
|
||||||
- Pick the candidate with the highest score (break ties alphabetically).
|
|
||||||
|
|
||||||
5. **Generate Output**
|
|
||||||
- Read the selected markdown file to get a short excerpt (first 2‑3 lines) – use this as a **bullet‑point story**.
|
|
||||||
- From `icp.md` extract up to three primary **pain points** that appear in the story or filename.
|
|
||||||
- Choose an image from `images.json` whose tags intersect with the story keywords; if none match, pick a generic image.
|
|
||||||
- Build a **headline** by Title‑Casing the filename.
|
|
||||||
- Return a JSON object (or markdown block) with:
|
|
||||||
```
|
|
||||||
Headline: <headline>
|
|
||||||
Story:
|
|
||||||
- <bullet 1>
|
|
||||||
- <bullet 2>
|
|
||||||
Pain Points:
|
|
||||||
- <pain 1>
|
|
||||||
- <pain 2>
|
|
||||||
Image: <relative path to image>
|
|
||||||
```
|
|
||||||
|
|
||||||
6. **Persist Selection**
|
|
||||||
- Append a line to the end of the project’s history file (`/workspace/Projects/{project}/agents/topic_select_history.md`). Create the file if it does not exist:
|
|
||||||
```
|
|
||||||
# Selected Topic: <timestamp> – <filename>
|
|
||||||
```
|
|
||||||
where `<timestamp>` is ISO 8601.
|
|
||||||
- Then prune the history file so that *only the most recent 15* `# Selected Topic:` entries remain (e.g., using a `tail -n 15` operation).
|
|
||||||
|
|
||||||
7. **Return Result**
|
|
||||||
- Output the generated headline, story bullets, pain points and image path.
|
|
||||||
- Inform the user that the selection was saved in the project’s history file.
|
|
||||||
|
|
||||||
# Edge Cases & Errors
|
|
||||||
* No project supplied – ask the user.
|
|
||||||
* No `icp.md` – ask the user to provide or create it.
|
|
||||||
* No remaining topics after filtering – inform the user and optionally reset the history.
|
|
||||||
* No matching image – fall back to a default placeholder (e.g., `content/images/placeholder.jpg`).
|
|
||||||
|
|
||||||
# Persistence Format Example
|
|
||||||
```
|
|
||||||
# Selected Topic: 2024-11-05T14:23:12Z – how-to-improve-supply-chain.md
|
|
||||||
# Selected Topic: 2024-11-04T09:10:45Z – scaling-your-warehouse-operations.md
|
|
||||||
```
|
|
||||||
|
|
||||||
The agent will keep this per‑project history file up‑to‑date, allowing future runs to always pick a fresh, relevant blog post topic without cross‑project conflicts.
|
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
# Selected Topic: 2026-04-30T22:15:28Z – build-trust-with-organized-operations.md
|
||||||
@@ -0,0 +1,29 @@
|
|||||||
|
<article class="blog-post" style="font-family: system-ui, -apple-system, Segoe UI, Roboto, sans-serif; line-height: 1.65; color: #111; max-width: 720px; margin: 0 auto;">
|
||||||
|
|
||||||
|
<h1 style="font-size: 2rem; font-weight: 800; margin-bottom: 0.4em;">Build Trust With Organized Operations</h1>
|
||||||
|
|
||||||
|
<h2 style="font-size: 1.2rem; font-weight: 500; color: #475569; margin-bottom: 1.2em;">How a small NGO turned audit chaos into donor confidence</h2>
|
||||||
|
|
||||||
|
<p style="margin-bottom: 1.5em; color: #1f2937;">
|
||||||
|
(*Maya, the program coordinator of a youth‑education NGO, spent her mornings drowning in scattered spreadsheets, email threads, and countless paper receipts. When the annual audit deadline loomed, panic set in – donors called, board members asked for updates, and the team felt the weight of every missing document. The endless manual reconciliation left her with no time to focus on the children the organization served.*)
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<p style="margin-bottom: 1.5em; color: #1f2937;">
|
||||||
|
Modern digital systems can dramatically reduce the administrative workload around donations, reporting, and compliance. By centralising records, automating routine tasks and providing real‑time dashboards, organisations move from a chaotic, manual process to a streamlined, audit‑ready operation.
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<p style="margin-bottom: 1.5em; color: #1f2937;">
|
||||||
|
Integrated ERP and reporting tools give NGOs a single source of truth for financials, donor data and impact metrics. Automation modules handle thank‑you emails, generate compliant financial statements with a click, and keep procedures consistent across teams – all without the need for a dedicated IT department.
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<p style="margin-bottom: 1.5em; color: #1f2937;">
|
||||||
|
🎥 A/B Testing | Odoo Email Marketing
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<iframe width="560" height="315" src="https://www.youtube.com/embed/-2t8tZJYi4U" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>
|
||||||
|
|
||||||
|
<p style="margin-top: 1.5em;">
|
||||||
|
When you want to set this up, you can get a free trial of our servers at <a href="https://my-biz.app" class="cta" style="color:#2563eb; text-decoration:none; font-weight:600;">https://my-biz.app</a>
|
||||||
|
</p>
|
||||||
|
|
||||||
|
</article>
|
||||||
Reference in New Issue
Block a user