Pin Team Member Feedback
Record feedback highlights for team members to use in performance reviews.
CRITICAL: Read-Only Slack Access
NEVER write to Slack under any circumstances. This skill is strictly read-only for Slack:
- ✅ Read thread replies, channel history, user profiles
- ❌ Never post messages, reply to threads, or add reactions
The only write operation this skill performs is posting to the Google Sheet.
Workflow
- Validate input - If no URL and no description is provided in the arguments, stop immediately and ask the user to provide at least one.
- Get the source URL from the user (Slack thread, Github PR, Asana task, Jira, Notion document and more)
- Fetch the content using an available CLI (e.g gh) or MCP tools (see Slack fallback below)
- Identify the team member being highlighted
- Generate feedback text - 1-2 paragraphs of specific praise or constructive feedback
- Post to the sheet using the script
Fetching Slack Content
Primary: MCP Tools (read-only)
Use these MCP tools when available:
mcp__slack__slack_get_thread_replies- Get thread contentmcp__slack__slack_get_channel_history- Get recent channel messagesmcp__slack__slack_get_users/mcp__slack__slack_get_user_profile- Resolve user names
Fallback: Slack Search API
The Slack MCP does not include search:read scope. If you need to search for messages
(e.g., finding a thread by keyword rather than URL), use the Slack API directly:
curl -s "https://slack.com/api/search.messages?query=<encoded-query>" \
-H "Authorization: Bearer $SLACK_BOT_TOKEN"
The SLACK_BOT_TOKEN is available in the environment (sourced from ~/.secrets).
Search query tips:
in:#channel-name- Search within a specific channelfrom:@username- Messages from a specific userafter:2024-01-01- Date filtering
Response includes messages.matches[] with permalink, text, user, ts, and channel.
Context Gathering
When reading the source content, extract and note:
Project/Feature Name
Identify the project or feature name from:
- Slack: channel name (especially
#project-*channels, e.g.,#project-wallet→ "Wallet"), thread topic, or explicit project mentions in the message text - Asana: task name or project name
- GitHub PR: repository name or PR title
- The content itself (look for project names, feature names, or initiative titles)
This name must appear in the first sentence of the feedback to provide future context.
Interactions from Others
When reading threads, comments, or replies (Slack, Asana, GitHub, Jira, Linear, etc.), note responses from others that add substance.
A reply is substantive if it describes an impact, asks a question, or adds new information. Encouragement-only replies ("great job", "keep it up", "love it", "thanks for the update") should be ignored.
- ✅ Include: feedback that describes impact ("this helped me plan X"), questions that show engagement, additional context or information
- ❌ Ignore: simple "thank you" or encouragement messages, especially from Alex Oliveira, unless they add specific context
- ❌ Ignore: emoji reactions alone
If substantive interactions exist, summarize them at the end of the feedback (e.g., "In this case, John Doe noted that the update helped them plan their work accordingly.").
Career Ladder Context
Before writing feedback, spawn an Explore subagent to read the career ladder at:
~/.private-prompts/skills/tremendous-pin-feedback/career-ladder.md
This document describes the four competencies we value at Tremendous:
- Independence - acting autonomously, unblocking self, shipping quality work quickly
- Project management - proactive communication, timeline awareness, collaboration
- Complexity - handling technical depth, business domain understanding
- Leverage - code reviews, mentoring, unblocking others, cross-team impact
Use these competencies to frame the feedback. When praising or giving constructive feedback, connect the observed behavior to these competencies where relevant.
Feedback text format
Summarize this linked content conversation focusing on praising (positive) or providing feedback (negative) on the person's work on it, one or two paragraphs.
Why are we doing this? This snippet will be used to write their cycle review later in the year.
Rules
- Don't use their name, instead write it in the second person (You)
- Always include the project/feature name in the first sentence to provide context for future reading (e.g., "Your work on the Payments Integration project..." or "This message in the Rewards API project...")
- When writing feedback, avoid making specific assumptions about implementation details that aren't explicitly stated.
- Use general language for technical work (e.g., 'submitted clean code' rather than 'submitted a pull request', or 'delivered the feature' rather than 'opened PRs') unless I have provided those specific details.
- Keep the tone professional but warm, not overly formal. I mean, just write like I would.
- For positive feedback, let's tone down words like "excellent", unless I mention it. I don't want it to denote perfection.
- Use professional language suitable for perf reviews
- If others provided substantive feedback in the thread, add a sentence at the end summarizing their input (e.g., "Notably, Jane mentioned this helped her plan the QA timeline.")
Input
The user will provide key focus areas:
- [Person's name]: if not provided, you can fallback/rely on the URL's authorship
- [What they did / context]:
- If provided, make those areas more prominent
- If not provided and it's self evident, you can come up with your own feedback, positive or negative.
Write 2-3 paragraphs that:
- Observed: Are specific about what the person did
- Impact: Explain the impact or why it matters
- Start with a tag like
[Positive; P5]or[Constructive; P4]where P4-P5 indicates priority/significance - Ask: How they could have done it differently.
Required Environment Variables
The script requires these environment variables to be set in the shell:
GSHEET_PUSH_APP_URL- Google Apps Script web app URLGSHEET_PUSH_APP_SECRET- Secret key for authentication
Posting
Use the included script (same directory as skill):
~/.private-prompts/skills/tremendous-pin-feedback/scripts/post-feedback.sh "<note>" "<member-name>" "<url>"
Arguments:
note: The feedback text (1-2 paragraphs). Make sure to escape quotes.member-name: Team member's name (lowercase, matches Slack display name)url: Source URL (Slack thread or Asana task)
The script automatically adds the current timestamp.
Example
~/.private-prompts/skills/tremendous-pin-feedback/scripts/post-feedback.sh \
"[Positive; P5] Your project update on the Apple / Google Wallet integration is a good example of the improvement in how you communicate status to the team. The message is clear about where things stand with both vendors, with context that helps everyone understand quickly what's happening (like 'we're just middle man here'). This consistent, frequent communication style makes it easy for the whole team to stay informed without needing to ask. Notably, Jane mentioned that the update helped her plan the QA timeline for next sprint." \
"sarah" \
"https://tremendous-rewards.slack.com/archives/C01234/p1234567890"
