Skip to content

Pieces CLI UX problems + bug #622

@brandonzylstra

Description

@brandonzylstra

Take a look at this session:

brandon@Air ~ % which pieces
/opt/homebrew/bin/pieces
brandon@Air ~ % pieces --help
It looks like this is your first time using the Pieces CLI.
Would you like to start onboarding [y/n/skip]: y
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
┃                                          Welcome to the Pieces CLI                                          ┃
┃                               Remember Anything and Interact with Everything                                ┃
┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛
Whenever you want to exit the onboarding flow type `exit`.
✅ PiecesOS is running
Step 1: Sign into Pieces
You must be signed in to use Pieces. Type pieces login to sign into an account.                                
brandon@Air.local brandon$ pieces login
Signed in as Brandon Zylstra
email: brandon.zylstra@gmail.com
Press any key to proceed

Step 2: Save a Material
Let's get started by saving a material to Pieces. Copy the following python material:                          

                                                                                                               
 import requests                                                                                               
 response = requests.get("https://pieces.app")                                                                 
 print(response.text)                                                                                          
                                                                                                               
Press any key to proceed

You can save the material by typing pieces create                                                              
brandon@Air.local brandon$ pieces create

############################

Content to save: 

############################

import requests
response = requests.get("https://pieces.app")
print(response.text)

Do you want to save this content? [y/n]: y
Saving...

Material successfully saved. Use pieces list to view.                                                          
Step 3: Open your Saved materials
Now, let's view all of your saved materials by typing pieces list.                                             
brandon@Air.local brandon$ pieces list

Code content:
import requests

    def connect_to_pieces_os(port):
        endpoint = f"http://localhost:{port}/connect"
        seeded_application = {
            'application': {
                      "'name': 'OPEN_SOURCE',
                      'version': '0.0.1"',
                    ‘platform’: 'MACOS',

            response   requests.    (endpoint, json=seeded_ application)

            if not response.
                raise Exception(f"HTTP error! status: {response.

            context = response.    ()
            return context

        except Exception as error:
            print('Error:', error)
            ralse error

Step 4: Start a Session
Starting a session allows you to run multiple commands without having to start the Pieces CLI every time.Start 
a session with pieces run. To exit your session, use exit.                                                     
brandon@Air.local brandon$ pieces run

############################

Pieces CLI Started

############################

Operating System: macOS-15.5-arm64-arm-64bit-Mach-O
 Python Version: 3.13.5
 PiecesOS Version: 12.1.0
 Pieces CLI Version: 1.15.2
 Application: PIECES_FOR_DEVELOPERS_CLI

Enter command:
  'help' to see all commands
  '-h' after a command to see detailed help
  'exit' to quit

Ready...

############################

User: brandon
Invalid command: 'brandon'
Did you mean run?
User: exit

Exiting...

Step 5: Chat with the Copilot
Start a chat with the Copilot by using pieces ask 'How to print I love Pieces CLI in Python and Java'.         
brandon@Air.local brandon$ pieces ask 'Why is the pieces CLI UX so painful?'
❌ Wrong command. Please use: pieces ask 'How to print I love Pieces CLI in Python and Java'                   
brandon@Air.local brandon$ pieces ask 'How to print I love Pieces CLI in Python and Java'
Command failed: ask
1 validation error for Model
foundation
  value is not a valid enumeration member; permitted: 'UNKNOWN', 'GPT_3.5', 'GPT_4', 'T5', 'LLAMA_2_7B', 
'LLAMA_2_13B', 'LLAMA_2_70B', 'LLAMA_3_2B', 'LLAMA_3_13B', 'LLAMA_3_70B', 'CODE_LLAMA_2_7B', 
'CODE_LLAMA_2_13B', 'CODE_LLAMA_2_70B', 'BARD', 'ALPACA_7B', 'ALPACA_13B', 'ALPACA_33B', 'ALPACA_65B', 
'VICUNA_7B', 'VICUNA_13B', 'VICUNA_33B', 'VICUNA_65B', 'GUANACO_7B', 'GUANACO_13B', 'GUANACO_33B', 
'GUANACO_65B', 'OPENLLAMA_7B', 'OPENLLAMA_13B', 'GORILLA_7B', 'GORILLA_13B', 'GORILLA_33B', 'GORILLA_65B', 
'WIZARDLM_7B', 'WIZARDLM_13B', 'WIZARDLM_30B', 'YULANCHAT_13B', 'YULANCHAT_65B', 'REDPAJAMA_3B', 
'REDPAJAMA_7B', 'REDPAJAMA_13B', 'REDPAJAMA_33B', 'REDPAJAMA_65B', 'DOLLY_70M', 'DOLLY_160M', 'DOLLY_410M', 
'DOLLY_1B', 'DOLLY_1.4B', 'DOLLY_2.8B', 'DOLLY_6.9B', 'DOLLY_12B', 'PYTHIA_70M', 'PYTHIA_160M', 'PYTHIA_410M', 
'PYTHIA_1B', 'PYTHIA_1.4B', 'PYTHIA_2.8B', 'PYTHIA_6.9B', 'PYTHIA_12B', 'MOSS_7B', 'MOSS_13B', 'RMKV_LM_100M', 
'RMKV_LM_400M', 'RMKV_LM_1.5B', 'RMKV_LM_3B', 'RMKV_LM_7B', 'RMKV_LM_14B', 'STARCODER_15.5B', 
'WIZARDCODER_15B', 'SANTACODER_1.1B', 'TEXT_BISON', 'TEXTEMBEDDING_GECKO', 'CHAT_BISON', 'CODE_BISON', 
'CODECHAT_BISON', 'CODE_GECKO', 'DISTILROBERTA', 'MISTRAL_7B', 'GEMINI', 'GEMINI_1.5', 'GEMINI_2', 'FAST_TEXT',
'UNIXCODER', 'PHI_1.5', 'PHI_2', 'MIXTRAL_8_x_7B', 'MIXTRAL_8_x_22B', 'GEMMA_7B', 'GEMMA_2B', 'CODE_GEMMA_7B', 
'CODE_GEMMA_2B', 'RECURRENT_GEMMA_2B', 'GROK_1', 'GROK_1.5', 'CLAUDE_2', 'CLAUDE_3', 'STARLING_7B', 'DBRX', 
'COMMAND_R+', 'GEMMA_1.1_2B', 'GEMMA_1.1_7B', 'GEMMA_2_9B', 'PHI_3_MINI', 'PHI_3_SMALL', 'GRANITE_3B', 
'GRANITE_8B', 'LLAMA_3_8B', 'CLAUDE_3.5', 'CLAUDE_LATEST', 'GRANITE_LATEST', 'LLAMA_LATEST', 'PHI_LATEST', 
'GEMMA_LATEST', 'GEMINI_LATEST', 'GPT_LATEST', 'AZURE_LATEST', 'AZURE_FAST', 'AZURE_BEST', 'AZURE_DEFAULT', 
'AZURE_CUSTOM', 'PERPLEXITY_LATEST', 'PERPLEXITY_FAST', 'PERPLEXITY_BEST', 'PERPLEXITY_DEFAULT', 
'PERPLEXITY_CUSTOM', 'CODESTRAL_LATEST', 'DEEPSEEK_LATEST', 'LLAVA_LATEST', 'MIXTRAL_LATEST', 'MISTRAL_LATEST',
'ORCA_LATEST', 'QWEN_CODER_LATEST', 'QWEN_LATEST', 'QWQ_LATEST', 'STARCODER_LATEST', 'TINYLLAMA_LATEST', 
'VICUNA_LATEST', 'WIZARD_LATEST', 'ZEPHYR_LATEST', 'POTION' (type=type_error.enum; 
enum_values=[<ModelFoundationEnum.UNKNOWN: 'UNKNOWN'>, <ModelFoundationEnum.GPT_3_DOT_5: 'GPT_3.5'>, 
<ModelFoundationEnum.GPT_4: 'GPT_4'>, <ModelFoundationEnum.T5: 'T5'>, <ModelFoundationEnum.LLAMA_2_7_B: 
'LLAMA_2_7B'>, <ModelFoundationEnum.LLAMA_2_13_B: 'LLAMA_2_13B'>, <ModelFoundationEnum.LLAMA_2_70_B: 
'LLAMA_2_70B'>, <ModelFoundationEnum.LLAMA_3_2_B: 'LLAMA_3_2B'>, <ModelFoundationEnum.LLAMA_3_13_B: 
'LLAMA_3_13B'>, <ModelFoundationEnum.LLAMA_3_70_B: 'LLAMA_3_70B'>, <ModelFoundationEnum.CODE_LLAMA_2_7_B: 
'CODE_LLAMA_2_7B'>, <ModelFoundationEnum.CODE_LLAMA_2_13_B: 'CODE_LLAMA_2_13B'>, 
<ModelFoundationEnum.CODE_LLAMA_2_70_B: 'CODE_LLAMA_2_70B'>, <ModelFoundationEnum.BARD: 'BARD'>, 
<ModelFoundationEnum.ALPACA_7_B: 'ALPACA_7B'>, <ModelFoundationEnum.ALPACA_13_B: 'ALPACA_13B'>, 
<ModelFoundationEnum.ALPACA_33_B: 'ALPACA_33B'>, <ModelFoundationEnum.ALPACA_65_B: 'ALPACA_65B'>, 
<ModelFoundationEnum.VICUNA_7_B: 'VICUNA_7B'>, <ModelFoundationEnum.VICUNA_13_B: 'VICUNA_13B'>, 
<ModelFoundationEnum.VICUNA_33_B: 'VICUNA_33B'>, <ModelFoundationEnum.VICUNA_65_B: 'VICUNA_65B'>, 
<ModelFoundationEnum.GUANACO_7_B: 'GUANACO_7B'>, <ModelFoundationEnum.GUANACO_13_B: 'GUANACO_13B'>, 
<ModelFoundationEnum.GUANACO_33_B: 'GUANACO_33B'>, <ModelFoundationEnum.GUANACO_65_B: 'GUANACO_65B'>, 
<ModelFoundationEnum.OPENLLAMA_7_B: 'OPENLLAMA_7B'>, <ModelFoundationEnum.OPENLLAMA_13_B: 'OPENLLAMA_13B'>, 
<ModelFoundationEnum.GORILLA_7_B: 'GORILLA_7B'>, <ModelFoundationEnum.GORILLA_13_B: 'GORILLA_13B'>, 
<ModelFoundationEnum.GORILLA_33_B: 'GORILLA_33B'>, <ModelFoundationEnum.GORILLA_65_B: 'GORILLA_65B'>, 
<ModelFoundationEnum.WIZARDLM_7_B: 'WIZARDLM_7B'>, <ModelFoundationEnum.WIZARDLM_13_B: 'WIZARDLM_13B'>, 
<ModelFoundationEnum.WIZARDLM_30_B: 'WIZARDLM_30B'>, <ModelFoundationEnum.YULANCHAT_13_B: 'YULANCHAT_13B'>, 
<ModelFoundationEnum.YULANCHAT_65_B: 'YULANCHAT_65B'>, <ModelFoundationEnum.REDPAJAMA_3_B: 'REDPAJAMA_3B'>, 
<ModelFoundationEnum.REDPAJAMA_7_B: 'REDPAJAMA_7B'>, <ModelFoundationEnum.REDPAJAMA_13_B: 'REDPAJAMA_13B'>, 
<ModelFoundationEnum.REDPAJAMA_33_B: 'REDPAJAMA_33B'>, <ModelFoundationEnum.REDPAJAMA_65_B: 'REDPAJAMA_65B'>, 
<ModelFoundationEnum.DOLLY_70_M: 'DOLLY_70M'>, <ModelFoundationEnum.DOLLY_160_M: 'DOLLY_160M'>, 
<ModelFoundationEnum.DOLLY_410_M: 'DOLLY_410M'>, <ModelFoundationEnum.DOLLY_1_B: 'DOLLY_1B'>, 
<ModelFoundationEnum.DOLLY_1_DOT_4_B: 'DOLLY_1.4B'>, <ModelFoundationEnum.DOLLY_2_DOT_8_B: 'DOLLY_2.8B'>, 
<ModelFoundationEnum.DOLLY_6_DOT_9_B: 'DOLLY_6.9B'>, <ModelFoundationEnum.DOLLY_12_B: 'DOLLY_12B'>, 
<ModelFoundationEnum.PYTHIA_70_M: 'PYTHIA_70M'>, <ModelFoundationEnum.PYTHIA_160_M: 'PYTHIA_160M'>, 
<ModelFoundationEnum.PYTHIA_410_M: 'PYTHIA_410M'>, <ModelFoundationEnum.PYTHIA_1_B: 'PYTHIA_1B'>, 
<ModelFoundationEnum.PYTHIA_1_DOT_4_B: 'PYTHIA_1.4B'>, <ModelFoundationEnum.PYTHIA_2_DOT_8_B: 'PYTHIA_2.8B'>, 
<ModelFoundationEnum.PYTHIA_6_DOT_9_B: 'PYTHIA_6.9B'>, <ModelFoundationEnum.PYTHIA_12_B: 'PYTHIA_12B'>, 
<ModelFoundationEnum.MOSS_7_B: 'MOSS_7B'>, <ModelFoundationEnum.MOSS_13_B: 'MOSS_13B'>, 
<ModelFoundationEnum.RMKV_LM_100_M: 'RMKV_LM_100M'>, <ModelFoundationEnum.RMKV_LM_400_M: 'RMKV_LM_400M'>, 
<ModelFoundationEnum.RMKV_LM_1_DOT_5_B: 'RMKV_LM_1.5B'>, <ModelFoundationEnum.RMKV_LM_3_B: 'RMKV_LM_3B'>, 
<ModelFoundationEnum.RMKV_LM_7_B: 'RMKV_LM_7B'>, <ModelFoundationEnum.RMKV_LM_14_B: 'RMKV_LM_14B'>, 
<ModelFoundationEnum.STARCODER_15_DOT_5_B: 'STARCODER_15.5B'>, <ModelFoundationEnum.WIZARDCODER_15_B: 
'WIZARDCODER_15B'>, <ModelFoundationEnum.SANTACODER_1_DOT_1_B: 'SANTACODER_1.1B'>, 
<ModelFoundationEnum.TEXT_BISON: 'TEXT_BISON'>, <ModelFoundationEnum.TEXTEMBEDDING_GECKO: 
'TEXTEMBEDDING_GECKO'>, <ModelFoundationEnum.CHAT_BISON: 'CHAT_BISON'>, <ModelFoundationEnum.CODE_BISON: 
'CODE_BISON'>, <ModelFoundationEnum.CODECHAT_BISON: 'CODECHAT_BISON'>, <ModelFoundationEnum.CODE_GECKO: 
'CODE_GECKO'>, <ModelFoundationEnum.DISTILROBERTA: 'DISTILROBERTA'>, <ModelFoundationEnum.MISTRAL_7_B: 
'MISTRAL_7B'>, <ModelFoundationEnum.GEMINI: 'GEMINI'>, <ModelFoundationEnum.GEMINI_1_DOT_5: 'GEMINI_1.5'>, 
<ModelFoundationEnum.GEMINI_2: 'GEMINI_2'>, <ModelFoundationEnum.FAST_TEXT: 'FAST_TEXT'>, 
<ModelFoundationEnum.UNIXCODER: 'UNIXCODER'>, <ModelFoundationEnum.PHI_1_DOT_5: 'PHI_1.5'>, 
<ModelFoundationEnum.PHI_2: 'PHI_2'>, <ModelFoundationEnum.MIXTRAL_8_X_7_B: 'MIXTRAL_8_x_7B'>, 
<ModelFoundationEnum.MIXTRAL_8_X_22_B: 'MIXTRAL_8_x_22B'>, <ModelFoundationEnum.GEMMA_7_B: 'GEMMA_7B'>, 
<ModelFoundationEnum.GEMMA_2_B: 'GEMMA_2B'>, <ModelFoundationEnum.CODE_GEMMA_7_B: 'CODE_GEMMA_7B'>, 
<ModelFoundationEnum.CODE_GEMMA_2_B: 'CODE_GEMMA_2B'>, <ModelFoundationEnum.RECURRENT_GEMMA_2_B: 
'RECURRENT_GEMMA_2B'>, <ModelFoundationEnum.GROK_1: 'GROK_1'>, <ModelFoundationEnum.GROK_1_DOT_5: 'GROK_1.5'>, 
<ModelFoundationEnum.CLAUDE_2: 'CLAUDE_2'>, <ModelFoundationEnum.CLAUDE_3: 'CLAUDE_3'>, 
<ModelFoundationEnum.STARLING_7_B: 'STARLING_7B'>, <ModelFoundationEnum.DBRX: 'DBRX'>, 
<ModelFoundationEnum.COMMAND_R_PLUS: 'COMMAND_R+'>, <ModelFoundationEnum.GEMMA_1_DOT_1_2_B: 'GEMMA_1.1_2B'>, 
<ModelFoundationEnum.GEMMA_1_DOT_1_7_B: 'GEMMA_1.1_7B'>, <ModelFoundationEnum.GEMMA_2_9_B: 'GEMMA_2_9B'>, 
<ModelFoundationEnum.PHI_3_MINI: 'PHI_3_MINI'>, <ModelFoundationEnum.PHI_3_SMALL: 'PHI_3_SMALL'>, 
<ModelFoundationEnum.GRANITE_3_B: 'GRANITE_3B'>, <ModelFoundationEnum.GRANITE_8_B: 'GRANITE_8B'>, 
<ModelFoundationEnum.LLAMA_3_8_B: 'LLAMA_3_8B'>, <ModelFoundationEnum.CLAUDE_3_DOT_5: 'CLAUDE_3.5'>, 
<ModelFoundationEnum.CLAUDE_LATEST: 'CLAUDE_LATEST'>, <ModelFoundationEnum.GRANITE_LATEST: 'GRANITE_LATEST'>, 
<ModelFoundationEnum.LLAMA_LATEST: 'LLAMA_LATEST'>, <ModelFoundationEnum.PHI_LATEST: 'PHI_LATEST'>, 
<ModelFoundationEnum.GEMMA_LATEST: 'GEMMA_LATEST'>, <ModelFoundationEnum.GEMINI_LATEST: 'GEMINI_LATEST'>, 
<ModelFoundationEnum.GPT_LATEST: 'GPT_LATEST'>, <ModelFoundationEnum.AZURE_LATEST: 'AZURE_LATEST'>, 
<ModelFoundationEnum.AZURE_FAST: 'AZURE_FAST'>, <ModelFoundationEnum.AZURE_BEST: 'AZURE_BEST'>, 
<ModelFoundationEnum.AZURE_DEFAULT: 'AZURE_DEFAULT'>, <ModelFoundationEnum.AZURE_CUSTOM: 'AZURE_CUSTOM'>, 
<ModelFoundationEnum.PERPLEXITY_LATEST: 'PERPLEXITY_LATEST'>, <ModelFoundationEnum.PERPLEXITY_FAST: 
'PERPLEXITY_FAST'>, <ModelFoundationEnum.PERPLEXITY_BEST: 'PERPLEXITY_BEST'>, 
<ModelFoundationEnum.PERPLEXITY_DEFAULT: 'PERPLEXITY_DEFAULT'>, <ModelFoundationEnum.PERPLEXITY_CUSTOM: 
'PERPLEXITY_CUSTOM'>, <ModelFoundationEnum.CODESTRAL_LATEST: 'CODESTRAL_LATEST'>, 
<ModelFoundationEnum.DEEPSEEK_LATEST: 'DEEPSEEK_LATEST'>, <ModelFoundationEnum.LLAVA_LATEST: 'LLAVA_LATEST'>, 
<ModelFoundationEnum.MIXTRAL_LATEST: 'MIXTRAL_LATEST'>, <ModelFoundationEnum.MISTRAL_LATEST: 'MISTRAL_LATEST'>,
<ModelFoundationEnum.ORCA_LATEST: 'ORCA_LATEST'>, <ModelFoundationEnum.QWEN_CODER_LATEST: 'QWEN_CODER_LATEST'>,
<ModelFoundationEnum.QWEN_LATEST: 'QWEN_LATEST'>, <ModelFoundationEnum.QWQ_LATEST: 'QWQ_LATEST'>, 
<ModelFoundationEnum.STARCODER_LATEST: 'STARCODER_LATEST'>, <ModelFoundationEnum.TINYLLAMA_LATEST: 
'TINYLLAMA_LATEST'>, <ModelFoundationEnum.VICUNA_LATEST: 'VICUNA_LATEST'>, <ModelFoundationEnum.WIZARD_LATEST: 
'WIZARD_LATEST'>, <ModelFoundationEnum.ZEPHYR_LATEST: 'ZEPHYR_LATEST'>, <ModelFoundationEnum.POTION: 
'POTION'>])
brandon@Air ~ % 
  1. Disregarding user commands does not get the relationship off on the right foot.

I issued the command pieces --help, but this was completely ignored, and instead I was launched into an onboarding process. That doesn't set a positive tone.

  1. Limited options don't make it clear whether the onboarding can be done later.

If I were to skip it, would I lose my chance?

  1. Deceiving the user to make it look like the user is in the shell when they are not does not engender trust.

The prompt brandon@Air.local brandon$ was close enough to my normal prompt that I didn't notice at first that I was not actually using the shell. This sort of deception is the sort of thing one would expect from malware writers.

At first I thought something had redefined my prompt, but later when other things didn't work properly (keystrokes which would work at a shell prompt) I realized I was not at the shell prompt.

  1. "A material"

What is "a material"? Do you mean a snippet?

There are more problems but I can't remember exactly how everything went before it all blew up in my face. It was certainly confusing, though.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions