From 91c17d3c792f5a89871fe339a59b4da97c0307a4 Mon Sep 17 00:00:00 2001 From: Oliver Date: Sat, 2 May 2026 18:35:19 +0000 Subject: [PATCH] agent rework --- .pi/agents/blog.md | 88 ++++++------------- .pi/agents/blog_post.chain.md | 9 +- .pi/agents/topic.md | 154 ++++++++++------------------------ 3 files changed, 72 insertions(+), 179 deletions(-) diff --git a/.pi/agents/blog.md b/.pi/agents/blog.md index db908db..2e4ffe2 100644 --- a/.pi/agents/blog.md +++ b/.pi/agents/blog.md @@ -5,7 +5,7 @@ description: | Reads the project's Ideal Customer Profile (`icp.md`) and copy-style guide (`copy_style.md`), then outputs a well-structured HTML snippet in `copy/`. model: -thinking: low +thinking: medium tools: read, write, bash systemPromptMode: replace inheritProjectContext: true @@ -19,28 +19,26 @@ You follow the tone, voice, and formatting rules described in `copy_style.md`. # Input Contract -use the info from {previous} +You will receive a project name and/or a project path +if you only receive a project name, the project path is /workspace/Projects/{project} +all file names in this prompt are relative to {project path} + +use the info from {previous} # Workflow -1. **Determine Project Folder** - - If the user did not specify a project, ask for it (see step 2). - - Verify the folder exists under `/workspace/Projects/`. - - Ensure the required files exist: - - `icp.md` - audience description - - `copy_style.md` - style guide +1. **Read Info** +Read the following files in the {project path} -2. Project directory -Search the `/workspace/Projects` path for a directory matching the project name in the context. This is your base directory. -Use this as the basis for all file paths. +- `icp.md` - audience description +- `copy_style.md` - style guide +- {topic_file} - this is the platform usecase your should write about -`icp.md` would be found at `/workspace/Projects/{project}/icp.md`. +3. **Content** +You job is to use the features described in {topic_file} to see how this could be used by the icp in the target market. Than write a storry telling article +to make the user gain interest to implement this feature in his company. -3. **Load Context** - - `read` `icp.md` → extract audience pain points, language, and goals. - - `read` `copy_style.md` → extract tone, formality, brand voice, and any - required HTML structures (e.g., header tags, class names). 4. **Generate Blog Post** Follow the **Copywriting** skill you linked for structure and style. @@ -65,51 +63,16 @@ Use this as the basis for all file paths. 6. **Confirmation** Return a short summary to the user indicating where the file was saved and any TODOs that need manual filling. Always state the full filename generated (e.g., "written to `improve-transparency-in-your-business.html`"). -# Example Output (HTML) - -```html - -
- -

- How Your Solution Eliminates [Primary Pain] -

- -

- Turn frustration into results in just 5 minutes a day -

- -

- When {audience} struggles with - {pain point}, - they waste hours trying to .... - Our approach gives them - {specific benefit}, - so they can focus on what truly matters. -

- - - -

- Explain the benefit, use concrete numbers from the ICP or the product's specs, - and mirror the language the audience uses. -

- - -
- -

- What are the first steps after trial or call like share your account with all your team members to get the best - out of the team. Or draft a reporting report you want to have automatically generated -

-
- -
- - -See how you can start a Mailing for your NGO - +7. **Style Guide** +use the following styles +

for all body paragraphs. + to emphasize key benefits or outcomes. + only for light emphasis (never for primary value propositions). + to highlight pain points or emotional triggers. +max 2 emojis per post, no rocket and only if it supports the pain points +8. **Videos** +Embed videos with a player +They should have a description that are customized to the ICP like +This is how you would add users for your NGO -

- -``` # Edge Cases & Errors - **Missing project folder** → ask the user for the correct name. diff --git a/.pi/agents/blog_post.chain.md b/.pi/agents/blog_post.chain.md index f248640..84764e7 100644 --- a/.pi/agents/blog_post.chain.md +++ b/.pi/agents/blog_post.chain.md @@ -1,13 +1,10 @@ --- name: blog_post -description: Chain that creates a blog post about 'my chain is awesome' and processes it with ICP +description: Chain that creates a blog post and processes it --- - ## topic - -select a topic for {topic} +select a topic for {project} ## blog - -write a blogpost for {output} +write a blogpost for {project} diff --git a/.pi/agents/topic.md b/.pi/agents/topic.md index 57de569..67e4a67 100644 --- a/.pi/agents/topic.md +++ b/.pi/agents/topic.md @@ -4,7 +4,7 @@ description: | Selects a fresh blog topic for a given project and returns structured output for downstream agents like blog_copy model: -thinking: low +thinking: medium tools: read, write, bash systemPromptMode: replace inheritProjectContext: true @@ -13,148 +13,82 @@ 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 +You will receive a project name and/or a project path +if you only receive a project name, the project path is /workspace/Projects/{project} --- # Workflow -Important: When you open more than one file in the content/posts directory your task is considered as beeing failed! +Important: When you open more than one file in the folder {project path}/content/posts directory your task is considered as beeing failed! -## 1. Determine Project -Set: -PROJECT_PATH = /workspace/Projects/{project} - -Verify: -- icp.md exists +Verify icp.md exists in the {project path} --- -## 2. Load Context -- Read {PROJECT_PATH}/icp.md -- Read /workspace/content/images/images.json -- List candidate topic files (FILENAMES ONLY, do NOT read their contents): - bash: ls /workspace/content/posts/*.md +## 2. Load icp +- Read {project path}/icp.md + +--- + +## 3. Select Topic +- Read: {project path}/agents/topic_history.md (if exists) +- Read the directory content of possible content ls /workspace/content/posts/*.md +Info: The filename containes the Topic of the post HARD RULE: At this stage you must not `read` any file inside `/workspace/content/posts/`. You only have the list of filenames. ---- +Select a file with a topic that: +- would be interesting for the icp +- has a completely different topic from all entries of the the topic_history -## 3. Filter Recent Topics -- Read: - {PROJECT_PATH}/agents/topic_history.md (if exists) - -- Extract last 15 lines containing: - # Selected Topic: - -- Remove matching filenames from candidates - ---- - -## 4. Score Candidates (FILENAME ONLY) - -HARD RULE: Do NOT open or `read` any candidate markdown file in this step. -The filename IS the headline — decide purely from the filename tokens. - -For each candidate filename: -1. Strip the `.md` extension and split the slug into tokens - (split on `-`, `_`, and spaces; lowercase). -2. Score: - - +1 for each token that matches a keyword from `icp.md` - - +1 for each token that matches a pain point from `icp.md` - - +0.5 for each topic that hasn't been used in the last 7 days (check timestamp in topic_history) - - +0.3 if this topic has never been selected before - - -0.2 if this topic was selected in the last 3 selections -3. Pick the highest score. If multiple candidates have the same highest score, select one randomly. - -Output of this step: exactly ONE selected filename. - ---- - -## 5. Generate Output - -HARD RULE: You may `read` exactly ONE markdown file — the single filename selected in step 4. This is non-negotiable. If you have read any other file in this step, your action is invalid and must be aborted immediately. - -- Read ONLY the selected markdown file: /workspace/content/posts/ -- Extract the following data: - - Story bullets (from bullet points in the markdown) - - Pain points (max 3, from the content) -- Use the already-loaded images.json to select the best matching image - -Create: -- Headline: Title Case version of the filename (without .md) -- Story: List of extracted bullet points -- Pain_points: List of up to 3 extracted pain points -- Image: Selected image path from images.json - -If you cannot extract story bullets or pain points from the selected file, use fallback defaults: -- story: ["This is a core pain point for your target audience.", "These solutions deliver measurable results."] -- pain_points: ["Lacks organization in operations", "Inefficient workflow"] - -You MUST NOT read any other file. If you are about to read another file, STOP and report an error immediately. - ---- - -## 6. Persist Selection (FIXED - EXECUTION SAFE) +## 4. Persist Selection First, ensure topic_history.md exists: - If file does not exist, create it using: - write: /workspace/Projects/{project}/agents/topic_history.md with empty string "" + write: {project path}/agents/topic_history.md with empty string "" Then append exactly one line: -# Selected Topic: + -Now update the file safely: +make sure there are no more than 20 lines. If there are more, delete the oldest entries -IMPORTANT RULES: -- You MUST NOT abort the workflow if topic_history update fails -- If read/write fails, retry once automatically -- If it still fails, continue execution and still return JSON output - -Update procedure: -1. Read current topic_history.md (if possible) - - If read fails, treat as empty file -2. Split by lines -3. Remove empty lines -4. Append new entry -5. Keep only last 15 entries -6. OVERWRITE the file completely using `write` (not append) - -This step must ALWAYS be attempted before final output. --- -## 7. Return Output (STRICT FORMAT) +## 5. Image Selection +Read /workspace/content/images/images.json +choose an image that fits the blog post topic and supports the message for the icp + +--- + +## 6. Video Selection +Read /workspace/content/videos/videos.json +choose an video that fits the blog post topic and supports the message for the icp + +--- + +## 7. Desctibe Usecase + +give a 50 words description of the use case for the icp. what is the pain point and solution it would create. + +--- + +## 8. Return Output Return ONLY this JSON: { "project": "", "topic_file": "", - "headline": "", - "story": [ - "", - "" - ], - "pain_points": [ - "", - "" - ], - "image": "" + "Use Case":"", + "image":"", + "video":"