Files
memex/notes/org-skill-linkedin.org

153 lines
5.1 KiB
Org Mode

#+TITLE: SKILL: LinkedIn Automation Agent (Universal Literate Note)
#+ID: skill-linkedin
#+STARTUP: content
#+FILETAGS: :business:automation:linkedin:revenue:psf:
* Overview
The *LinkedIn Automation Agent* is a revenue-focused skill designed to automate professional outreach and job applications. It leverages neural synthesis to personalize resumes and cover letters, ensuring a high conversion rate in the job market.
* Phase A: Demand (PRD)
:PROPERTIES:
:STATUS: FROZEN
:END:
** 1. Purpose
Automate the "Easy Apply" process on LinkedIn to sustain revenue streams.
** 2. User Needs
- *Job Perception:* Periodically scan LinkedIn for roles matching the "Software Engineer" and "Lisp" criteria.
- *Neural Personalization:* Generate tailored cover letters using the kernel's neural engine.
- *Automated Application:* Use a headless browser (Playwright/Selenium) to submit applications.
- *Success Tracking:* Log application status to the Object Store.
** 3. Success Criteria
*** TODO Successful login to LinkedIn via session cookies.
*** TODO Neural synthesis of a cover letter based on a specific job description.
*** TODO Automated submission of at least one "Easy Apply" form.
* Registration
#+begin_src lisp
(defskill :skill-linkedin
:priority 50
:trigger (lambda (context) (eq (getf (getf context :payload) :sensor) :revenue-pulse))
:neuro (lambda (context) nil)
:symbolic (lambda (action context) action))
#+end_src
* Phase B: Blueprint (PROTOCOL)
:PROPERTIES:
:STATUS: SIGNED
:END:
* Phase B: Blueprint (PROTOCOL)
** 1. Architectural Intent
The LinkedIn Automation Agent will be implemented as a modular skill composed of several cooperating components:
- *Sensor*: Subscribes to revenue pulse events to trigger operation. Also responsible for querying the LinkedIn API and scraping page content for job postings.
- *Neural Synthesizer*: Generates personalized cover letters and resumes based on job descriptions. Relies on the kernel's large language model (LLM).
- *Automation Engine*: Controls a headless browser (Playwright) to automate the 'Easy Apply' process.
- *Object Store*: Persistently stores application data, tracking their status.
The architecture prioritizes robustness (resume application failure), scalability (handle increasing job volume), and adaptability (evolving LinkedIn UI).
** 2. Semantic Interfaces
*** LinkedIn Sensor
#+begin_src lisp
;;; Fetches list of relevant job postings from LinkedIn.
;;;
;;; Parameters:
;;; :keywords (list string) - List of keywords to search for (e.g., '("software engineer" "lisp"))
;;; :location (string) - The geographical location to search within.
;;; :session-cookie (string) - LinkedIn session cookie for authentication.
;;;
;;; Returns:
;;; (list job-posting) - List of job posting objects. Each object has the following keys:
;;; :job-id (string) - Unique ID of the job posting.
;;; :title (string) - Job title.
;;; :company (string) - Company name.
;;; :location (string) - Job location.
;;; :description-url (string) - URL to the full job description.
;;; :easy-apply (boolean) - T if the job has the Easy Apply option, NIL otherwise.
(defun linkedin-fetch-job-postings
(:keywords keywords)
(:location location)
(:session-cookie session-cookie)
...)
#+end_src
*** Neural Personalizer
#+begin_src lisp
;;; Generates a personalized cover letter based on a job description and the user's resume.
;;;
;;; Parameters:
;;; :job-description (string) - Text of the job description.
;;; :resume (string) - The user's resume text.
;;;
;;; Returns:
;;; (string) - Generated cover letter.
(defun generate-cover-letter
(:job-description job-description)
(:resume resume)
...)
#+end_src
#+begin_src lisp
;;; Generates a personalized resume based on a job description
;;;
;;; Parameters:
;;; :job-description (string) - Text of the job description.
;;; :resume (string) - The user's resume text.
;;;
;;; Returns:
;;; (string) - Generated resume.
(defun personalize-resume
(:job-description job-description)
(:resume resume)
...)
#+end_src
*** Automation Engine
#+begin_src lisp
;;; Submits an 'Easy Apply' application for a given job posting.
;;;
;;; Parameters:
;;; :job-posting (job-posting) - A job posting object from 'linkedin-fetch-job-postings'.
;;; :cover-letter (string) - The generated cover letter.
;;; :resume (string) - the personalized resume
;;; :session-cookie (string) - LinkedIn session cookie for authentication.
;;;
;;; Returns:
;;; (boolean) - T if the application was submitted successfully, NIL otherwise.
(defun submit-easy-apply
(:job-posting job-posting)
(:cover-letter cover-letter)
(:resume resume)
(:session-cookie session-cookie)
...)
#+end_src
*** Object Store
#+begin_src lisp
;;; Logs the application status to the store
;;;
;;; Parameters:
;;; :job-id (string) - the ID of the job application
;;; :status: (symbol) - the status of the application (:applied :pending :interview :rejected :accepted)
;;; :metadata: (list) - any metadata to store.
;;;
;;; Returns:
;;; T upon success, NIL otherwise.
(defun log-application-status
(:job-id job-id)
(:status status)
(:metadata metadata)
...)
#+end_src