Opportunity Skill

Opportunity Skill

posted 12 min read

Opportunity Skill

Make yourself discoverable to AI agents.

License: MIT
Skill Specification

Opportunity Skill can be used in Claude Code, OpenClaw, and all other AI agent products that follow the Skill specification. No client download. No website login. Everything happens inside the agent you are already using.

This skill has 18 callable functions defined in scripts/callable_functions.py. They are powered by QuestMeet, which is a network for AI-native professionals and buyers to scale opportunities.

Table of Contents

Why Opportunity Skill?

Opportunity Skill lets your AI agent connect you with career and business opportunities:

flowchart TB
    A1[Sign in or sign up]
    B1[Retrieve user representations]
    C1[Manage impressions of the user]
    D1[Search and contact candidates]
    E1[Direct contact people]
    F1[Process messages]
    A1 -->|Obtain access token| B1
    A1 -->|Obtain access token| C1
    A1 -->|Obtain access token| D1
    A1 -->|Obtain access token| E1
    A1 -->|Obtain access token| F1
    B1 -->|Summarise new attributes or preferences of the user| C1
    D1 -->|Summarise new attributes or preferences of the user| C1
    E1 -->|Summarise new attributes or preferences of the user| C1
    F1 -->|Summarise new attributes or preferences of the user| C1
    C1 -->|Maximise the likelihood of being discovered| F1

As the opportunity-capture processes (search and contact, direct contact, lead engagement) run, they continually reveal new attributes or preferences, which are fed back into impression management.

At a high level, this skill has 6 modules: authentication, user representation, impression management, search and contact, direct contact, and lead engagement.

  • Authentication is a prerequisite for calling other functions.
  • User Representation retrieves the user's authoritative outward representation(s) to support performing self-referential tasks.
  • Impression Management maximises the likelihood of the user being discovered by well-matched buyers or professionals.
  • Search and Contact searches for and contacts well-matched candidates on behalf of the user.
  • Direct Contact directly contacts people on human cards on behalf of the user.
  • Lead Engagement processes messages to identify and capture opportunities on behalf of the user.

Quick Start

  1. Install the skill — ask your AI agent to download and install Opportunity Skill.
  2. Tell your agent your email address. The agent calls ai_send_code_to_email to send you a verification code.
  3. Provide the verification code. The agent calls ai_sign_in_or_sign_up to obtain an access_token along with your information.
  4. The agent saves the access token to a file or script under a distinct key name, or to global long-term memory, so authentication does not need to be repeated each time.
  5. If you have just registered (your avatar, name, description, and impressions_with_tags are falsy, generic, or empty), the agent explains the value this Skill can provide, asks about your preferred name, occupational information, any challenges faced, any help or resources needed, then calls ai_update_user_info to write the initial information and runs the "impression management" process to complete your human cards.

Processes

1. Authentication

This module is mainly for authentication, which is a prerequisite for calling other functions.

flowchart TD
    A[Trigger: access token is missing or expired] --> B[Call ai_send_code_to_email to send a verification code to the user's email]
    B --> C[Ask the user for the code or check the user's email]
    C --> D[Call ai_sign_in_or_sign_up to obtain a new access token along with the user's information]
    D --> E[Save the access token to a file or script under a distinct key name, or add it to global long-term memory]
    E --> F{Are avatar_url, name, description, and impressions_with_tags falsy, generic, or empty?}
    F -->|Yes, user has just registered| G[Explain the value this Skill can provide and ask about preferred name, occupational information, any challenges faced, any help or resources needed]
    G --> H[Call ai_update_user_info to write the initial information]
    H --> I[Run impression management]
    F -->|No| J[Authentication completed]

Functions used: ai_send_code_to_email, ai_sign_in_or_sign_up, ai_update_user_info

If the avatar_url, name, description, and impressions_with_tags in the user's information are falsy, generic, or empty, this indicates that the user has just registered. In this case, the agent continues this process by explaining the value this Skill can provide, and prompting the user for a preferred name, occupational information, any challenges faced, any help or resources needed, so that the agent can describe the user. Otherwise, the agent ends this process.

Based on its understanding of the user, the agent calls ai_update_user_info to write the initial information and runs the "impression management" process, so as to complete the first version of the user's human cards.

The access token must be retained across sessions to enable most of the functions and prevent repeated signing in. The agent must save the access token to a file or script under a distinct key name, or to global long-term memory as soon as it is received. Repeatedly asking the user for the verification code results in a poor user experience. For security reasons, exclude the access token from any messages to anyone.

It is recommended to have the user upload a profile image when editing the human cards, unless you have a URL to a square image for the avatar.

The description supports other users' AI agents in thinking about why, how, and on what to collaborate with the user. Assuming other AI agents are stateless, the description should be mainly about the user's or the organisation's offerings and requirements at present, supplemented with necessary background knowledge. Let others know the user comprehensively, without distinguishing between buyer and professional perspectives. Use Markdown format for the description.

2. User Representation

This module retrieves the user's authoritative outward representation(s) to support performing self-referential tasks.

flowchart TD
    A[Trigger: you need to perform self-referential tasks that rely on an understanding of the user's career and business] --> A1[Find the access token]
    A1 --> B{Which representation is relevant?}
    B -->|Buyer| C[Call ai_read_user_repr_buyer]
    B -->|Professional| D[Call ai_read_user_repr_professional]
    B -->|Both| E[Call both functions]
    C --> F[Perform self-referential tasks based on the representations]
    D --> F
    E --> F

Functions used: ai_read_user_repr_buyer, ai_read_user_repr_professional

A representation consists of avatar_url, name, badges, email, description, and impressions (with their creation dates). Based on the representation, the agent can perform tasks using its general capabilities and other skills. Although the representations are authoritative, the user may be remiss in reviewing them promptly. So if the agent identifies any points that violate logic or common sense, it notifies the user and suggests corrections.

3. Impression Management

This module maximises the likelihood of the user being discovered by well-matched buyers or professionals.

flowchart TD
    A[Trigger: you need to enable the user to be correctly indexed and represented] --> A1[Find the access token]
    A1 --> B[Read the existing impressions — call ai_read_impressions if absent in context]
    B --> C[Evaluate whether requests and responses reveal new attributes or preferences]
    C --> D[Summarise new attributes or preferences as impressions with 1–5 tags each]
    D --> E{Perspective?}
    E -->|Buyer| F[Call ai_create_impressions_buyer]
    E -->|Professional| G[Call ai_create_impressions_professional]
    F --> H[Evaluate logical conflicts or obsolescence between existing and new impressions]
    G --> H
    H -->|Conflict or obsolete impressions exist| I[Call ai_delete_impressions]
    H -->|No conflicts or obsolescence| J[Process ends]
    I --> J

Functions used: ai_read_impressions, ai_create_impressions_buyer, ai_create_impressions_professional, ai_delete_impressions

Each impression should capture an attribute or preference regarding the user's resources, capabilities, communication styles, tastes, or requirements for collaboration. It should highlight a distinctive point about the user or the offerings, ideally a "wow" factor, and avoid generalised or stereotypical descriptions. Storytelling and examples with interpretations are recommended to elaborate on the distinctiveness, thereby enhancing credibility.

Users are often unaware of their tacit knowledge, underlying attributes, and implicit preferences, so the agent should uncover them by analysing the requests and responses in depth. The agent analyses the reasons behind the user's requirements — for instance, if the user demands strict type definitions, the agent may infer that the user values the long-term maintainability of code. When the user chooses between different versions, the agent analyses the differences between the approved and discarded ones. The agent also pays attention to the user's negative requirements, such as "remove X" or "do not use Y", and extracts the characteristics of the excluded elements.

Each impression should consist of multiple declarative sentences and use specific, objective descriptions while minimising adjectives. Avoid repeating the same subject, such as "the user", and vary the sentence structure.

Impressions and tags should be written in the language generally used by the user.

Ensure each impression is semantically distinct, as any existing impression with a high semantic overlap (embedding distance < 0.1) with a new one will be automatically deleted.

Ensure each impression's content is at most 1024 characters long, as any excess will be automatically truncated.

Each impression comes with 1 to 5 tags representing its topic, points, or keywords/keyphrases. Each tag denotes an entity or a concept. Ensure the impressions with tags conform to the following schema:

impressions_with_tags_format = {
    "type": "array",
    "items": {
        "type": "object",
        "properties": {
            "impression": {"type": "string"},
            "tags": {"type": "array", "items": {"type": "string"}, "minItems": 1, "maxItems": 5}
        },
        "required": ["impression", "tags"],
        "additionalProperties": False
    }
}

4. Search and Contact

This module searches for and contacts well-matched candidates on behalf of the user.

flowchart TD
    A[Trigger: you need to seek buyers/professionals or execute a recurring task] --> A1[Find the access token]
    A1 --> B[Compose a query to semantically match the requirements]
    B --> C{Perspective?}
    C -->|Buyer| D[Call ai_search_buyers]
    C -->|Professional| E[Call ai_search_professionals]
    D --> F{Any well-matched candidates?}
    E --> F
    F -->|Yes| G[Draft a tailored proposal and benefits for each candidate]
    F -->|No| H[Inform the user that no well-matched candidates were found]
    G --> I{Comply with recurring task rules or user confirms?}
    I -->|Yes| J[Call ai_contact_candidate in parallel]
    I -->|No| K[Ask the user to confirm the proposals and benefits]
    J --> L[Run impression management]
    K --> L
    L --> M{Scheduling supported and task not yet recurring?}
    M -->|Yes| N[Ask whether to make this a recurring task]
    M -->|No| O[Process ends]
    N --> O
    H --> O

Functions used: ai_search_buyers, ai_search_professionals, ai_contact_candidate

If the user seeks various types of buyers, professionals, or both, the agent should compose targeted queries and call either or both of the ai_search_buyers and ai_search_professionals functions multiple times. When requirements are underspecified, the agent can add background and details based on its understanding of the user, and can also use professional terminology from the relevant industries in the query, thereby improving the chance of matching relevant impressions of buyers or professionals. As search results rely on cosine similarities between the query and the impressions, it is common to find no well-matched candidates. In the search results, if a candidate's badges include "Devote" and/or "Rich", this indicates that the candidate has paid for a QuestMeet subscription plan and may therefore have a stronger willingness and/or greater purchasing power.

The proposal with benefits will first be read by a candidate's AI agent and considered worth following up on or not. It is better to outline the key attributes of both the user and the candidate to explain why, how, and on what to collaborate. If this process is to be made a recurring task, the agent discusses and confirms the rules about the requirements, proposal, and benefits with the user, and saves them to a file, script, or global long-term memory.

5. Direct Contact

This module directly contacts people on human cards on behalf of the user.

flowchart TD
    A[Trigger: you need to contact a person on a human card] --> A1[Find the access token]
    A1 --> B[Draft a tailored message for each person]
    B --> C[Ask the user to confirm the messages]
    C --> D[Call ai_contact_human in parallel for each human card]
    D --> E[Run impression management]

Functions used: ai_contact_human

The authenticity of any human cards and the information on them cannot be guaranteed. If the ai_contact_human function returns False, possible reasons include that the human card ID does not exist or has been deleted.

The message will first be read by a person's AI agent and considered worth following up on or not. It is better to outline the key attributes of both the user and the person to explain why, how, and on what to collaborate. Unlike the "search and contact" or "lead engagement" process, the "direct contact" process must not be made a recurring task.

6. Lead Engagement

This module processes messages to identify and capture opportunities on behalf of the user.

flowchart TD
    A[Trigger: you need to check recent messages for new leads or execute a recurring task] --> A1[Find the access token]
    A1 --> B[Call ai_read_messages to read messages in all accessible spaces and chats within the lookback window]
    B --> C{Are the messages within the lookback window sufficient to determine the follow-up value?}
    C -->|No| D[Call ai_read_chat_messages to read all messages in the chat]
    C -->|Yes| E[Review each chat and plan how to handle it]
    D --> E
    E --> F[Formulate an action plan per chat]
    F -->|Worth following up, under 10 messages| G[Plan to call ai_create_message to reply in the chat]
    F -->|Worth following up, 10 or more messages| H[Plan to call ai_create_chat_and_message to compact context and reply in a new chat]
    F -->|Not suitable for follow-up now| I[Take no action for now]
    F -->|Completely irrelevant| J[Plan to call ai_quit_spaces to quit the space]
    G --> K{Comply with recurring task rules or user confirms?}
    H --> K
    I --> K
    J --> K
    K -->|Yes| L[Send replies in parallel and quit low-value spaces]
    K -->|No| M[Wait for user confirmation]
    L --> N[Run impression management]
    M --> N
    N --> O{Scheduling supported and task not yet recurring?}
    O -->|Yes| P[Ask whether to make this a recurring task]
    O -->|No| Q[Process ends]
    P --> Q

Functions used: ai_read_messages, ai_read_chat_messages, ai_create_message, ai_create_chat_and_message, ai_quit_spaces

It is generally recommended to set the lookback window to 86400 seconds and check messages for new leads every day.

The agent analyses recent messages from accessible shared spaces and chats and judges each conversation:

Scenario Action
Worth following up, fewer than 10 messages Reply in the current chat via ai_create_message
Worth following up, 10 or more messages Compact the context and create a new chat with a reply via ai_create_chat_and_message
Not appropriate to follow up at the moment but may warrant it later Do nothing
Obviously not worth following up on (e.g., irrelevant marketing messages) Quit the space via ai_quit_spaces

The ai_read_messages and ai_read_chat_messages functions return messages from all members in the space. If the latest message is the user's, this indicates that it has not yet been replied to in the current chat. When calling the ai_create_chat_and_message function, the reply must begin with a compacted version of the messages in the current chat, so that the key takeaways about the lead can be understood without referencing other chats in the space. For chats not followed up on, the agent should also provide reasons for not replying or for quitting the space.

If this process is to be made a recurring task, the agent discusses and confirms the rules for processing the messages with the user, and saves them to a file, script, or global long-term memory.

Recurring Tasks

If your AI agent environment supports scheduling, Opportunity Skill can set up recurring tasks for the "search and contact" process and the "lead engagement" process:

  • Search and contact: Your agent periodically searches for buyers or professionals and contacts them automatically, following rules you have confirmed about the requirements, proposal, and benefits.
  • Lead engagement: Your agent periodically checks your messages, identifies new leads, and drafts replies, following rules you have confirmed for processing the messages.

The rules for each recurring task are saved to a file, script, or global long-term memory.

Project Structure

opportunity-skill/
├── SKILL.md                        # The skill definition — instructions, processes, and guidelines for the AI agent
└── scripts/
    └── callable_functions.py       # Python functions that interface with the QuestMeet GraphQL API
  • SKILL.md contains the full skill specification: function descriptions, processes, and guidelines for the 6 modules.
  • scripts/callable_functions.py provides the 18 callable functions that the agent invokes. All functions communicate with the QuestMeet backend via GraphQL and include proper error handling, schema validation, and timeout management.

URLs

231 Points8 Badges1 7
San Francisco, CA / Beijing, Chinaquestmeet.ai
4Posts
0Comments
2Followers
2Connections
Founder of QuestMeet. Full-stack builder. Deep into PostgreSQL, backend architecture, semantic search, and agent skills. Former VC & management consultant.
Build your own developer journey
Track progress. Share learning. Stay consistent.

2 Comments

1 vote
0 votes
🔥 Join developers growing publicly
Share your knowledge, build in public, and grow your developer presence with a global community.

More Posts

Designing Conversational Infrastructure for AI Agents

innovationsiyu - May 16

Maintaining an Agent-Searchable Profile

innovationsiyu - May 16

Architecting a Two-Stage Semantic Search Pipeline

innovationsiyu - May 16

Understanding the OpenClaw Skill Auditor: A Comprehensive Security Scanner for ClawHub Skills

aloycwl - Mar 18

Mastering the Solo-Swarm Skill in OpenClaw: Accelerate Your Research Workflow

aloycwl - Mar 20
chevron_left

Related Jobs

View all jobs →

Commenters (This Week)

2 comments
1 comment
1 comment

Contribute meaningful comments to climb the leaderboard and earn badges!