- type: ask
param: askForJD
message: >-
```markdown
{{g.job}}
```
Copy and paste a new Job Description below (any text or PDF) or use the
previous one โฌ๏ธ
options:
- label: โ
USE PREVIOUS JD
value: previous
- $custom
default: ''
vision:
enabled: false
mode: area
hint: ''
send: true
optionsInvalid: false
condition: '{{g.job}}'
label: ASK FOR NEW JD
- type: calc
func: clone
from: askForJD
to: g.job
condition: '{{askForJD}} != previous'
- type: ask
param: g.job
message: |-
Copy and paste a Job Description below.
Send a PDF or any text, then hit Enter.
default: ''
vision:
enabled: false
mode: area
hint: ''
send: true
optionsInvalid: true
condition: '{{g.job}} ='
label: ASK FOR 1ST JD
- type: ask
param: cv
message: >-
Go to the candidate's LinkedIn page to parse info, or send me their CV in
text or PDF format.
options:
- label: โ
USE WEBPAGE
value: linkedin
- $custom
default: ''
vision:
enabled: false
mode: area
hint: ''
send: true
optionsInvalid: false
label: ASK FOR CV
- type: group
steps:
- type: group
steps:
- type: say
message: โ ๏ธ Sorry, this doesn't seem to be a LinkedIn profile page.
- type: stop
condition:
- '{{url}} =~ ^(?!https:\/\/www\.linkedin\.com\/in\/[\w\-]+\/?).*$'
label: CHECK PAGE
- type: js
args: ''
code: |-
const result = (() => {
const selectors = {
name: 'h1',
status: '.text-body-medium.break-words',
location: '.text-body-small.inline.t-black--light.break-words',
contact: 'section.pv-top-card--website a',
about: '#about ~ .display-flex span',
experience: '#experience + div + div',
education: '#education + div + div',
language: '#languages + div + div'
};
const getListContent = (container) => {
if (!container) return null
return Array.from(container.querySelectorAll('.artdeco-list__item'))
.map(item => {
const clone = item.cloneNode(true);
clone.querySelectorAll('.visually-hidden').forEach(el => el.remove());
return clone.textContent
.replace(/\s+/g, ' ')
.replace(/\n\n+/g, '\n')
.trim();
});
};
const result = {
name: document.querySelector(selectors.name)?.textContent.trim(),
url: window.location.href,
status: document.querySelector(selectors.status)?.textContent.trim(),
location: document.querySelector(selectors.location)?.textContent.trim(),
contact: document.querySelector(selectors.contact)?.href || null,
about: document.querySelector(selectors.about)?.textContent.trim(),
experience: getListContent(document.querySelector(selectors.experience)),
education: getListContent(document.querySelector(selectors.education)),
language: getListContent(document.querySelector(selectors.language))
};
return result;
})();
return result;
param: profile
timeout: 15000
silent: true
- type: calc
func: set
param: cv
format: ''
value: |-
{{profile}}
Full LinkedIn Webpage: {{page}}
label: LINKEDIN PAGE
condition: '{{cv}} = linkedin'
- type: gpt
prompt: >-
Please ignore all previous instructions.
I want you to act as a CV reviewer and a very proficient HR that writes
fluently in {{language}}.
I'm going to provide you with a job description for a job that I'm trying to
hire for. You're going to read the job description and understand the key
requirements for the position โ including years of experience, skills,
position name.
Then you will read the candidate's CV. You'll go over it and provide
feedback based on how tailored the CV is for the job, according to my
scoring system (0-100 points):
1. **Alignment with Key Professional Skills** (0-30 points)
* Evaluation of all mandatory skills from the JD
* Consideration of depth of experience in key technologies/methodologies
* Bonus points for additional relevant skills
2. **Relevant Work Experience** (0-25 points)
* Length of experience in similar positions/projects
* Experience solving tasks similar to those required in the JD
* Career progression and expansion of responsibilities
3. **Education and Professional Qualifications** (0-15 points)
* Alignment of education with required specialization
* Presence of professional certifications
* Additional training and professional development courses
4. **Achievements and Performance Results** (0-20 points)
* Measurable results from previous workplaces
* Initiatives and projects successfully implemented by the candidate
* Awards, recognition, and other confirmations of effectiveness
5. **Cultural Fit** (0-10 points)
* Experience working in similar corporate environments
* Indication of personal qualities important for the position
* Demonstration of values aligned with the company
Provide your response in the following format:
**Score:** total score from 0 to 100, assign emoji ๐ข for scores 80-100, ๐ก
for scores 50-79, and ๐ด for scores from 0 to 49. E.g.: **Score:** ๐ก 79/100
**Candidate:** [First Name Last Name]({{cv.url}}) (use markdown link if URL
is known).
**Employment:** Currently employed or not, company name and country with
city.
**Summary:**
Brief description of strengths and weaknesses, using โ and โ
emojis. Do not
repeat all the scoring points, mention only crucial ones. Do not write the
full report, be brief and to the point.
**Questions to candidate:**
2-3 brief questions that help me understand if the candidate is suitable for
my Job Description.
[PARSE JOB DESCRIPTION FROM]: {{job}}
[PARSE MY CV FROM]: {{cv}}
[YOUR RESPONSE]:
isolated: true
- type: say
message: 'Choose an option or ask a question, e.g.: "What hard skill is missing?"'
- type: ask
param: action
message: ''
options:
- label: โฉ๏ธ NEXT CANDIDATE
value: next
- label: ๐ CONNECTION NOTE
value: >-
Brief LinkedIn connection request note, less than 200 symbols. No
signoffs and long greetings.
- label: ๐จ EMAIL/MESSAGE
value: >-
Brief Email that includes information about which company or person is
writing, a short job description, and an invitation to chat by email or
phone call, beginning with one of the questions for the candidate about
his skills, that you mentioned before
- label: โ
DONE
value: done
- $custom
default: ''
vision:
enabled: false
mode: area
hint: ''
send: true
optionsInvalid: false
label: ASK NEXT STEP
- type: jump
to: ASK FOR CV
condition: '{{action}} = next'
- type: stop
condition: '{{action}} = done'
- type: group
steps:
- type: gpt
prompt: '{{action}}'
- type: jump
to: ASK NEXT STEP
condition: '{{action-option}} = $custom'
label: $CUSTOM ASK
- type: group
steps:
- type: gpt
prompt: >-
Please ignore previous instructions.
I want you to write a {{action}} in {{language}}.
I'm searching for a candidate for the position I sent you and have found
a suitable person. Now I want to contact them by writing a {{action}} in
{{language}}. Your task is to help me draft such a message from me that
is brief and clear, effectively communicating the main point.
Follow my tone instructions: {{tone}}
Info about me: {{userinfo}}
Candidate's CV: {{cv}}
Job Description: {{job}}
Your responce must be in a single ```markdown code block```.
[Output framework]:
Message draft:
```markdown
message draft text
```
YOUR RESPONSE:
silent: false
- type: ask
param: refine
message: ''
options:
- label: โฉ๏ธ NEXT CANDIDATE
value: next
- label: โฌ๏ธ EXPAND
value: |
Expand your reply, adding more details and depth to it.
- label: โฌ๏ธ SHORTEN
value: >
Shorten your reply, make it concise and to the point. Remove stock
and boilerplate phrases if any.
- label: ๐คช SIMPLIFY
value: |
Simplify reply language, add clarity and conciseness, remove jargon.
- label: โ
DONE
value: done
default: ''
vision:
enabled: false
mode: area
hint: ''
send: true
optionsInvalid: false
label: REFINE MESSAGE
- type: stop
condition: '{{refine}} = done'
- type: jump
to: ASK FOR CV
condition: '{{refine}} = next'
- type: gpt
prompt: '{{refine}}'
- type: jump
to: REFINE MESSAGE
label: NOTE OR EMAIL
All rights reserved ยฉ HARPA AI TECHNOLOGIES LLC, 2021 โ 2025
Designed and engineered in Finland ๐ซ๐ฎ