Skip to content
Back to skills

Mastermind Threads

ASecurity

Mastermind threads — list, view and create an org's human or agent discussion threads on issues, goals or the org, from its -threads.jsonl state files.

  • 21 stars
  • 0 votes
  • 0 copies
  • 1 view
  • Added September 10, 2026
ai-agentspythongobash

Security analysis

A100/100

Scanned October 1, 2026

npx -y skills add monoes/monomind --skill mastermind-threads --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Mastermind Threads?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for Mastermind Threads
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/monoes-mastermind-threads/badge)](https://www.skillsdirectory.com/skills/monoes-mastermind-threads)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
SKILL.md
---
name: mastermind-threads
description: "Mastermind threads — list, view and create an org's human or agent discussion threads on issues, goals or the org, from its -threads.jsonl state files."
type: domain-skill
default_mode: auto
pick: low
---

# Mastermind Threads

This skill is invoked directly via `/mastermind-threads`.

---

## Inputs

- `brain_context`: BRAIN CONTEXT block (injected by command, or loaded below if standalone)
- `org_name`: org to query (required)
- `action`: list | view | create | reply
- `thread_id`: thread ID (required for view/reply)
- `issue_id`: filter by issue ID (optional)
- `message`: message body (required for create/reply)
- `author`: author name or agent ID (default: current user)
- `limit`: max threads to show (default: 20)
- `caller`: command | master

---

## Step 0 — Brain Load (standalone only)

If `caller` is not "command", load brain context following mastermind-protocol/SKILL.md Brain Load Procedure with namespace: `ops`.

---

## Step 1 — Load Threads File

```bash
orgFile=".monomind/orgs/${org_name}.json"
[ ! -f "$orgFile" ] && { echo "ERROR: Org '${org_name}' not found."; exit 1; }

threadsFile=".monomind/orgs/${org_name}-threads.jsonl"
limit="${limit:-20}"
```

---

## Step 2 — Execute Action

### list (default)

```bash
echo "THREADS — $org_name"
echo "────────────────────────────────────────────────────────"

if [ ! -f "$threadsFile" ] || [ ! -s "$threadsFile" ]; then
  echo "  No threads found."
  echo ""
  echo "  Create: /mastermind-threads --org $org_name --action create --message 'Hello team'"
  exit 0
fi

python3 - "$threadsFile" "${issue_id:-}" "$limit" <<'PYEOF'
import json, sys

path       = sys.argv[1]
issue_f    = sys.argv[2]
limit      = int(sys.argv[3])

threads = []
with open(path) as f:
    for line in f:
        line = line.strip()
        if not line: continue
        try:
            t = json.loads(line)
            if t.get("type","thread") == "thread":
                threads.append(t)
        except: pass

if issue_f:
    threads = [t for t in threads if t.get("issueId") == issue_f]

threads = threads[-limit:]

if not threads:
    print(f"  (no threads{'  filtered by issue=' + issue_f if issue_f else ''})")
else:
    print(f"  {'ID':<28} {'SUBJECT':<32} {'AUTHOR':<20} {'MSGS':<6} CREATED")
    print("  " + "─" * 96)
    for t in threads:
        tid     = t.get("id","?")[:28]
        subj    = (t.get("subject") or "(no subject)")[:32]
        author  = (t.get("authorName") or t.get("authorId") or "—")[:20]
        msgs    = len(t.get("messages", []))
        created = (t.get("createdAt") or "-")[:10]
        print(f"  {tid:<28} {subj:<32} {author:<20} {msgs:<6} {created}")

print(f"\n  {len(threads)} thread(s). View: /mastermind-threads --org <org> --action view --thread-id <id>")
PYEOF
```

### view

```bash
[ -z "$thread_id" ] && { echo "ERROR: --thread-id required."; exit 1; }

if [ ! -f "$threadsFile" ]; then
  echo "No threads found for org '$org_name'."
  exit 0
fi

python3 - "$threadsFile" "$thread_id" <<'PYEOF'
import json, sys

path, tid = sys.argv[1], sys.argv[2]

thread = None
with open(path) as f:
    for line in f:
        line = line.strip()
        if not line: continue
        try:
            t = json.loads(line)
            if t.get("id") == tid and t.get("type","thread") == "thread":
                thread = t
        except: pass

if not thread:
    print(f"ERROR: Thread '{tid}' not found.")
    sys.exit(1)

subj   = thread.get("subject","(no subject)")
issue  = thread.get("issueId","")
created = thread.get("createdAt","-")

print(f"THREAD: {subj}")
print(f"  ID:       {tid}")
if issue: print(f"  Issue:    {issue}")
print(f"  Created:  {created}")
print()
print("MESSAGES")
print("────────────────────────────────────────────────────────")

msgs = thread.get("messages", [])
if not msgs:
    print("  (no messages)")
else:
    for m in msgs:
        author = m.get("authorName") or m.get("authorId") or "?"
        ts     = (m.get("createdAt") or "?")[:16].replace("T"," ")
        body   = m.get("body","")
        print(f"  [{ts}] {author}:")
        for line in body.split("\n"):
            print(f"    {line}")
        print()
PYEOF
```

### create

```bash
[ -z "$message" ] && { echo "ERROR: --message required."; exit 1; }

ts=$(date -u +%Y-%m-%dT%H:%M:%SZ)
newId="thread-$(python3 -c 'import time; print(int(time.time()*1000))')"
authorVal="${author:-operator}"

python3 - "$threadsFile" "$newId" "${title:-}" "$message" "$authorVal" "${issue_id:-}" "$ts" <<'PYEOF'
import json, sys

path, tid, subj, body, author, issue, ts = sys.argv[1:]
thread = {
    "id": tid,
    "type": "thread",
    "subject": subj or "(no subject)",
    "issueId": issue or None,
    "authorId": author,
    "authorName": author,
    "createdAt": ts,
    "messages": [{
        "id": f"msg-{tid}",
        "authorId": author,
        "authorName": author,
        "body": body,
        "createdAt": ts,
    }]
}
with open(path, "a") as f:
    f.write(json.dumps(thread) + "\n")
print(f"  Created thread: {tid}")
print(f"  Subject: {subj or '(no subject)'}")
print(f"  Message: {body[:80]}{'...' if len(body) > 80 else ''}")
PYEOF
```

### reply

```bash
[ -z "$thread_id" ] && { echo "ERROR: --thread-id required."; exit 1; }
[ -z "$message" ] && { echo "ERROR: --message required."; exit 1; }

ts=$(date -u +%Y-%m-%dT%H:%M:%SZ)
authorVal="${author:-operator}"

# Read all threads, append message to matching thread, rewrite file
python3 - "$threadsFile" "$thread_id" "$message" "$authorVal" "$ts" <<'PYEOF'
import json, sys

path, tid, body, author, ts = sys.argv[1:]
threads = []
found = False
with open(path) as f:
    for line in f:
        line = line.strip()
        if not line: continue
        try:
            t = json.loads(line)
            if t.get("id") == tid:
                msg_id = f"msg-{tid}-{len(t.get('messages',[]))}"
                t.setdefault("messages",[]).append({
                    "id": msg_id,
                    "authorId": author,
                    "authorName": author,
                    "body": body,
                    "createdAt": ts,
                })
                found = True
            threads.append(t)
        except: pass

if not found:
    print(f"ERROR: Thread '{tid}' not found.")
    sys.exit(1)

with open(path, "w") as f:
    for t in threads:
        f.write(json.dumps(t) + "\n")

print(f"  Reply added to thread: {tid}")
print(f"  Author: {author}  |  {ts}")
PYEOF
```

---

## Step 3 — Return Output

```yaml
domain: ops
status: complete
action: <action>
org_name: <org_name>
thread_id: <thread_id or new_id>
```

---

## Step 4 — Brain Write (standalone only)

If `caller` is not "command", follow mastermind-protocol/SKILL.md Brain Write Procedure for domain `ops`.

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments

Loading comments…

Newsletter

Get the weekly list of safe new skills, and the ones we pulled.