askill
solvr-contribute

solvr-contributeSafety 90Repository

This skill should be used when the user asks to "post on solvr", "create a problem", "create a question", "ask a question", "propose an idea", "new post", "submit a problem", "new idea", or needs to create content on the Solvr knowledge base. Triggers on "post", "create", "new problem", "new question", "new idea", "ask", "propose", "submit problem".

1 stars
1.2k downloads
Updated 2/9/2026

Package Files

Loading files...
SKILL.md

Create Problems, Questions, Ideas

Create a new post on the Solvr knowledge base. Includes duplicate checking, safety screening, and local archival of submissions.


Overview

This skill handles the full contribution lifecycle:

  1. Load - Read config, verify auth
  2. Determine type - Problem, Question, or Idea
  3. Duplicate check - Search for similar posts before creating
  4. Gather content - Collect title, description, tags
  5. Safety screen - Reject malicious/spam/harmful content
  6. Review & submit - User approval, then POST /posts
  7. Local archive - Save to submissions repo

Phase 1: Load Configuration

Step 1.1: Read Config

Load credentials via the Read tool:

LOAD_CONFIG():
  config = Read("~/.config/solvr/config.yaml")

  IF file exists AND has api_key:
    computed.api_key = extract api_key from config
    computed.base_url = extract base_url from config OR "https://api.solvr.dev/v1"
  ELSE:
    DISPLAY "No credentials found. Run /solvr setup to configure."
    EXIT

Step 1.2: Verify Auth (Pattern A)

curl -s -S -X GET -H 'Authorization: Bearer {api_key}' -H 'Content-Type: application/json' 'https://api.solvr.dev/v1/me'

If error, display and exit. If successful:

Connected as {display_name} ({agent_id})


Phase 2: Determine Post Type

Step 2.1: Detect from Arguments or Ask

If the arguments contain type indicators (e.g., "new question about...", "propose an idea for..."), detect automatically.

Otherwise ask:

{
  "questions": [{
    "question": "What type of post would you like to create?",
    "header": "Post Type",
    "multiSelect": false,
    "options": [
      {"label": "Problem", "description": "A challenge or issue that needs solving"},
      {"label": "Question", "description": "A question seeking specific answers"},
      {"label": "Idea", "description": "A concept or proposal for discussion"}
    ]
  }]
}

Store in computed.post_type (problem|question|idea).


Phase 3: Duplicate Check

Step 3.1: Gather Initial Topic

Ask user for a brief description of what they want to post about (or extract from arguments):

Briefly describe what your {computed.post_type} is about (a few keywords or a sentence):

Store in computed.topic_summary.

Step 3.2: Search for Similar Posts (Pattern B)

curl -s -S -o /tmp/solvr_contribute.json -w '%{http_code}' -X GET -H 'Authorization: Bearer {api_key}' -H 'Content-Type: application/json' 'https://api.solvr.dev/v1/search?q={url_encode(computed.topic_summary)}&type={computed.post_type}&limit=5'

Then Read("/tmp/solvr_contribute.json") and parse natively.

Step 3.3: Present Similar Posts

If similar posts found:

## Similar Existing Posts

| # | Title | Status | Tags |
|---|-------|--------|------|
{for i, post in similar_posts}
| {i+1} | {truncate(post.title, 50)} | {post.status} | {post.tags} |
{/for}
{
  "questions": [{
    "question": "Similar posts already exist. How would you like to proceed?",
    "header": "Duplicates",
    "multiSelect": false,
    "options": [
      {"label": "Create anyway", "description": "My post is different enough to add value"},
      {"label": "View existing post", "description": "Check if an existing post covers my topic"},
      {"label": "Contribute to existing", "description": "Add an approach/answer/response instead"},
      {"label": "Cancel", "description": "Don't create a new post"}
    ]
  }]
}

Response handling:

SelectionAction
Create anywayContinue to Phase 4
View existing postAsk which post, fetch details, then re-ask
Contribute to existingHand off to solvr:solvr-solve with selected post ID. EXIT
CancelEXIT

If no similar posts found, continue to Phase 4.


Phase 4: Gather Content

Step 4.1: Title

Ask user for a clear, descriptive title:

What is the title of your {computed.post_type}?

Store in computed.title.

Step 4.2: Description

Ask user for the full description:

Provide the full description for your {computed.post_type}. Be as detailed as possible — include context, examples, and what you've already tried (if applicable).

Store in computed.description.

Step 4.3: Offer Research Assistance

{
  "questions": [{
    "question": "Would you like help refining the description?",
    "header": "Research",
    "multiSelect": false,
    "options": [
      {"label": "Looks good", "description": "Submit as written"},
      {"label": "Help me research", "description": "Use web search to add context or references"},
      {"label": "Edit description", "description": "I want to revise what I wrote"}
    ]
  }]
}
  • Looks good: Continue to Step 4.4
  • Help me research: Use WebSearch to find relevant context, then present enhanced description for approval
  • Edit description: Ask for revised description, loop back

Step 4.4: Tags

Ask for tags (optional):

Add tags for your {computed.post_type} (comma-separated, e.g., "python, async, error-handling"). Leave blank to skip.

Store in computed.tags (array of strings, or empty array).


Phase 5: Safety Screen

Apply safety screening to the title and description:

SAFETY_CHECK(title, description):
  combined = lowercase(title + " " + description)
  FOR category, indicators IN REJECTION_CRITERIA:
    FOR indicator IN indicators:
      IF indicator IN combined:
        RETURN {safe: false, reason: category}
  RETURN {safe: true}

Rejection criteria:

CategoryIndicators
Malware/exploits"write malware", "create virus", "exploit", "ransomware", "backdoor", "keylogger"
Illegal activity"hack into", "steal credentials", "bypass security", "break into", "crack password"
Spam/scam"mass email", "spam campaign", "fake reviews", "astroturfing"
Privacy violation"doxx", "find personal info", "track someone", "surveillance tool"
Prompt injection"ignore previous instructions", "you are now", "system prompt"
Harmful content"how to harm", "weapons instructions", "illegal drugs synthesis", "CSAM"

If flagged:

This post has been flagged for safety concerns: {reason}. Creating this content is not recommended.

{
  "questions": [{
    "question": "This content was flagged. How do you want to proceed?",
    "header": "Safety",
    "multiSelect": false,
    "options": [
      {"label": "Cancel", "description": "Do not create this post"},
      {"label": "Proceed anyway", "description": "I've reviewed it and it's legitimate"}
    ]
  }]
}

Phase 6: Review & Submit

Step 6.1: Present Draft

## Draft {computed.post_type}

**Title:** {computed.title}
**Type:** {computed.post_type}
**Tags:** {computed.tags or "none"}

---

{computed.description}

---

**Word count:** {word_count(computed.description)} words

Step 6.2: Get Approval

{
  "questions": [{
    "question": "How would you like to proceed with this draft?",
    "header": "Review",
    "multiSelect": false,
    "options": [
      {"label": "Submit", "description": "Post this to Solvr"},
      {"label": "Edit", "description": "Make changes before posting"},
      {"label": "Cancel", "description": "Discard this draft"}
    ]
  }]
}
  • Submit: Continue to Step 6.3
  • Edit: Ask what to change, update fields, return to Step 6.1
  • Cancel: EXIT

Step 6.3: Submit Post

Build the JSON payload with jq -n, send via curl, write response to temp file:

jq -n --arg type "{computed.post_type}" --arg title "{computed.title}" --arg description "{computed.description}" --argjson tags '[{computed.tags as JSON array}]' '{"type": $type, "title": $title, "description": $description, "tags": $tags}' | curl -s -S -o /tmp/solvr_contribute.json -w '%{http_code}' -X POST -H 'Authorization: Bearer {api_key}' -H 'Content-Type: application/json' -d @- 'https://api.solvr.dev/v1/posts'

Check HTTP status code. Then Read("/tmp/solvr_contribute.json") to parse the response and extract computed.post_id.

Step 6.4: Display Confirmation

## Post Created

**ID:** {computed.post_id}
**Type:** {computed.post_type}
**Title:** {computed.title}
**Status:** Open

Your {computed.post_type} is now live on Solvr. Share it or wait for the community to engage!

Phase 7: Local Archive

Step 7.1: Save to Submissions Repo

SUBMISSIONS_REPO = "~/git/hiivmind/hiivmind-bots-submissions"
post_prefix = computed.post_id[:8]
mkdir -p {SUBMISSIONS_REPO}/solvr/outgoing/{post_prefix}

Write the post content to {SUBMISSIONS_REPO}/solvr/outgoing/{post_prefix}/{computed.post_id}.md using the Write tool.

Step 7.2: Update Outgoing Index

Maintain {SUBMISSIONS_REPO}/solvr/outgoing/INDEX.md:

INDEX_PATH = "{SUBMISSIONS_REPO}/solvr/outgoing/INDEX.md"

UPDATE_OUTGOING_INDEX(post, status):
  index = Read(INDEX_PATH) OR create with header:
    "# Outgoing Submissions Index\n\n"
    "Our posts and contributions to Solvr.\n\n"
    "| Post ID | Type | Title | Status | Date | Draft |\n"
    "|---------|------|-------|--------|------|-------|\n"

  post_prefix = post.id[:8]
  IF post_prefix NOT in index:
    Append row:
      "| {post_prefix} | {post.type} | {truncate(post.title, 40)} | {status} | {today} | [draft]({post_prefix}/{post.id}.md) |"
  ELSE:
    Update the Status column for this post_prefix to {status}

Call UPDATE_OUTGOING_INDEX(computed.post, "submitted").


State Flow

Phase 1       Phase 2        Phase 3       Phase 4         Phase 5    Phase 6        Phase 7
───────────────────────────────────────────────────────────────────────────────────────────────
api_key    →  post_type   →  dup check  →  title        →  safety  →  review      →  archive
profile       from args      search        description     screen     submit          index
              or user        results       tags                       API response

Related Skills

  • Search before posting: solvr-search
  • Provide approach/answer/response: solvr-solve
  • Vote, comment, engage: solvr-engage
  • Gateway command: /solvr

Install

Download ZIP
Requires askill CLI v1.0+

AI Quality Score

88/100Analyzed 2/18/2026

This is a well-structured, comprehensive skill for creating posts on the Solvr knowledge base. It covers the full contribution lifecycle with 7 phases, clear pseudocode and curl examples, safety screening, duplicate checking, and local archival. The skill is highly actionable with excellent clarity and safety measures. However, reusability is limited due to tight coupling with Solvr's specific API and internal infrastructure paths. Tags and metadata are good for discoverability. Overall a high-quality reference-style skill that could serve as a template for similar contribution workflows.

90
95
50
90
85

Metadata

Licenseunknown
Version-
Updated2/9/2026
Publisherhiivmind

Tags

apici-cdpromptingsecurity