| title | Second Brain Environment |
|---|---|
| emoji | π§ |
| colorFrom | indigo |
| colorTo | purple |
| sdk | docker |
| app_port | 8000 |
A Personal Knowledge Management environment where AI agents learn to capture, organize, and retrieve information β simulating the real-world challenge of managing a second brain.
Hugging Face Space: https://huggingface.co/spaces/RAc1928/second-brain-env
This project has been fully containerized using a custom Dockerfile with multi-task orchestration built directly into a standalone Hugging Face Space. You can test the beautiful OpenEnv Playground interactively at the link above!
Millions of people struggle with information overload daily. We save articles, capture meeting notes, jot down ideas β but rarely retrieve them when we actually need them.
This environment simulates a genuine real-world application by training AI agents to act as a Personal Knowledge Manager. The AI must capture raw notes, categorize them correctly, and perform complex synthesis to retrieve the right information at the right time. This targets practical utility beneficial to students, professionals, researchers, and anyone navigating information density.
The Environment hosts 3 distinct difficulty-scaled tasks, each with deterministic programmatic graders measuring partial progress on a strict [0.0, 1.0] scale.
| Property | Value |
|---|---|
| Goal | Assign each of 10 raw notes to the correct category |
| Categories | work, personal, reference, action_item |
| Max Steps | 12 |
| Reward | +0.10 per correct, -0.02 per wrong, 0.00 per skip |
| Score Formula | correct_count / 10 |
| Property | Value |
|---|---|
| Goal | Find the most relevant note in a 30-note KB for each of 5 questions |
| Max Steps | 15 |
| Reward | +0.20 exact match, +0.05β0.16 near miss, -0.05 miss, -0.10 repeated failure |
| Score Formula | avg(retrieval_scores) / 5 |
| Property | Value |
|---|---|
| Goal | Synthesize multi-theme insights from a 50-note knowledge base |
| Max Steps | 20 |
| Reward | Up to +0.35 per question (theme coverage + note coverage + length) |
| Score Formula | avg(synthesis_scores) / 3 |
class SecondBrainAction(Action):
action_type: str # "categorize" | "retrieve" | "synthesize" | "tag" | "skip"
content: str # category name / search query / synthesized answer
note_id: Optional[str] # target note ID (optional)
tags: Optional[List[str]] # tags to apply (optional)Action types:
categorizeβ assign a category label to the current note (Task 1)retrieveβ search the knowledge base with a query string (Task 2 & 3)synthesizeβ produce a final synthesized answer (Task 3)skipβ skip the current item (no reward)
class SecondBrainObservation(Observation):
current_note: Optional[Dict] # note being processed (Task 1)
query: str # question to answer (Task 2 & 3)
retrieved_notes: Optional[List] # top notes from KB search
knowledge_base_size: int # total notes in KB
step_count: int # current step
task_name: str # active task
reward: float # reward from last action
done: bool # episode finished?
score: float # running score in [0.0, 1.0]
feedback: str # human-readable feedback
valid_categories: List[str] # valid labels for Task 1
remaining_items: int # items left to processpip install openenv-core python-dotenv
# Option A: clone directly
git clone https://huggingface.co/spaces/RAc1928/second-brain-env
cd second-brain-envdocker build -t second-brain-env .
# The Docker container will automatically launch the internal servers and execute inference.py
docker run -e HF_TOKEN="your_hf_token_here" second-brain-envimport asyncio
from second_brain_env import SecondBrainEnv, SecondBrainAction
async def main():
async with SecondBrainEnv(base_url="http://localhost:8000") as env:
# Reset
result = await env.reset()
print(result.observation.feedback)
# Task 1: categorize a note
result = await env.step(SecondBrainAction(
action_type="categorize",
content="work"
))
print(f"Reward: {result.observation.reward}")
print(f"Score: {result.observation.score}")
asyncio.run(main())openenv validate .
# Output: [OK] : Ready for multi-mode deploymentRequired Hackerthon variables are sourced via environment.
export HF_TOKEN="hf_your_token_here"
export API_BASE_URL="https://router.huggingface.co/v1"
export MODEL_NAME="Qwen/Qwen2.5-72B-Instruct"
python inference.pyIf you wish to test your Docker container manually via CURL:
# Test
curl -X POST http://localhost:8000/reset
curl -X POST http://localhost:8000/step \
-H "Content-Type: application/json" \
-d '{"action_type": "categorize", "content": "work"}'Generated consistently by the Qwen/Qwen2.5-72B-Instruct model strictly simulating all three distinct multi-tasks inside the architecture restrictions.
| Task | Difficulty | Evaluator Inference Score |
|---|---|---|
note_categorization |
π’ Easy | 1.000 |
memory_retrieval |
π‘ Medium | 1.000 |
knowledge_synthesis |
π΄ Hard | 0.560 |
| Average Global Index | 0.853 |
Rewards are dense and meaningful β every step produces a targeted signal eliminating sparse loops. Undesirable behavior is heavily penalized (e.g. repeated failure/looping or hallucinating fake notes).
Task 1 (categorization):
Correct category β +0.10 (agent gets immediate confirmation)
Wrong category β -0.02 (small penalty, not catastrophic)
Skip β 0.00 (neutral β no progress)
Task 2 (retrieval):
Exact match β +0.20 (top-1 is the correct note)
Near miss rank 2 β +0.16 (partial credit)
Near miss rank 3 β +0.12
Not in top 5 β -0.05 (try a different query)
3 consecutive bad β -0.10 (penalty for looping)
Task 3 (synthesis):
Per relevant note found β +0.05
Synthesis theme coverage β up to +0.12
Synthesis note coverage β up to +0.11
Answer length bonus β up to +0.07
Multi-theme connection β +0.05 bonus
Hallucinated facts β -0.10 penalty
second_brain_env/
βββ Dockerfile β Container setup executing inference module
βββ start.sh β Shell script server orchestrator
βββ inference.py β Baseline OpenEnv tracking script
βββ requirements.txt β Project dependencies for container setup
βββ openenv.yaml β Environment architecture manifest
βββ pyproject.toml β PyPI Package Dependencies
βββ README.md
βββ __init__.py
βββ models.py β Strongly typed OpenEnv primitive models
βββ client.py
βββ server/
βββ app.py β FastAPI & create_web_interface_app Server
βββ second_brain_env_environment.py
βββ data.py β Static Seeded Knowledge Base
Team TwinCoders
- Rachana N
- Rakshith N
Built for the Meta Γ PyTorch Γ HuggingFace OpenEnv Hackathon 2026.