Tool tree
gradeNot graded
page: Every page
search_projectsAnswer
Search open-source projects by broad filters (domain, activity, stars) when the user does NOT name specific skills/languages. If the user names languages/skills, prefer match_skills_to_projects instead so the skill graph populates.
View tool JSON
{
"name": "search_projects",
"kind": "answer",
"impl": "imperative",
"description": "Search open-source projects by broad filters (domain, activity, stars) when the user does NOT name specific skills/languages. If the user names languages/skills, prefer match_skills_to_projects instead so the skill graph populates.",
"inputSchema": {
"type": "object",
"properties": {
"technologies": {
"type": "array",
"items": {
"type": "string"
},
"description": "Programming languages or frameworks"
},
"domain": {
"type": "string",
"enum": [
"web",
"mobile",
"ml",
"devtools",
"gaming",
"data",
"security",
"other"
]
},
"difficulty": {
"type": "string",
"enum": [
"beginner",
"intermediate",
"advanced"
]
},
"minStars": {
"type": "number"
},
"maxStars": {
"type": "number"
},
"hasGoodFirstIssues": {
"type": "boolean"
},
"activelyMaintained": {
"type": "boolean"
},
"limit": {
"type": "number",
"default": 10
}
}
},
"page": "/"
}match_skills_to_projectsAction
ALWAYS use this tool when the user names any programming language or skill — including phrasings like 'find me Python projects', 'JavaScript and Python beginner projects', 'show me Rust repos', or 'actually, find me Python projects'. This is the ONLY tool that populates the on-screen skill graph, so prefer it over search_projects whenever a language/skill is mentioned. Pass every language/skill the user named in the 'skills' array and set experienceLevel from words like 'beginner'.
View tool JSON
{
"name": "match_skills_to_projects",
"kind": "act",
"impl": "imperative",
"description": "ALWAYS use this tool when the user names any programming language or skill — including phrasings like 'find me Python projects', 'JavaScript and Python beginner projects', 'show me Rust repos', or 'actually, find me Python projects'. This is the ONLY tool that populates the on-screen skill graph, so prefer it over search_projects whenever a language/skill is mentioned. Pass every language/skill the user named in the 'skills' array and set experienceLevel from words like 'beginner'.",
"inputSchema": {
"type": "object",
"properties": {
"skills": {
"type": "array",
"items": {
"type": "string"
}
},
"interests": {
"type": "array",
"items": {
"type": "string"
}
},
"experienceLevel": {
"type": "string",
"enum": [
"beginner",
"intermediate",
"senior"
]
},
"timeCommitment": {
"type": "string",
"enum": [
"one-time",
"occasional",
"regular"
]
},
"preferredContributionType": {
"type": "array",
"items": {
"type": "string",
"enum": [
"code",
"documentation",
"testing",
"design",
"translation"
]
}
}
},
"required": [
"skills"
]
},
"page": "/"
}find_issuesAnswer
Find open issues in a project filtered by labels, difficulty, or skill requirements.
View tool JSON
{
"name": "find_issues",
"kind": "answer",
"impl": "imperative",
"description": "Find open issues in a project filtered by labels, difficulty, or skill requirements.",
"inputSchema": {
"type": "object",
"properties": {
"projectId": {
"type": "string",
"description": "e.g. facebook/react"
},
"labels": {
"type": "array",
"items": {
"type": "string"
}
},
"difficulty": {
"type": "string",
"enum": [
"good-first-issue",
"medium",
"complex"
]
},
"skills": {
"type": "array",
"items": {
"type": "string"
}
},
"issueType": {
"type": "string",
"enum": [
"bug",
"feature",
"documentation",
"testing"
]
},
"excludeAssigned": {
"type": "boolean",
"default": true
},
"excludeStale": {
"type": "boolean",
"default": true
}
},
"required": [
"projectId"
]
},
"page": "/"
}summarize_projectAnswer
Get comprehensive project summary including purpose, tech stack, and community health.
View tool JSON
{
"name": "summarize_project",
"kind": "answer",
"impl": "imperative",
"description": "Get comprehensive project summary including purpose, tech stack, and community health.",
"inputSchema": {
"type": "object",
"properties": {
"projectId": {
"type": "string"
},
"includeContributionGuide": {
"type": "boolean",
"default": true
},
"includeCodeStructure": {
"type": "boolean",
"default": false
},
"includeCommunityMetrics": {
"type": "boolean",
"default": true
},
"includeRecentActivity": {
"type": "boolean",
"default": true
}
},
"required": [
"projectId"
]
},
"page": "/"
}estimate_first_response_timeAnswer
Estimate how responsive a project is to contributors by sampling recent closed pull requests: median time to first response (first comment/review from someone other than the PR author) and median time to merge. Returns a responsiveness rating. Use to judge whether a PR here is likely to be reviewed or ignored — pairs well with search_projects to find active AND responsive projects.
View tool JSON
{
"name": "estimate_first_response_time",
"kind": "answer",
"impl": "imperative",
"description": "Estimate how responsive a project is to contributors by sampling recent closed pull requests: median time to first response (first comment/review from someone other than the PR author) and median time to merge. Returns a responsiveness rating. Use to judge whether a PR here is likely to be reviewed or ignored — pairs well with search_projects to find active AND responsive projects.",
"inputSchema": {
"type": "object",
"properties": {
"projectId": {
"type": "string",
"description": "e.g. facebook/react"
},
"sampleSize": {
"type": "number",
"description": "How many recent closed PRs to sample (3-15, default 10)"
}
},
"required": [
"projectId"
]
},
"page": "/"
}explain_issueAction
Get beginner-friendly explanation of an issue with context and suggested approach.
View tool JSON
{
"name": "explain_issue",
"kind": "act",
"impl": "imperative",
"description": "Get beginner-friendly explanation of an issue with context and suggested approach.",
"inputSchema": {
"type": "object",
"properties": {
"issueId": {
"type": "string"
},
"projectId": {
"type": "string"
},
"detailLevel": {
"type": "string",
"enum": [
"brief",
"detailed",
"step-by-step"
],
"default": "detailed"
}
},
"required": [
"issueId",
"projectId"
]
},
"page": "/"
}draft_contribution_planAction
Generate a concrete, step-by-step first-contribution plan for a project (and optionally a specific issue): setup commands, which files to look at, how to run tests, and a PR checklist. Synthesizes the repo's README and CONTRIBUTING guide with AI. Use when the user has picked a project/issue and asks how to actually get started.
View tool JSON
{
"name": "draft_contribution_plan",
"kind": "act",
"impl": "imperative",
"description": "Generate a concrete, step-by-step first-contribution plan for a project (and optionally a specific issue): setup commands, which files to look at, how to run tests, and a PR checklist. Synthesizes the repo's README and CONTRIBUTING guide with AI. Use when the user has picked a project/issue and asks how to actually get started.",
"inputSchema": {
"type": "object",
"properties": {
"projectId": {
"type": "string",
"description": "e.g. facebook/react"
},
"issueId": {
"type": "string",
"description": "Optional issue number to tailor the plan to a specific issue"
},
"experienceLevel": {
"type": "string",
"enum": [
"beginner",
"intermediate",
"senior"
],
"default": "beginner"
}
},
"required": [
"projectId"
]
},
"page": "/"
}assess_issue_difficultyAnswer
Assess whether an issue is realistically doable for a given experience level, beyond its label. Analyzes comment volume, age, description detail, keywords, and assignment/claim signals to return a difficulty score, reasons, and red flags (taken, contentious, stale). Use after find_issues to filter to genuinely doable issues.
View tool JSON
{
"name": "assess_issue_difficulty",
"kind": "answer",
"impl": "imperative",
"description": "Assess whether an issue is realistically doable for a given experience level, beyond its label. Analyzes comment volume, age, description detail, keywords, and assignment/claim signals to return a difficulty score, reasons, and red flags (taken, contentious, stale). Use after find_issues to filter to genuinely doable issues.",
"inputSchema": {
"type": "object",
"properties": {
"projectId": {
"type": "string",
"description": "e.g. facebook/react"
},
"issueId": {
"type": "string",
"description": "The issue number"
},
"experienceLevel": {
"type": "string",
"enum": [
"beginner",
"intermediate",
"senior"
],
"default": "beginner"
}
},
"required": [
"projectId",
"issueId"
]
},
"page": "/"
}check_issue_availabilityAnswer
Check whether an issue is free to work on: is it assigned, has someone claimed it in a recent comment, or is there already an open PR referencing it? Returns available | likely-taken | taken with evidence. Use after find_issues, before a user commits time to an issue, to avoid duplicate work.
View tool JSON
{
"name": "check_issue_availability",
"kind": "answer",
"impl": "imperative",
"description": "Check whether an issue is free to work on: is it assigned, has someone claimed it in a recent comment, or is there already an open PR referencing it? Returns available | likely-taken | taken with evidence. Use after find_issues, before a user commits time to an issue, to avoid duplicate work.",
"inputSchema": {
"type": "object",
"properties": {
"projectId": {
"type": "string",
"description": "e.g. facebook/react"
},
"issueId": {
"type": "string",
"description": "The issue number"
}
},
"required": [
"projectId",
"issueId"
]
},
"page": "/"
}check_contribution_requirementsAnswer
Get contribution requirements including CLA, code style, testing, and PR process.
View tool JSON
{
"name": "check_contribution_requirements",
"kind": "answer",
"impl": "imperative",
"description": "Get contribution requirements including CLA, code style, testing, and PR process.",
"inputSchema": {
"type": "object",
"properties": {
"projectId": {
"type": "string"
}
},
"required": [
"projectId"
]
},
"page": "/"
}track_contributionAction
Track a project or issue in the contribution tracker, OR change the status of an already-tracked one. Provide projectId (owner/repo) and a status: interested, in-progress, pr-submitted, merged, or abandoned. Use for requests like track facebook/react, mark next.js as merged, or move it to in-progress. The change shows on the dashboard.
View tool JSON
{
"name": "track_contribution",
"kind": "act",
"impl": "imperative",
"description": "Track a project or issue in the contribution tracker, OR change the status of an already-tracked one. Provide projectId (owner/repo) and a status: interested, in-progress, pr-submitted, merged, or abandoned. Use for requests like track facebook/react, mark next.js as merged, or move it to in-progress. The change shows on the dashboard.",
"inputSchema": {
"type": "object",
"properties": {
"projectId": {
"type": "string"
},
"issueId": {
"type": "string"
},
"status": {
"type": "string",
"enum": [
"interested",
"in-progress",
"pr-submitted",
"merged",
"abandoned"
]
},
"notes": {
"type": "string"
},
"targetDate": {
"type": "string",
"format": "date"
}
},
"required": [
"projectId"
]
},
"page": "/"
}get_mentorship_projectsAnswer
Find projects in mentorship programs like GSoC, Outreachy, MLH, or Hacktoberfest.
View tool JSON
{
"name": "get_mentorship_projects",
"kind": "answer",
"impl": "imperative",
"description": "Find projects in mentorship programs like GSoC, Outreachy, MLH, or Hacktoberfest.",
"inputSchema": {
"type": "object",
"properties": {
"program": {
"type": "string",
"enum": [
"gsoc",
"outreachy",
"mlh",
"hacktoberfest",
"lfx",
"all"
]
},
"year": {
"type": "number"
},
"technologies": {
"type": "array",
"items": {
"type": "string"
}
},
"acceptingApplications": {
"type": "boolean"
}
}
},
"page": "/"
}highlight_projectAction
Visually highlight a project node in the on-screen skill graph. Pass a specific name (e.g. 'excalidraw' or 'facebook/react'), OR a superlative describing the current results: 'most-starred', 'most-forked', or 'most-issues'. The matching node glows and its connections are emphasized while others dim. Use this (NOT a new search) when the user asks to point out, highlight, or focus on a project in the results already shown.
View tool JSON
{
"name": "highlight_project",
"kind": "act",
"impl": "imperative",
"description": "Visually highlight a project node in the on-screen skill graph. Pass a specific name (e.g. 'excalidraw' or 'facebook/react'), OR a superlative describing the current results: 'most-starred', 'most-forked', or 'most-issues'. The matching node glows and its connections are emphasized while others dim. Use this (NOT a new search) when the user asks to point out, highlight, or focus on a project in the results already shown.",
"inputSchema": {
"type": "object",
"properties": {
"project": {
"type": "string",
"description": "Project name or owner/repo to highlight in the graph."
}
},
"required": [
"project"
]
},
"page": "/"
}focus_skillAction
Focus the on-screen skill graph on a single selected skill (e.g. 'Python'), emphasizing that skill node and the projects it connects to while fading the rest. Use when the user wants to see the projects for one particular skill.
View tool JSON
{
"name": "focus_skill",
"kind": "act",
"impl": "imperative",
"description": "Focus the on-screen skill graph on a single selected skill (e.g. 'Python'), emphasizing that skill node and the projects it connects to while fading the rest. Use when the user wants to see the projects for one particular skill.",
"inputSchema": {
"type": "object",
"properties": {
"skill": {
"type": "string",
"description": "The skill/language to focus on (must be one the user selected)."
}
},
"required": [
"skill"
]
},
"page": "/"
}reset_graphAction
Clear any highlight or focus on the on-screen skill graph, restoring all nodes and connections to full visibility.
View tool JSON
{
"name": "reset_graph",
"kind": "act",
"impl": "imperative",
"description": "Clear any highlight or focus on the on-screen skill graph, restoring all nodes and connections to full visibility.",
"inputSchema": {
"type": "object",
"properties": {}
},
"page": "/"
}summarize_my_progressAnswer
Summarize the user's open-source contribution journey from their tracker. Returns totals per status, the tech stacks (languages) they use most, which merged project they closed fastest, average days-to-merge, when they started, and their completion rate. Use when the user asks things like 'how's my progress', 'what tech do I use most', 'which project did I close earliest', or 'summarize my contributions'.
View tool JSON
{
"name": "summarize_my_progress",
"kind": "answer",
"impl": "imperative",
"description": "Summarize the user's open-source contribution journey from their tracker. Returns totals per status, the tech stacks (languages) they use most, which merged project they closed fastest, average days-to-merge, when they started, and their completion rate. Use when the user asks things like 'how's my progress', 'what tech do I use most', 'which project did I close earliest', or 'summarize my contributions'.",
"inputSchema": {
"type": "object",
"properties": {}
},
"page": "/"
}set_skill_profileAction
Update what the app remembers about the user: skills/languages, interests/domains, experience level, contribution types. ADD via skills/interests (they MERGE and de-duplicate, so 'also add Go' keeps prior skills). REMOVE specific items via removeSkills/removeInterests (e.g. 'drop Go' -> removeSkills: ['Go']) — this deletes only those items and keeps the rest. Classify a language/framework (Rust, React) as a skill and a domain/topic (developer tools, climate) as an interest. To wipe everything, set clear:true. Use for statements like 'remember I know Rust', 'add Go to my skills', 'drop Go', or 'forget my profile'.
View tool JSON
{
"name": "set_skill_profile",
"kind": "act",
"impl": "imperative",
"description": "Update what the app remembers about the user: skills/languages, interests/domains, experience level, contribution types. ADD via skills/interests (they MERGE and de-duplicate, so 'also add Go' keeps prior skills). REMOVE specific items via removeSkills/removeInterests (e.g. 'drop Go' -> removeSkills: ['Go']) — this deletes only those items and keeps the rest. Classify a language/framework (Rust, React) as a skill and a domain/topic (developer tools, climate) as an interest. To wipe everything, set clear:true. Use for statements like 'remember I know Rust', 'add Go to my skills', 'drop Go', or 'forget my profile'.",
"inputSchema": {
"type": "object",
"properties": {
"skills": {
"type": "array",
"items": {
"type": "string"
},
"description": "Languages/frameworks to ADD."
},
"interests": {
"type": "array",
"items": {
"type": "string"
},
"description": "Domains/topics to ADD."
},
"removeSkills": {
"type": "array",
"items": {
"type": "string"
},
"description": "Skills to REMOVE (e.g. ['Go'])."
},
"removeInterests": {
"type": "array",
"items": {
"type": "string"
},
"description": "Interests to REMOVE."
},
"experienceLevel": {
"type": "string",
"enum": [
"beginner",
"intermediate",
"senior"
]
},
"preferredContributionType": {
"type": "array",
"items": {
"type": "string",
"enum": [
"code",
"documentation",
"testing",
"design",
"translation"
]
}
},
"clear": {
"type": "boolean",
"description": "If true, forget the entire profile."
}
}
},
"page": "/"
}get_skill_profileAnswer
Show the user what the app currently remembers about them: their saved skills, interests, experience level, and contribution preferences. Read-only — does NOT search or change anything. Use for questions like 'what skills have you logged for me?', 'what do you remember about me?', or 'show my profile'.
View tool JSON
{
"name": "get_skill_profile",
"kind": "answer",
"impl": "imperative",
"description": "Show the user what the app currently remembers about them: their saved skills, interests, experience level, and contribution preferences. Read-only — does NOT search or change anything. Use for questions like 'what skills have you logged for me?', 'what do you remember about me?', or 'show my profile'.",
"inputSchema": {
"type": "object",
"properties": {}
},
"page": "/"
}get_recommendationsAnswer
Recommend projects tailored to the user's SAVED profile (skills + interests), without them re-stating anything. Renders the matches in the on-screen skill graph and results, like match_skills_to_projects. Use for open-ended requests such as 'what should I work on?', 'recommend me some projects', or 'find me something new'. If the user names specific skills in THIS request, pass them in overrideSkills — an explicit request wins over the saved profile for this turn.
View tool JSON
{
"name": "get_recommendations",
"kind": "answer",
"impl": "imperative",
"description": "Recommend projects tailored to the user's SAVED profile (skills + interests), without them re-stating anything. Renders the matches in the on-screen skill graph and results, like match_skills_to_projects. Use for open-ended requests such as 'what should I work on?', 'recommend me some projects', or 'find me something new'. If the user names specific skills in THIS request, pass them in overrideSkills — an explicit request wins over the saved profile for this turn.",
"inputSchema": {
"type": "object",
"properties": {
"overrideSkills": {
"type": "array",
"items": {
"type": "string"
},
"description": "Skills explicitly named in this request; these take precedence over the saved profile."
}
}
},
"page": "/"
}