b
This commit is contained in:
@@ -1,5 +1,5 @@
|
||||
---
|
||||
name: blog_copy
|
||||
name: blog
|
||||
description: |
|
||||
Writes a conversion‑focused blog post for the selected project.
|
||||
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
|
||||
`copy_style.md`.
|
||||
|
||||
# Input Contract
|
||||
|
||||
You may receive structured input from topic_select:
|
||||
|
||||
{
|
||||
"project": "...",
|
||||
"topic_file": "...",
|
||||
"headline": "...",
|
||||
"story": [...],
|
||||
"pain_points": [...],
|
||||
"image": "..."
|
||||
}
|
||||
|
||||
|
||||
# Workflow
|
||||
|
||||
1. **Determine Project Folder**
|
||||
@@ -27,18 +41,11 @@ You follow the tone, voice, and formatting rules described in
|
||||
- `icp.md` – audience description
|
||||
- `copy_style.md` – style guide
|
||||
|
||||
2. **Ask for Missing Information (if needed)**
|
||||
Use `ask_user` only when:
|
||||
- The project path is ambiguous or missing.
|
||||
- Either `icp.md` or `copy_style.md` cannot be found.
|
||||
Prompt example:
|
||||
2. Project directory
|
||||
search the /workspace/Projects path for a directory that fit the project name in the context. this is your base dir
|
||||
use this as a basis for all files
|
||||
|
||||
```
|
||||
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/.
|
||||
```
|
||||
icp.md would be found in the /worspace/Projects/{project}/icp.md
|
||||
|
||||
3. **Load Context**
|
||||
- `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.
|
||||
Reference in New Issue
Block a user