Load skills without overwriting them
diff --git a/interpreter/core/computer/computer.py b/interpreter/core/computer/computer.py
index 870de9e42..3062a1af8 100644
--- a/interpreter/core/computer/computer.py
+++ b/interpreter/core/computer/computer.py
@@ -29,6 +29,7 @@ def __init__(self):
 
         self.emit_images = True
         self.api_base = "https://api.openinterpreter.com/v0"
+        self.save_skills = True
         # self.api_base = "http://0.0.0.0/v0"
 
     # Shortcut for computer.terminal.languages
diff --git a/interpreter/core/computer/skills/skills.py b/interpreter/core/computer/skills/skills.py
index 4154b0acc..e0f8023f8 100644
--- a/interpreter/core/computer/skills/skills.py
+++ b/interpreter/core/computer/skills/skills.py
@@ -1,17 +1,21 @@
+import glob
 import os
 
 import aifs
 
-from ....terminal_interface.utils.oi_dir import oi_dir
-
-skills_dir = os.path.join(oi_dir, "skills")
-
 
 class Skills:
     def __init__(self, computer):
         self.computer = computer
-        self.path = skills_dir
+        self.skills_dir = None
 
     def search(self, query):
-        result = aifs.search(skills_dir, query, python_docstrings_only=True)
+        result = aifs.search(self.skills_dir, query, python_docstrings_only=True)
         return result
+
+    def import_skills(self):
+        self.computer.save_skills = False
+        for file in glob.glob(os.path.join(self.skills_dir, "*.py")):
+            with open(file, "r") as f:
+                self.computer.run("python", f.read())
+        self.computer.save_skills = True
diff --git a/interpreter/core/computer/terminal/languages/jupyter_language.py b/interpreter/core/computer/terminal/languages/jupyter_language.py
index be21d53a2..33c1ffb3d 100644
--- a/interpreter/core/computer/terminal/languages/jupyter_language.py
+++ b/interpreter/core/computer/terminal/languages/jupyter_language.py
@@ -74,14 +74,15 @@ def run(self, code):
             # Non blocking
             functions = {}
 
-        skill_library_path = self.computer.skills.path
+        if self.computer.save_skills and functions:
+            skill_library_path = self.computer.skills.path
 
-        if not os.path.exists(skill_library_path):
-            os.makedirs(skill_library_path)
+            if not os.path.exists(skill_library_path):
+                os.makedirs(skill_library_path)
 
-        for filename, code in functions.items():
-            with open(f"{skill_library_path}/{filename}.py", "w") as file:
-                file.write(code)
+            for filename, code in functions.items():
+                with open(f"{skill_library_path}/{filename}.py", "w") as file:
+                    file.write(code)
 
         # lel
         # exec(code)
@@ -409,6 +410,9 @@ def string_to_python(code_as_string):
                     import_statements.append(f"import {alias.name}")
         # Check for function definitions
         elif isinstance(node, ast.FunctionDef):
+            if node.name.startswith("_"):
+                # ignore private functions
+                continue
             func_info = {
                 "name": node.name,
                 "docstring": ast.get_docstring(node),
diff --git a/interpreter/core/core.py b/interpreter/core/core.py
index cd0a6c0ce..2a4b92444 100644
--- a/interpreter/core/core.py
+++ b/interpreter/core/core.py
@@ -6,6 +6,7 @@
 import asyncio
 import json
 import os
+from pathlib import Path
 import threading
 import time
 from datetime import datetime
@@ -62,6 +63,8 @@ def __init__(
         system_message=default_system_message,
         custom_instructions="",
         computer=None,
+        skills_dir=None,
+        import_skills=True,
     ):
         # State
         self.messages = [] if messages is None else messages
@@ -97,6 +100,12 @@ def __init__(
 
         # Computer
         self.computer = Computer() if computer is None else computer
+        self.computer.skills.skills_dir = (
+            skills_dir if skills_dir else str(Path(oi_dir) / "skills")
+
+        )
+        if import_skills:
+            self.computer.skills.import_skills()
 
     def server(self, *args, **kwargs):
         server(self, *args, **kwargs)

### Describe the changes you have made:
- When loading the skills initially, don't overwrite them.
- Ignore private functions in skills

### Reference any relevant issues (e.g. "Fixes #000"):

### Pre-Submission Checklist (optional but appreciated):

- [x] I have included relevant documentation updates (stored in /docs)
- [x] I have read `docs/CONTRIBUTING.md`
- [ ] I have read `docs/ROADMAP.md`

### OS Tests (optional but appreciated):

- [ ] Tested on Windows
- [x] Tested on MacOS
- [ ] Tested on Linux
